Kazalo:

Arduino TDCS Super Simples. Transkranialni enosmerni stimulator (tDCS) DIY: 5 korakov
Arduino TDCS Super Simples. Transkranialni enosmerni stimulator (tDCS) DIY: 5 korakov

Video: Arduino TDCS Super Simples. Transkranialni enosmerni stimulator (tDCS) DIY: 5 korakov

Video: Arduino TDCS Super Simples. Transkranialni enosmerni stimulator (tDCS) DIY: 5 korakov
Video: My tDCS device 2024, November
Anonim
Arduino TDCS Super Simples. Transkranialni enosmerni stimulator (tDCS), naredi sam
Arduino TDCS Super Simples. Transkranialni enosmerni stimulator (tDCS), naredi sam

Para fazer este tDCS você precisará apenas de um arduino, upor, kondenzator in alguns cabos

  1. Arduino

    • Pino D13 kot PWM (nastavite ser alterado).
    • Pino A0 kot analna analitika (za povratne informacije).
    • Pino GND apenas para GND.
  2. Upor (~ 470 Ω, mas provavelmente entre 300-1000 Ω funkcionalen, natančno spremenjen ali brez código fonte)
  3. Kondenzator (220 μF). Postrezite za PWM za pulziranje pulza.
  4. 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

Saiba Mais
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

Monte O Circuito Abaixo
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

Uma UI Personalizacija
Uma UI Personalizacija

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: