Talaan ng mga Nilalaman:
- Hakbang 1: Saiba Mais
- Hakbang 2: Monte O Circuito Abaixo
- Hakbang 3: Mag-install O Código No Seu Arduino
- Hakbang 4: Uma UI Personalizada
- Hakbang 5: Dúvidas?
Video: Arduino TDCS Super Simples. Transcranial Direct Kasalukuyang Stimulator (tDCS) DIY: 5 Mga Hakbang
2024 May -akda: John Day | [email protected]. Huling binago: 2024-01-30 13:13
Para sa fazer este tDCS você precisará apenas de um arduino, resistor, capacitor at alguns cabosComponentes
-
Arduino
- Pino D13 como saída PWM (pode ser alterado).
- Pino A0 como entrada analógica (para sa feedback de corrente).
- Pino GND apenas para GND.
- Resistor (~ 470 Ω, mas provavelmente entre 300-1000 Ω funciona, você precisará alterar no código fonte)
- Kapasitor (220 μF). Paglilingkod para sa pagtatag ng os pulsos gawin PWM.
- Eletrodos de Esponja (Gumamit ng água salina para molhá-lo).
Como funciona
O Arduino calcula a corrente padrão (pode ser alterado) que passará pelo seu cérebro apenas por mudar a voltagem de saída. Tumingin sa pode alterar o valor do target_mA pelo serial CLI (Console).
Hakbang 1: Saiba Mais
Mag-iwan ng pahina sa ngayon sobre tDCS primeiro. Hindi mo ito nabibigyan ng peligro ang FDA at ang pode ay hindi nakakaunawa sa isang mas mahusay na pamamahala, punong-guro na nagtatrabaho sa iyo upang mabuo ang mga ito sa colaterais, precauções at dentre outros…
Hakbang 2: Monte O Circuito Abaixo
Nao se esqueça das esponjas com água salina!
Hakbang 3: Mag-install O Código No Seu Arduino
Mahusay na pagbabago bilang configurações at parametros na área de HARDWARE PARAMS at CONFIGURABLE PARAMS.
Tumingin sa pagbabago ng rate ng serial para sa: 115200 para sa poder ver o resulta.
Para sa mga pagpapatupad ng comandos, troque o Walang Pagtatapos ng Linya para sa Pagbabalik ng Karwahe.
O código fonte + tutorial também podem ser encontrados no repositório:
Código:
const String ver = "2.0m"; // HARDWARE PARAMS const int analogInPin = A0; // Entrada do Analógico const int analogOutPin = 13; // Saida D13 padrão float maxOutV = 5.0; // A voltagem de saída PWM padrão do Arduino [V] float maxRefInV = 1.1; // Referencia à voltagem analógica [V] float R = 470.0; // Resistencia da corrente [Ohm]
// CONFIGURABLE PARAMS
bool plotter = false; // Defina: true, caso esteja usando o Serial plotter bool putty = false; // Defina: true, caso esteja usando o PuTTT (pode ser alterado no CLI) int maxmin = 30; // Tempo (em minutos) necessário para desligar [Min] float target_mA = 2.73; // Essa é a corrente que passará pelo seu cérebro !!! [mA] float epsilon_mA = 0.03; // Diferença máxima entre a corrente real e o target_mA (Hindi mo na mababago ang mga ito saiba o que está fazendo!)
// INIT GLOBALS
int estado = 1; / * -1 - Cérebro não identificado 0 - Voltagem sendo alterada para definir a corrente padrão 1 - Tudo certo. Você esta na corrente definida -10 - Voltagem desligada * / float outV = maxOutV; // Voltagem int debounc_state = 0; int zeros_len = 0; lumutang smoothed_mA = 0;
String commandString = ""; // para sa CLI
// FEEDBACK HELPERS
float computeOutVoltage (float V, float new_mA) {if (abs (new_mA-target_mA) maxOutV) {state = -1; // resistência muito alta -> cérebro não encontrado? ibalik ang maxOutV; // return maxOutV / 5.0; // para segurança} estado = 0; ibalik ang 0.1 * bago_V + 0.9 * V; // return new_V; }
int convertVtoOutputValue (float V) {
bumalik na pigilan (int (V / maxOutV * 255), 0, 255); }
float sensorValue2mA (int sensorValue) {
float sensorVoltage = sensorValue / 1023.0 * maxRefInV; float sensor_mA = sensorVoltage / R * 1000.0; ibalik ang sensor_mA; }
int debounc_state_compute (int estado) {
kung (estado 5) ibalik ang 0; } bumalik 1; }
unsigned matagal na pagsisimula, endc;
void process_feedback () {int sensorValue = analogRead (analogInPin); float new_mA = sensorValue2mA (sensorValue); smoothed_mA = 0.2 * new_mA + 0.8 * smoothed_mA; float V = outV; outV = computeOutVoltage (V, new_mA); analogWrite (analogOutPin, convertVtoOutputValue (outV)); debounce_state = debounce_state_compute (estado); // Exibir informações no CLI endc = (millis () - start) / 1000; String tv = "[", ttm = "mA /", tsm = "V,", ts = "mA] | Estado:", h = "| Tempo:", s = ":", leadM = "", leadS = "", plotT = "Target:", plotmA = "\ tSmoothed MA:", plotMin = "\ tMin:", tempo; unsigned long tmin = endc / 60 - ((endc / 60)% 1); // Formatação if (endc% 60 <10) leadS = "0"; kung (tmin = 0) ts = ts + "+"; // Parar automaticamente kung (tmin> maxmin) stop_device (); String txt; kung (plotter) txt = plotT + target_mA + plotMin + "0" + plotmA + smoothed_mA; iba pa txt = tv + V + tsm + smoothed_mA + ttm + target_mA + ts + debounce_state + h + tempo; kung (masilya) Serial.print ("\ r / e [? 25l" + txt); iba pa Serial.println (txt);
// wait 2 milliseconds bago ang susunod na loop
// para sa analog-to-digital converter upang maayos // pagkatapos ng huling pagbabasa: pagkaantala (5); }
void stop_device () {
estado = -10; analogWrite (analogOutPin, 0); malinawAndHome (); Serial.println ("Sessão tDCS interrompida"); Serial.println ("-----------------"); tulong (); }
// CLI HELPERS
void clearAndHome () {Serial.write (27); Serial.print ("[2J"); // limpa a tela Serial.write (27); // ESC Serial.print ("[H"); // / r if (! putty) para sa (int i = 0; i <= 30; i ++) Serial.println (""); }
walang bisa ang tulong () {
Serial.println ("tDSC arduino, ver" + ver); Serial.println ("'?' - ajuda"); Serial.println ("'max_time' - atualiza o tempo máximo (em minutos)"); Serial.println ("'target_mA' - atualiza o target (mA)"); Serial.println ("'epsilon_mA' - atualiza o epsilon_mA (mA)"); Serial.println ("'R' - atualiza a resistência do hardware (Ohm)"); Serial.println ("'putty' - muda a formatação de saída pro PuTTY"); Serial.println ("'stop' - para a estimulação"); Serial.println ("'restart' - inicia / reinicia a estimulação & o timer"); Serial.println ("'magpatuloy' - patuloy na isang pagtantya"); Serial.print ("\ n / rEstado: / n / r * max_time:"); Serial.print (maxmin); Serial.print ("minutos / n / r * target_mA:"); Serial.print (target_mA); Serial.print ("mA / n / r * epsilon_mA:"); Serial.print (epsilon_mA); Serial.print ("mA / n / r * R:"); Serial.print (R); Serial.println ("Ohms"); }
bool parse_param (String & cmdString) {
int spacePos = cmdString.indexOf ("); kung (spacePos <= 0) bumalik maling; String command = cmdString.substring (0, spacePos); String fval = cmdString.substring (spacePos + 1); kung (utos == "masilya") kung (fval == "totoo") {putty = totoo; bumalik totoo; } iba pa kung (fval == "false") {putty = false; bumalik totoo; } float val = fval.toFloat (); kung (utos == "target_mA") {kung (val100.0) {bumalik maling; } target_mA = val; malinawAndHome (); tulong (); } iba pa kung (utusan == "epsilon_mA") {kung (val0.3) {return false; } epsilon_mA = val; malinawAndHome (); tulong (); } iba pa kung (utusan == "R") {R = val; malinawAndHome (); tulong (); } iba pa kung (utusan == "max_time") {maxmin = val; malinawAndHome (); tulong (); } iba pa {bumalik na hindi totoo; } bumalik totoo; }
// SETUP AT MAIN LOOP
void setup () {Serial.begin (115200); sanggunian ng analog (INTERNAL); //1.1 V Serial.print ("Sessão iniciada!"); simulan = millis (); } void loop () {if (state! = - 10) {process_feedback (); } kung (Serial.available ()> 0) {char v = Serial.read (); kung (byte (v) == 13) {// Caroli return bool tinanggap = totoo; kung (commandString == "?" || commandString == "stop") {stop_device (); } iba pa kung (commandString == "restart") {clearAndHome (); estado = -1; outV = maxOutV / 5.0; simulan = millis (); tinanggap = false; } iba pa kung (commandString == "magpatuloy") {clearAndHome (); estado = -1; outV = maxOutV / 5.0; tinanggap = false; } iba pa {bool ok = parse_param (commandString); kung (! ok) {clearAndHome (); tulong (); tinanggap = false; Serial.println ("Comando desconhecido: '" + commandString + "'"); }} commandString = ""; kung (tinanggap) {clearAndHome (); tulong (); Serial.println ("Ok!"); }} iba pa {commandString + = v; kung (state == - 10) {Serial.print (v); }}}}
Hakbang 4: Uma UI Personalizada
Para melhor acompanhamento at segurança, gumamit ng isang ferramenta PuTTY, at maaari kang magkaroon ng isang font:
masilya = totoo
Recomendações de definições:
-
Window
- 61 Colunas e 20 Linhas
- Ipakita ang scrollbar desativado
- Window> Hitsura
Fonte: Lucida Console, 28px
Hakbang 5: Dúvidas?
Para abrir a guia de ajuda, digite:
?
e pressione [ENTER]
OBS: Caso o Estado seja:
-1 -> Cérebro não identificado (corrente aberta) +0 -> Ajustando voltagem + 1 -> Tudo certo, tDCS funcionando
Inirerekumendang:
DIY Constant Kasalukuyang Pag-load: 4 Mga Hakbang (na may Mga Larawan)
DIY Constant Kasalukuyang Pag-load: Sa maliit na proyekto na ito ipapakita ko sa iyo kung paano gumawa ng isang simpleng naaayos na pare-pareho na kasalukuyang pag-load. Ang ganitong gadget ay kapaki-pakinabang kung nais mong masukat ang kapasidad ng mga baterya ng Li-Ion na chino. O maaari mong subukan kung gaano katatag ang iyong supply ng kuryente sa isang tiyak na karga
Pagdaragdag ng isang Kasalukuyang Tampok ng Limit sa isang Buck / Boost Converter: 4 Mga Hakbang (na may Mga Larawan)
Pagdaragdag ng isang Kasalukuyang Tampok ng Limit sa isang Buck / Boost Converter: Sa proyektong ito magkakaroon kami ng isang mas malapit na pagtingin sa isang pangkaraniwang buck / boost converter at lumikha ng isang maliit, karagdagang circuit na nagdaragdag ng isang kasalukuyang tampok na limitasyon dito. Sa pamamagitan nito, ang buck / boost converter ay maaaring magamit tulad ng isang variable lab bench power supply. Le
LM317 Kasalukuyang Mga Lihim ng pagpapalakas !: 4 Mga Hakbang
LM317 Kasalukuyang Mga Lihim ng Boosting !: Ang AbstractLM317 ay isa sa pinakatanyag na adjustable chip ng regulator. Ang output boltahe ng regulator ay maaaring maiakma mula sa 1.25V hanggang 35V. Gayunpaman, ang chip ay maaaring maghatid ng mga alon hanggang sa 1.5A na hindi sapat para sa ilang mga application ng kuryente. Sa ar na ito
Multi-channel Wifi Voltage at Kasalukuyang Meter: 11 Mga Hakbang (na may Mga Larawan)
Multi-channel Wifi Voltage at Kasalukuyang Meter: Kapag ang breadboarding, madalas na kailangang subaybayan ng isa ang iba't ibang bahagi ng circuit nang sabay-sabay. Upang maiwasan ang sakit na kailangang idikit ang mga probe ng multimeter mula sa isang lugar patungo sa isa pa, nais kong mag-disenyo ng isang boltahe ng multi-channel at kasalukuyang metro. Ang board ng Ina260
AC Kasalukuyang Monitoring Data Logger: 9 Mga Hakbang (na may Mga Larawan)
AC Kasalukuyang Monitoring Data Logger: Kumusta Lahat, maligayang pagdating sa aking unang itinuro! Sa pamamagitan ng araw ako ay isang test engineer para sa isang kumpanya na nagbibigay ng pang-industriya na kagamitan sa pag-init, sa gabi ako ay isang masugid na hobbyist ng teknolohiya at DIY'er. Kasama sa bahagi ng aking trabaho ang pagsubok sa pagganap ng mga heater, o