Kazalo:
2025 Avtor: John Day | [email protected]. Nazadnje spremenjeno: 2025-01-13 06:58
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