Sisukord:

Arduino TDCS super lihtsad. Transkraniaalne alalisvoolu stimulaator (tDCS) DIY: 5 sammu
Arduino TDCS super lihtsad. Transkraniaalne alalisvoolu stimulaator (tDCS) DIY: 5 sammu

Video: Arduino TDCS super lihtsad. Transkraniaalne alalisvoolu stimulaator (tDCS) DIY: 5 sammu

Video: Arduino TDCS super lihtsad. Transkraniaalne alalisvoolu stimulaator (tDCS) DIY: 5 sammu
Video: Преобразователь 12 220 на сердечнике ТДКС 2024, Juuli
Anonim
Arduino TDCS super lihtsad. Transkraniaalne alalisvoolu stimulaator (tDCS) DIY
Arduino TDCS super lihtsad. Transkraniaalne alalisvoolu stimulaator (tDCS) DIY

Para fazer este tDCS você precisará apenas de um arduino, resistor, kondensaator ja alguns cabosComponentes

  1. Arduino

    • Pino D13 on PWM (pode ser alterado).
    • Pino A0 como entrada analógica (para feedback de corrente).
    • Pino GND apenas para GND.
  2. Takisti (~ 470 Ω, massiivne sissepääs 300-1000 Ω funktsionaalsus, hääletäpsus alternatiivselt ilma koodita)
  3. Kondensaator (220 μF). Serveeri PWM -i jaoks pulsos.
  4. Eletrodos de Esponja (kasutage á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. Você também pode alterar o valor do target_mA pelo seeria CLI (konsool).

1. samm: Saiba Mais

Saiba Mais
Saiba Mais

Você deve ler mais sobre tDCS primeiro. Não é aprovado pelo FDA e pode ser eelarvamus a sua saúde, principmente se você não sabe nada sobre os efeitos colaterais, prepuações e dentre outros…

2. samm: Monte O Circuito Abaixo

Monte O Circuito Abaixo
Monte O Circuito Abaixo

Não se esqueça das esponjas com água salina!

3. samm: installige O Código No Seu Arduino

Lembre-se de alterar as configuraçõeses and parametros na área de RIISTVARA PARAAMID e KONFIGUREERITAVAD PARAMMID.

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

Täitekomandod, troque o No Line Ending para Carriage Return.

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

Código:

const String ver = "2.0m"; // RIISTVARAAMID 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; // Viide pingele analüütiline [V] ujuk R = 470,0; // Resistencia da corrente [Ohm]

// KONFIGUREERITAVAD PARAMMID

bool plotter = vale; // 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) requiredário para desligar [Min] float target_mA = 2,73; // Essa é a corrente que passará pelo seu cérebro !!! [mA] ujuk 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 olek = 1; /* -1 - Cérebro não identifikaator 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 debounced_state = 0; int null_len = 0; ujuk silutud_mA = 0;

String käskString = ""; // CLI jaoks

// TAGASISIDE AITAB

float computeOutVoltage (float V, float new_mA) {if (abs (new_mA -target_mA) maxOutV) {olek = -1; // resistência muito alta -> cérebro não encontrado? return maxOutV; // tagasta maxOutV/5.0; // para segurança} olek = 0; tagasi 0,1*uus_V+0,9*V; // return new_V; }

int convertVtoOutputValue (float V) {

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

float sensorValue2mA (int sensorValue) {

float sensorVoltage = sensorValue/1023.0*maxRefInV; ujukandur_mA = sensorVoltage/R*1000,0; tagasivooluandur_mA; }

int debounced_state_compute (int olek) {

kui (olek 5) tagastab 0; } tagasipöördumine 1; }

allkirjata pikk algus, endc;

void process_feedback () {int sensorValue = analogRead (analogInPin); float new_mA = sensorValue2mA (sensorValue); silutud_mA = 0,2*uus_mA+0,8*silutud_mA; ujuk V = väljaV; outV = computeOutVoltage (V, uus_mA); analogWrite (analogOutPin, convertVtoOutputValue (outV)); debounced_state = debounced_state_compute (olek); // Exibir informationções no CLI endc = (millis ()-algus)/1000; String tv = "[", ttm = "mA/", tsm = "V", ts = "mA] | Estado:", h = "| Tempo:", s = ":", leadM = "", leadS = "", plotT = "Target:", plotmA = "\ tSmoothed MA:", plotMin = "\ tMin:", tempo; allkirjata pikk tmin = endc/60-((endc/60)%1); // Formaat if (endc%60 <10) leadS = "0"; kui (tmin = 0) ts = ts + " +"; // Parar automaticamente if (tmin> maxmin) stop_device (); String txt; if (plotter) txt = plotT + target_mA + plotMin + "0" + plotmA + silutud_mA; else txt = tv + V + tsm + silutud_mA + ttm + target_mA + ts + debounced_state + h + tempo; if (kitt) Serial.print ("\ r / e [? 25l" + txt); muu Serial.println (txt);

// oodake 2 millisekundit enne järgmist tsüklit

// analoog-digitaalmuundurile settimiseks // pärast viimast lugemist: delay (5); }

void stop_device () {

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

// CLI AITAB

void clearAndHome () {Serial.write (27); Seeria.print ("[2J" "); // limpa a tela Serial.write (27); // ESC Serial.print ("[H"); // kui (! kitt) jaoks (int i = 0; i <= 30; i ++) Serial.println (""); }

tühine abi () {

Serial.println ("tDSC arduino, ver"+ver); Serial.println ("'?' - ajuda"); Serial.println ("'max_time' - atualiza või tempo máximo (em minutos)"); Serial.println ("'target_mA' - eesmärk või sihtmärk (mA)"); Serial.println ("'epsilon_mA' - teostus või epsilon_mA (mA)"); Serial.println ("'R' - riistvara vastastikune vastupidavus (Ohm)"); Serial.println ("'kitt' - muda a formatação de saída pro PuTTY"); Serial.println ("'stop' - para a aprēķin"); Serial.println ("'restart' - inicia/reinicia a appreulação & o timer"); Serial.println ("'jätka' - Continua a Estimulação"); Serial.print ("\ n / rEstado: / n / r * max_time:"); Serial.print (maxmin); Serial.print ("minutid / 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:"); Seeriaprint (R); Serial.println ("oomid"); }

bool parse_param (String & cmdString) {

int spacePos = cmdString.indexOf (''); if (spacePos <= 0) return false; String käsk = cmdString.substring (0, spacePos); String fval = cmdString.substring (tühikPos+1); if (käsk == "kitt") if (fval == "true") {putty = true; tagastama tõene; } else if (fval == "false") {putty = false; tagastama tõene; } float val = fval.toFloat (); if (käsk == "target_mA") {if (val100.0) {return false; } target_mA = val; clearAndHome (); abi (); } else if (käsk == "epsilon_mA") {if (val0.3) {return false; } epsilon_mA = val; clearAndHome (); abi (); } else if (käsk == "R") {R = val; clearAndHome (); abi (); } else if (käsk == "max_time") {maxmin = val; clearAndHome (); abi (); } else {return false; } return true; }

// SEADISTAMINE JA PÕHISILM

void setup () {Serial.begin (115200); analogReference (INTERNAL); //1.1 V Serial.print ("Sessão iniciada!"); algus = millis (); } void loop () {if (state! =-10) {process_feedback (); } kui (Serial.available ()> 0) {char v = Serial.read (); if (bait (v) == 13) {// Vedu tagastamise bool aktsepteeritud = true; if (commandString == "?" || commandString == "stop") {stop_seade (); } else if (commandString == "restart") {clearAndHome (); olek = -1; outV = maxOutV/5,0; algus = millis (); aktsepteeritud = vale; } else if (commandString == "jatka") {clearAndHome (); olek = -1; outV = maxOutV/5,0; aktsepteeritud = vale; } else {bool ok = pars_param (commandString); if (! ok) {clearAndHome (); abi (); aktsepteeritud = vale; Serial.println ("Comando desconhecido: '" + commandString + "'"); }} commandString = ""; kui (aktsepteeritud) {clearAndHome (); abi (); Serial.println ("Ok!"); }} else {commandString+= v; if (olek ==-10) {Serial.print (v); }}}}

Samm 4: Uma kasutajaliidese isikupärastamine

Uma UI isikupärastamine
Uma UI isikupärastamine

Kui soovite meloodiat kaaslaseks ja segransaks, kasutage PuTTY ferramenta, ja see ei tähenda:

kitt = tõsi

Määratluste soovitused:

  • Aken

    • 61 Colunas e 20 Linhas
    • Kuva kerimisriba desativado
  • Aken> Välimus

    Fonte: Lucida Console, 28 pikslit

5. samm: Dúvidas?

Para abrir a guia de ajuda, digite:

?

ja vajutage [ENTER]

OBS: Caso või Estado seja:

-1 -> Cérebro não identifikaator (corrente aberta) +0 -> Ajustando pingem+1 -> Tudo certo, tDCS funcionando

Soovitan: