Tartalomjegyzék:

Arduino TDCS szuper egyszerű. Transzkraniális egyenáramú stimulátor (tDCS) DIY: 5 lépés
Arduino TDCS szuper egyszerű. Transzkraniális egyenáramú stimulátor (tDCS) DIY: 5 lépés

Videó: Arduino TDCS szuper egyszerű. Transzkraniális egyenáramú stimulátor (tDCS) DIY: 5 lépés

Videó: Arduino TDCS szuper egyszerű. Transzkraniális egyenáramú stimulátor (tDCS) DIY: 5 lépés
Videó: Easily build a tDCS machine - How to DIY 2024, November
Anonim
Arduino TDCS szuper egyszerű. Transzkraniális egyenáramú stimulátor (tDCS) DIY
Arduino TDCS szuper egyszerű. Transzkraniális egyenáramú stimulátor (tDCS) DIY

Para fazer este tDCS você precisará apenas de um arduino, ellenállás, kondenzátor és 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 para GND.
  2. Ellenállás (~ 470 Ω, mas provavelmente entre 300-1000 Ω funciona, você precisará alterar no código fonte)
  3. Kondenzátor (220 μF). Szolgálja a PWM alapú impulzust.
  4. Eletrodos de Esponja (Használjon á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 serial CLI (Console).

1. lépés: Saiba Mais

Saiba Mais
Saiba Mais

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

2. lépés: Monte O Circuito Abaixo

Monte O Circuito Abaixo
Monte O Circuito Abaixo

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

3. lépés: Instale O Código No Seu Arduino

Lembre-se de alterar as configurações and parametros na área de HARDWARE PARAMS e CONFIGURABLE PARAMS.

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

Végrehajtó parancsok, 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"; // HARDWARE PARAMS const int analogInPin = A0; // Entrada do Analógico const int analogOutPin = 13; // Saida D13 padrão float maxOutV = 5.0; // A feszültség de saída PWM padrão do Arduino [V] float maxRefInV = 1.1; // Referencia à feszültség analógica [V] úszó R = 470,0; Resistencia da corrente [Ohm]

// KONFIGURÁLHATÓ PARAMMÁK

bool plotter = hamis; // Defina: true, caso esteja usando o Soros 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] úszó 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 állapot = 1; /* -1 - Cérebro não identifado 0 - Voltagem sendo alterada para definir a corrente padrão 1 - Tudo certo. Você esta na corrente definida -10 - Voltagem desligada */ float outV = maxOutV; // Feszültség int debounced_state = 0; int null_len = 0; úszó simított_mA = 0;

String parancsString = ""; // a CLI számára

// VISSZAJELZŐ SEGÍTŐK

float computeOutVoltage (float V, float new_mA) {if (abs (new_mA -target_mA) maxOutV) {állapot = -1; // resistência muito alta -> cérebro não encontrado? return maxOutV; // return maxOutV/5.0; // para segurança} állapot = 0; visszatérés 0,1*új_V+0,9*V; // return new_V; }

int convertVtoOutputValue (float V) {

visszatérési kényszer (int (V/maxOutV*255), 0, 255); }

float sensorValue2mA (int sensorValue) {

float sensorVoltage = sensorValue/1023.0*maxRefInV; float sensor_mA = sensorVoltage/R*1000.0; visszatérő érzékelő_mA; }

int debounced_state_compute (int állapot) {

ha (5. állapot) visszatér 0; } visszatérés 1; }

előjel nélküli hosszú kezdés, endc;

void process_feedback () {int sensorValue = analogRead (analogInPin); float new_mA = sensorValue2mA (sensorValue); simított_mA = 0,2*új_mA+0,8*simított_mA; úszó V = outV; outV = computeOutVoltage (V, new_mA); analogWrite (analogOutPin, convertVtoOutputValue (outV)); debounced_state = debounced_state_compute (állapot); // Exibir informationções no CLI endc = (millis ()-start)/1000; String tv = "[", ttm = "mA/", tsm = "V", ts = "mA] | Estado:", h = "| Tempo:", s = ":", leadM = "", leadS = "", plotT = "Target:", plotmA = "\ tSimított MA:", plotMin = "\ tMin:", tempó; előjel nélküli hosszú tmin = endc/60-((endc/60)%1); // Formázás if (endc%60 <10) leadS = "0"; if (tmin = 0) ts = ts + " +"; // Parar automaticamente if (tmin> maxmin) stop_device (); Karakterlánc txt; if (plotter) txt = plotT + cél_mA + plotMin + "0" + plotmA + simított_mA; else txt = tv + V + tsm + simított_mA + ttm + target_mA + ts + debounced_state + h + tempo; if (gitt) Serial.print ("\ r / e [? 25l" + txt); else Serial.println (txt);

// várjon 2 ezredmásodpercet a következő ciklus előtt

// hogy az analóg-digitális átalakító leülepedjen // az utolsó leolvasás után: delay (5); }

void stop_device () {

állapot = -10; analogWrite (analogOutPin, 0); clearAndHome (); Serial.println ("Sessão tDCS interrompida"); Serial.println ("------------------------"); Segítség(); }

// CLI HELPERS

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

érvénytelen segítség () {

Serial.println ("tDSC arduino, ver"+ver); Serial.println ("'?' - ajuda"); Serial.println ("'max_time' - atualiza o tempo máximo (em percos)"); Serial.println ("'target_mA' - cél vagy cél (mA)"); Serial.println ("'epsilon_mA' - atualiza o epsilon_mA (mA)"); Serial.println ("'R' - hardver ellenállása (Ohm)"); Serial.println ("'putty' - muda a formatação de saída pro PuTTY"); Serial.println ("'stop' - para a becslés"); Serial.println ("'újraindítás' - inicia/reinicia a becslés & időzítő"); Serial.println ("'folytassa' - Continua a becslés"); Serial.print ("\ n / rEstado: / n / r * max_time:"); Soros.nyomtatás (maxmin); Serial.print ("perc / n / r * target_mA:"); Serial.print (target_mA); Serial.print ("mA / n / r * epsilon_mA:"); Serial.print (epsilon_mA); Soros.nyomtatás ("mA / n / r * R:"); Sorozatnyomat (R); Serial.println ("Ohm"); }

bool parse_param (Karakterlánc és cmdString) {

int spacePos = cmdString.indexOf (""); if (spacePos <= 0) return false; String parancs = cmdString.substring (0, spacePos); Karakterlánc fval = cmdString.substring (spacePos+1); if (parancs == "putty") if (fval == "true") {putty = true; return true; } else if (fval == "false") {putty = false; return true; } float val = fval.toFloat (); if (parancs == "target_mA") {if (val100.0) {return false; } target_mA = val; clearAndHome (); Segítség(); } else if (parancs == "epsilon_mA") {if (val0.3) {return false; } epsilon_mA = val; clearAndHome (); Segítség(); } else if (parancs == "R") {R = val; clearAndHome (); Segítség(); } else if (parancs == "max_time") {maxmin = val; clearAndHome (); Segítség(); } else {return false; } return true; }

// BEÁLLÍTÁS ÉS FŐKÖR

void setup () {Serial.begin (115200); analogReference (INTERNAL); //1.1 V Serial.print ("Sessão iniciada!"); start = millis (); } void loop () {if (állapot! =-10) {process_feedback (); } if (Serial.available ()> 0) {char v = Serial.read (); if (byte (v) == 13) {// Kocsivisszaadási bool elfogadva = igaz; if (commandString == "?" || commandString == "stop") {stop_eszköz (); } else if (commandString == "restart") {clearAndHome (); állapot = -1; outV = maxOutV/5,0; start = millis (); elfogadott = hamis; } else if (commandString == "folytatás") {clearAndHome (); állapot = -1; outV = maxOutV/5,0; elfogadott = hamis; } else {bool ok = parse_param (commandString); if (! rendben) {clearAndHome (); Segítség(); elfogadott = hamis; Serial.println ("Comando desconhecido: '" + commandString + "" "); }} commandString = ""; if (elfogadva) {clearAndHome (); Segítség(); Serial.println ("Rendben!"); }} else {commandString+= v; if (állapot ==-10) {Sorozat.nyomtatás (v); }}}}

4. lépés: Uma UI Personalizada

Uma UI Personalizada
Uma UI Personalizada

A dal kíséretéhez és a keverékekhez használja a PuTTY ferramentát, és ne határozza meg a kódot:

gitt = igaz

Ajánlások a definiáláshoz:

  • Ablak

    • 61 Colunas és 20 Linhas
    • Görgetősáv megjelenítése
  • Ablak> Megjelenés

    Font: Lucida Console, 28px

5. lépés: Dúvidas?

Para abrir a guia de ajuda, digite:

?

és nyomja meg az [ENTER] gombot

OBS: Caso vagy Estado seja:

-1 -> Cérebro não identifado (corrente aberta) +0 -> Ajustando feszültség m+1 -> Tudo certo, tDCS funcionando

Ajánlott: