Inhoudsopgave:

Arduino TDCS Supersimpels. Transcraniële gelijkstroomstimulator (tDCS) DIY - Ajarnpa
Arduino TDCS Supersimpels. Transcraniële gelijkstroomstimulator (tDCS) DIY - Ajarnpa

Video: Arduino TDCS Supersimpels. Transcraniële gelijkstroomstimulator (tDCS) DIY - Ajarnpa

Video: Arduino TDCS Supersimpels. Transcraniële gelijkstroomstimulator (tDCS) DIY - Ajarnpa
Video: Simple DIY TENS and TDCS Example 2024, Juli-
Anonim
Arduino TDCS Supersimpels. Transcraniële gelijkstroomstimulator (tDCS) DIY
Arduino TDCS Supersimpels. Transcraniële gelijkstroomstimulator (tDCS) DIY

Para fazer este tDCS você precisará apenas de um arduino, weerstand, condensator en alguns cabosComponentes

  1. Arduino

    • Pino D13 como saída PWM (pode ser alterado).
    • Pino A0 como entrada analógica (para feedback de corrente).
    • Pino GND apenas voor GND.
  2. Weerstand (~470, mas provavelmente entre 300-1000 Ω funciona, você precisará alterar no código fonte)
  3. Condensator (220 F). Serveer para estabilizar en pulsen do PWM.
  4. Eletrodos de Esponja (Gebruik água salina para molhá-lo).

Como functie

O Arduino rekent een corrente padrão (pode ser alterado) uit om te zien welke apenas of mudar a voltagem de saída. Você também pode alterar o valor do target_mA pelo serial CLI (Console).

Stap 1: Saiba Mais

Saiba Mais
Saiba Mais

Você deve ler mais sobre tDCS primeiro. Geen enkele goedkeuring van de FDA en een mogelijke nadelige invloed van de wet op de mogelijke gevolgen van de schade…

Stap 2: Monte O Circuito Abaixo

Monte O Circuito Abaixo
Monte O Circuito Abaixo

Geen esqueça das esponjas com água salina!

Stap 3: Installeer O Código No Seu Arduino

Dit is een alternatief voor configuraties en parameters voor HARDWARE-PARAMES en CONFIGUREERBARE PARAMS.

Você também deve alterar o boud rate do Serial para: 115200 para poder ver o resultado.

Para executar comandos, troque o No Line Ending para Carriage Return.

O código fonte + tutorial também podem ser encontrados no repositório:

Code:

const String ver = "2.0m"; //HARDWAREPARAMES const int analogInPin = A0; // Entrada do Analógico const int analogOutPin = 13; // Saida D13 padrão float maxOutV = 5.0; // Een voltage van de PWM padro do Arduino [V] float maxRefInV = 1.1; // Referencia à voltagem analógica [V] float R = 470,0; // Weerstand van corrente [Ohm]

// CONFIGUREERBARE PARAMES

bool plotter = onwaar; // 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) noodzakelijk voor het instellen [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 (No altere caso não saiba o que está fazendo!)

//INIT GLOBALS

int-status = 1; /* -1 - Cerebro não identificado 0 - Voltagem sendo alterada para definir a corrente padrão 1 - Tudo certo. Você esta corrente definida -10 - Voltagem desligada */ float outV = maxOutV; // Voltagem int debounced_state = 0; int nullen_len = 0; float smoothed_mA=0;

String commandString = ""; //voor 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? retour maxOutV; // retour maxOutV/5.0; // para segurança } staat = 0; retourneer 0.1*new_V+0.9*V; // retourneer nieuwe_V; }

int convertVtoOutputValue(float V){

retourbeperking (int(V/maxOutV*255), 0, 255); }

vlottersensorWaarde2mA(int sensorWaarde){

vlottersensorVoltage = sensorValue/1023,0*maxRefInV; vlottersensor_mA = sensorVoltage/R*1000,0; retour sensor_mA; }

int debounced_state_compute(int staat){

als (status 5) retourneert 0; } retour 1; }

niet ondertekend lange start, endc;

void process_feedback () {int sensorValue = analogRead (analogInPin); float new_mA = sensorValue2mA (sensorValue); smoothed_mA = 0.2*new_mA+0.8*smoothed_mA; vlotter V = uitV; outV = computeOutVoltage (V, nieuwe_mA); analogWrite(analogOutPin, convertVtoOutputValue(outV)); debounced_state = debounced_state_compute(staat); // Exibir informações no CLI endc = (millis()-start)/1000; String tv = "[", ttm = "mA/", tsm = "V, ", ts = "mA] | Estado: ", h = " | Tempo: ", s = ":", leadM = "", leadS = "", plotT = "Doel: ", plotmA = "\tSmoothed MA: ", plotMin = "\tMin:", tempo; unsigned long tmin = endc/60-((endc/60)%1); // Formatação if (endc%60<10) leadS = "0"; als (tmin=0) ts = ts + "+"; // Parar automatisch als (tmin>maxmin) stop_device(); Tekenreeks txt; if (plotter) txt = plotT + target_mA + plotMin + "0" + plotmA + smoothed_mA; anders txt = tv + V + tsm + smoothed_mA + ttm + target_mA + ts + debounced_state + h + tempo; if (putty) Serial.print("\r\e[?25l" + txt); anders Serial.println(txt);

// wacht 2 milliseconden voor de volgende lus

// voor de analoog-naar-digitaal omzetter om te regelen // na de laatste lezing: vertraging (5); }

ongeldig stop_device(){

staat = -10; analogWrite(analogOutPin, 0); clearAndHome(); Serial.println("Sessão tDCS interrompida"); Serial.println ("------------------------"); helpen(); }

//CLI HELPERS

void clearAndHome() { Serial.write(27); Serial.print("[2J"); // limpa een tela Serial.write(27); // ESC Serial.print ("[H"); // \r if (!putty) for (int i = 0; i<=30; i++) Serial.println(""); }

ongeldige hulp(){

Serial.println("tDSC arduino, ver "+ver); Serial.println("'?' - ajuda"); Serial.println("'max_time' - atualize of tempo max (em minutos)"); Serial.println("'target_mA' - atualize of target (mA)"); Serial.println("'epsilon_mA ' - atualiza of epsilon_mA (mA)"); Serial.println ("'R ' - atualiza a resistência do hardware (Ohm)"); Serial.println("'putty ' - een opmaak voor de pro PuTTY"); Serial.println("'stop' - voor een schatting"); Serial.println("'restart' - inicia/reinicia a estimulação & o timer"); Serial.println("'doorgaan' - wordt geschat"); Serial.print("\n\rEstado:\n\r * max_time: "); Seriële.afdruk (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: "); Serieafdruk(R); Serial.println ("Ohm"); }

bool parse_param(String &cmdString){

int spacePos = cmdString.indexOf(' '); if(spacePos<=0) retourneer false; Tekenreeksopdracht = cmdString.substring (0, spacePos); String fval = cmdString.substring(spacePos+1); if(command=="putty") if (fval=="true"){ putty = true; retourneer waar; }else if (fval=="false"){ putty = false; retourneer waar; } float val = fval.toFloat(); if(command=="target_mA"){ if(val100.0){ return false; } doel_mA = waarde; clearAndHome(); helpen(); }else if(command=="epsilon_mA"){ if(val0.3){ return false; } epsilon_mA = waarde; clearAndHome(); helpen(); }else if(command=="R"){ R = val; clearAndHome(); helpen(); }else if(command=="max_time"){ maxmin = val; clearAndHome(); helpen(); }els{ retourneer false; } retourneer waar; }

//SETUP EN HOOFDLUS

void setup() { Serial.begin(115200); analogeReferentie (INTERN); //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) { // Carriage return bool geaccepteerd = waar; if (commandString == "?" || commandString == "stop"){ stop_device(); }else if (commandString == "herstart"){ clearAndHome(); staat = -1; outV = maxOutV/5,0; start = millis(); geaccepteerd = onwaar; }else if (commandString == "doorgaan"){ clearAndHome(); staat = -1; outV = maxOutV/5,0; geaccepteerd = onwaar; }else{ bool ok = parse_param(commandString); if(!ok){ clearAndHome(); helpen(); geaccepteerd = onwaar; Serial.println ("Commando desconhecido: '" + commandString + "'"); } } commandString = ""; if (geaccepteerd){ clearAndHome(); helpen(); Serial.println("Ok!"); } }anders{ commandString+=v; if(state==-10){ Serial.print(v); } } } }

Stap 4: Uma UI Personalizada

Uma UI personalisatie
Uma UI personalisatie

Gebruik een ferramenta PuTTY, e definia no código fonte:

stopverf = waar

Definitieve aanbevelingen:

  • Raam

    • 61 Colunas en 20 Linhas
    • Toon schuifbalk desativado
  • Venster > Uiterlijk

    Lettertype: Lucida-console, 28px

Stap 5: Duvidas?

Para abrir a guia de ajuda, digite:

?

e druk [ENTER]

OBS:Caso of Estado zie:

-1 -> Cerebro não identificado (corrente aberta)+0 -> Ajustando voltagem+1 -> Tudo certo, tDCS funcionando

Aanbevolen: