Kazalo:
- 1. korak: Saiba Mais
- 2. korak: Monte O Circuito Abaixo
- 3. korak: Namestite O Código No Seu Arduino
- 4. korak: Prilagajanje uporabniškega vmesnika Uma
- 5. korak: Dúvidas?
Video: Arduino TDCS Super Simples. Transkranialni enosmerni stimulator (tDCS) DIY: 5 korakov
2024 Avtor: John Day | [email protected]. Nazadnje spremenjeno: 2024-01-30 12:05
Para fazer este tDCS você precisará apenas de um arduino, upor, kondenzator in alguns cabos
-
Arduino
- Pino D13 kot PWM (nastavite ser alterado).
- Pino A0 kot analna analitika (za povratne informacije).
- Pino GND apenas para GND.
- Upor (~ 470 Ω, mas provavelmente entre 300-1000 Ω funkcionalen, natančno spremenjen ali brez código fonte)
- Kondenzator (220 μF). Postrezite za PWM za pulziranje pulza.
- Eletrodos de Esponja (Uporabite á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. Poiščite também, ki bo spremenil vašo vrednost do target_mA pelo serijskega CLI (Console).
1. korak: Saiba Mais
Você deve ler mais sobre tDCS primeiro. Não é aprovado pelo FDA in pode ser prejudicial a sua saúde, principalmente se você não sabe nada sobre os efeitos colaterais, precauções e dentre outros…
2. korak: Monte O Circuito Abaixo
Não se esqueça das esponjas com água salina!
3. korak: Namestite O Código No Seu Arduino
Lembre-se de alterar as configurações and parametros on theárea de HARDWARE PARAMS e CONFIGURABLE PARAMS.
Če želite spremeniti stopnjo boud stopnje do serijske številke: 115200 ali pod rezultatom.
Za izvajalce comandos, troque o No Line Ending para Carriage Return.
O código fonte + tutorial também podem ser encontrados no repositório:
Código:
const String ver = "2.0m"; // PARAMI HARDWARE const int analogInPin = A0; // Entrada do Analógico const int analogOutPin = 13; // Saida D13 padrão float maxOutV = 5,0; // Napetost m de saída PWM padrão do Arduino [V] float maxRefInV = 1,1; // Referencia à voltagem analógica [V] plovec R = 470,0; // Resistencia da corrente [Ohm]
// NASTAVLJIVI PARAMI
bool ploter = napačno; // Določi: true, caso esteja usando o Serijski ploter bool putty = false; // Določi: true, caso esteja usando o PuTTT (pode ser alterado no CLI) int maxmin = 30; // Tempo (em minutos) needário para desligar [Min] float target_mA = 2,73; // Essa é a corrente que passará pelo seu cérebro !!! [mA] plavajoči epsilon_mA = 0,03; // Diferença máxima entre a corrente real e o target_mA (Não altere caso não saiba o que está fazendo!)
// INIT GLOBALS
int stanje = 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 - Desigada voltagem */ float outV = maxOutV; // Voltagem int debounced_state = 0; int nič_len = 0; float smoothed_mA = 0;
String commandString = ""; // za CLI
// POMOČNIKI POVRATNIH POVZATKOV
float computeOutVoltage (float V, float new_mA) {if (abs (new_mA -target_mA) maxOutV) {stanje = -1; // upirajte muito alta -> cérebro não encontrado? vrnitev maxOutV; // vrne maxOutV/5.0; // para segurança} stanje = 0; vrnitev 0,1*novo_V+0,9*V; // vrne new_V; }
int convertVtoOutputValue (float V) {
omejitev vrnitve (int (V/maxOutV*255), 0, 255); }
float sensorValue2mA (int sensorValue) {
plavajoči senzorVoltage = sensorValue/1023,0*maxRefInV; plavajoči senzor_mA = napetost senzorja/R*1000,0; povratni senzor_mA; }
int debounced_state_compute (stanje int) {
if (stanje 5) vrne 0; } vrni 1; }
dolgo podpisan podpis, endc;
void process_feedback () {int sensorValue = analogRead (analogInPin); float new_mA = sensorValue2mA (sensorValue); zglajeno_mA = 0,2*novo_mA+0,8*zglajeno_mA; plovec V = outV; outV = computeOutVoltage (V, nov_mA); analogWrite (analogOutPin, convertVtoOutputValue (outV)); debounced_state = debounced_state_compute (stanje); // Exibir informações no CLI endc = (millis ()-začetek)/1000; Niz tv = "[", ttm = "mA/", tsm = "V,", ts = "mA] | Estado:", h = "| Tempo:", s = ":", leadM = "", leadS = "", plotT = "Cilj:", plotmA = "\ tSmoothed MA:", plotMin = "\ tMin:", tempo; dolgo podpisano tmin = endc/60-((endc/60)%1); // Formatação if (endc%60 <10) leadS = "0"; če (tmin = 0) ts = ts + " +"; // Paramar automaticamente if (tmin> maxmin) stop_device (); Niz niz txt; če (ploter) txt = plotT + target_mA + plotMin + "0" + plotmA + zglajeno_mA; else txt = tv + V + tsm + smoothed_mA + ttm + target_mA + ts + debounced_state + h + tempo; if (kit) Serial.print ("\ r / e [? 25l" + txt); else Serial.println (txt);
// počakajte 2 milisekundi pred naslednjo zanko
// da se analogno-digitalni pretvornik poravna // po zadnjem odčitku: delay (5); }
void stop_device () {
stanje = -10; analogWrite (analogOutPin, 0); clearAndHome (); Serial.println ("Sessão tDCS interrompida"); Serial.println ("------------------------"); pomoč (); }
// POMOČNIKI CLI
void clearAndHome () {Serial.write (27); Serial.print ("[2J"); // limpa a tela Serial.write (27); // ESC Serial.print ("[H"); // / r if (! kit) za (int i = 0; i <= 30; i ++) Serial.println (""); }
void help () {
Serial.println ("tDSC arduino, ver"+ver); Serial.println ("'?' - ajuda"); Serial.println ("'max_time' - atualiza o tempu máximo (em minutos)"); Serial.println ("'target_mA' - nastavitev cilja (mA)"); Serial.println ("'epsilon_mA' - atualiza o epsilon_mA (mA)"); Serial.println ("'R' - nastavitev odpornosti na strojno opremo (Ohm)"); Serial.println ("" kit " - oblikovanje de saída pro PuTTY"); Serial.println ("'stop' - para a estimulação"); Serial.println ("'restart' - inicia/reinicia estimulação & o timer"); Serial.println ("'continue' - continuea a estimulação"); 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:"); Serijski.tisk (R); Serial.println ("Ohmi"); }
bool parse_param (String & cmdString) {
int spacePos = cmdString.indexOf (''); if (spacePos <= 0) vrne false; Ukaz niza = cmdString.substring (0, preslednica); Niz fval = cmdString.substring (presledekPos+1); if (ukaz == "kit") if (fval == "true") {putty = true; vrni true; } else if (fval == "false") {putty = false; vrni true; } float val = fval.toFloat (); if (ukaz == "target_mA") {if (val100.0) {return false; } target_mA = val; clearAndHome (); pomoč (); } else if (ukaz == "epsilon_mA") {if (val0.3) {return false; } epsilon_mA = val; clearAndHome (); pomoč (); } else if (ukaz == "R") {R = val; clearAndHome (); pomoč (); } else if (ukaz == "max_time") {maxmin = val; clearAndHome (); pomoč (); } else {return false; } return true; }
// NASTAVITEV IN GLAVNA ZEMLJA
void setup () {Serial.begin (115200); analogna referenca (NOTRANJA); //1.1 V Serial.print ("Sessão iniciada!"); start = millis (); } void loop () {if (state! =-10) {process_feedback (); } if (Serial.available ()> 0) {char v = Serial.read (); if (byte (v) == 13) {// Bool return bool sprejet = true; if (commandString == "?" || commandString == "stop") {stop_device (); } else if (commandString == "restart") {clearAndHome (); stanje = -1; outV = maxOutV/5,0; start = millis (); sprejeto = napačno; } else if (commandString == "continue") {clearAndHome (); stanje = -1; outV = maxOutV/5,0; sprejeto = napačno; } else {bool ok = parse_param (commandString); if (! ok) {clearAndHome (); pomoč (); sprejeto = napačno; Serial.println ("Comando desconhecido: '" + commandString + "'"); }} commandString = ""; če (sprejeto) {clearAndHome (); pomoč (); Serial.println ("V redu!"); }} else {commandString+= v; if (stanje ==-10) {Serial.print (v); }}}}
4. korak: Prilagajanje uporabniškega vmesnika Uma
Para melhor acompanhamento e segurança, use ferramenta PuTTY, e defina no código fonte:
kit = res
Priporočila za opredelitev:
-
Okno
- 61 Colunas e 20 Linhas
- Zaslon drsnega traku desativado
-
Okno> Videz
Fonte: Lucida Console, 28 slikovnih pik
5. korak: Dúvidas?
Para abrir a guia de ajuda, digitalno:
?
e pritisnite [ENTER]
OBS: Caso o Estado seja:
-1 -> Cérebro não identificado (corrente aberta) +0 -> Ajustando napetost m+1 -> Tudo certo, tDCS funcionando
Priporočena:
Kako upravljati enosmerni motor z L298n in Arduino: 5 korakov
Kako upravljati enosmerni motor z L298n in Arduino: Pozdravljeni vsi. Predstavimo se. Moje ime je Dimitris in sem iz Grčije. Arduino mi je zelo všeč, ker je to pametna plošča. Poskusil bom čim bolje opisati to navodilo, da bi ga naredil kdorkoli. Pa začnimo
Kako uporabljati pretvornik enosmernega v enosmerni tok LM2596: 8 korakov
Kako uporabljati pretvornik enosmernega v enosmerni tok v enosmerni tok LM2596: Ta vadnica bo pokazala, kako s pretvornikom buka LM2596 vklopiti naprave, ki zahtevajo različne napetosti. Pokazali bomo, katere vrste baterij so najboljše za uporabo s pretvornikom in kako iz pretvornika pridobiti več kot en izhod (indi
DIY AC/ DC kramp "Mod" RD6006 Napajanje in ohišje S06A W/ S-400-60 PSU Zgradba in nadgrajen enosmerni vhod: 9 korakov
DIY AC/ DC kramp "Mod" RD6006 Napajanje in ohišje S06A W/ S-400-60 PSU Zgradba in nadgrajen enosmerni vhod: Ta projekt je bolj osnovna zgradba RD6006 z uporabo ohišja S06A in napajalnika S-400-60 . Resnično pa želim imeti možnost izbire priklopa baterije za prenos ali izpada električne energije. Tako sem tudi vdrl ali spremenil ohišje tako, da sprejme enosmerni tok ali baterijo
Kako upravljati brezkrtačni enosmerni motor brez krtačk Drone Quadcopter (3 žice) z uporabo krmilnika hitrosti motorja HW30A in Arduino UNO: 5 korakov
Kako upravljati brezkrtačni enosmerni motor brez krtačk Drone Quadcopter (3 žice) z uporabo krmilnika hitrosti motorja HW30A in Arduino UNO: Opis: Krmilnik hitrosti motorja HW30A se lahko uporablja s 4-10 NiMH/NiCd ali 2-3-celičnimi LiPo baterijami. BEC je funkcionalen z do 3 LiPo celicami. Uporablja se lahko za nadzor hitrosti brezkrtačnega enosmernega motorja (3 žice) z največ 12V DC
DEF Eindopdracht DIY enosmerni motor: 5 korakov
DEF Eindopdracht DIY enosmerni motor: To je hoe heind eindproduct eruit ziet. Motor enosmernega toka je nameščen na Arduinu in je namenjen izgubi moči