Sadržaj:

Arduino TDCS super jednostavni. Transkranijalni stimulator istosmjerne struje (tDCS) DIY: 5 koraka
Arduino TDCS super jednostavni. Transkranijalni stimulator istosmjerne struje (tDCS) DIY: 5 koraka

Video: Arduino TDCS super jednostavni. Transkranijalni stimulator istosmjerne struje (tDCS) DIY: 5 koraka

Video: Arduino TDCS super jednostavni. Transkranijalni stimulator istosmjerne struje (tDCS) DIY: 5 koraka
Video: Преобразователь 12 220 на сердечнике ТДКС 2024, Juli
Anonim
Arduino TDCS super jednostavni. Transkranijalni stimulator istosmjerne struje (tDCS), uradi sam
Arduino TDCS super jednostavni. Transkranijalni stimulator istosmjerne struje (tDCS), uradi sam

Za rad na tDCS -u, precizni apeni za um arduino, otpornik, kondenzator i kabine

  1. Arduino

    • Pino D13 je sa PWM -om (podešeni servera).
    • Pino A0 kao uvod u analnu analizu (za povratnu informaciju).
    • Pino GND apenas para GND.
  2. Otpornik (~ 470 Ω, masovna radna snaga 300-1000 Ω sa funkcijom, precizna izmjena zvuka bez kodiranog fonta)
  3. Kondenzator (220 μF). Služiti para estabilizar os pulsos do PWM.
  4. Eletrodos de Esponja (Koristite água salina para molhá-lo).

Como funciona

O Arduino računa a corrente padrão (pode ser alterado) que passará pelo seu cérebro apenas por mudar a voltagem de saída. Pozovite tambem da promijenite vrijednost ili vrijednost do target_mA pelo serijskog CLI -a (konzole).

Korak 1: Saiba Mais

Saiba Mais
Saiba Mais

Você deve ler mais sobre tDCS primeiro. Não é aprovado pelo FDA -e i podešavanje štetnih a sua saúde, principijelno se você não sabe nada sobre os efeitos colaterais, predostrožnosti i dentre outros…

Korak 2: Monte O Circuito Abaixo

Monte O Circuito Abaixo
Monte O Circuito Abaixo

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

Korak 3: Instalirajte O Código No Seu Arduino

Lembre-se de alterar as configurações and parametros in the area of HARDWARE PARAMS e CONFIGURABLE PARAMS.

Molimo vas da promijenite nivo izmjene ili dopunske stope do serijskog parametra: 115200 po podređenom rezultatu.

Za izvršne komande, trofej o Nema završetka linije za povratak prijevoza.

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

Código:

const String ver = "2.0m"; // HARDVER PARAMS const int analogInPin = A0; // Entrada do Analógico const int analogOutPin = 13; // Saida D13 padrão float maxOutV = 5.0; // Napon od detekcije PWM padrão do Arduino [V] plovak maxRefInV = 1,1; // Referenca à napon m analógica [V] plovak R = 470,0; // Resistencia da corrente [Ohm]

// KONFIGURIRAJNI PARAMS

bool ploter = false; // Definicija: true, caso esteja usando o Serijski ploter bool putty = false; // Definirano: true, caso esteja usando o PuTTT (podešena alterado bez CLI) int maxmin = 30; // Tempo (em minutos) neophodni parametri za [Min] float target_mA = 2.73; // Essa é a corrente que passará pelo seu cérebro !!! [mA] plovak epsilon_mA = 0,03; // Diferença máxima entre a corrente real e or target_mA (Não altere caso não saiba o que está fazendo!)

// INIT GLOBALS

int stanje = 1; /* -1 - Identifikacijski broj 0 - Napon slanja izmjene za definiciju odgovarajućeg padra 1 - Tudo certo. Você esta na corrente definida -10 - Desigadacija napona */ float outV = maxOutV; // Voltagem int debounced_state = 0; int nule_len = 0; float smoothed_mA = 0;

String commandString = ""; // za CLI

// POMOĆNICI ZA POVRATNE POVRATKE

float computeOutVoltage (float V, float new_mA) {if (abs (new_mA -target_mA) maxOutV) {stanje = -1; // otporência muito alta -> cérebro não encontrado? return maxOutV; // vraća maxOutV/5.0; // para segurança} stanje = 0; povratak 0,1*novi_V+0,9*V; // vrati new_V; }

int convertVtoOutputValue (float V) {

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

float sensorValue2mA (int sensorValue) {

plivajući senzorVoltage = sensorValue/1023.0*maxRefInV; plovak sensor_mA = napon osjetnika/R*1000,0; povratni senzor_mA; }

int debounced_state_compute (int stanje) {

if (stanje 5) vraća 0; } return 1; }

nepotpisani dugi početak, endc;

void process_feedback () {int sensorValue = analogRead (analogInPin); float new_mA = sensorValue2mA (sensorValue); smoothed_mA = 0,2*new_mA+0,8*smoothed_mA; plovak V = outV; outV = computeOutVoltage (V, novi_mA); analogWrite (analogOutPin, convertVtoOutputValue (outV)); debounced_state = debounced_state_compute (stanje); // Exibir informacije nema CLI endc = (millis ()-početak)/1000; String tv = "[", ttm = "mA/", tsm = "V,", ts = "mA] | Estado:", h = "| Tempo:", s = ":", leadM = "", leadS = "", plotT = "Cilj:", plotmA = "\ tSmoothed MA:", plotMin = "\ tMin:", tempo; bez potpisa dugo tmin = endc/60-((endc/60)%1); // Formatação if (endc%60 <10) leadS = "0"; if (tmin = 0) ts = ts + " +"; // Paramat automaticamente if (tmin> maxmin) stop_device (); String txt; if (ploter) txt = plotT + target_mA + plotMin + "0" + plotmA + smoothed_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);

// čekati 2 milisekunde prije sljedeće petlje

// da se analogno-digitalni pretvarač smiri // nakon posljednjeg očitanja: delay (5); }

void stop_device () {

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

// CLI HELPERS

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' - ažuriranje maksimalnog tempa (em minute)"); Serial.println ("'target_mA' - ažuriranje cilja (mA)"); Serial.println ("'epsilon_mA' - ažuriranje o epsilon_mA (mA)"); Serial.println ("'R' - postavljanje otpornosti na hardver (Ohm)"); Serial.println ("'kit" - mora oblikovati podatke o PuTTY "); Serial.println ("'stop' - para i estimulação"); Serial.println ("'restart' - inicia/reinicia estimulação & o timer"); Serial.println ("'continue' - continuea 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.print (R); Serial.println ("Ohmi"); }

bool parse_param (String & cmdString) {

int spacePos = cmdString.indexOf (''); if (spacePos <= 0) return false; Naredba niza = cmdString.substring (0, spacePos); Niz fval = cmdString.substring (razmakPos+1); if (naredba == "kit") if (fval == "true") {putty = true; return true; } else if (fval == "false") {putty = false; return true; } float val = fval.toFloat (); if (naredba == "target_mA") {if (val100.0) {return false; } target_mA = val; clearAndHome (); help (); } else if (command == "epsilon_mA") {if (val0.3) {return false; } epsilon_mA = val; clearAndHome (); help (); } else if (naredba == "R") {R = val; clearAndHome (); help (); } else if (command == "max_time") {maxmin = val; clearAndHome (); help (); } else {return false; } return true; }

// POSTAVLJANJE I GLAVNA PETLJA

void setup () {Serial.begin (115200); analogReference (INTERNAL); //1.1 V Serial.print ("Sessão iniciada!"); start = millis (); } void loop () {if (stanje! =-10) {process_feedback (); } if (Serial.available ()> 0) {char v = Serial.read (); if (byte (v) == 13) {// Bool return bool prihvaćen = true; if (commandString == "?" || commandString == "stop") {stop_device (); } else if (commandString == "restart") {clearAndHome (); stanje = -1; outV = maxOutV/5.0; start = millis (); prihvaćeno = netačno; } else if (commandString == "continue") {clearAndHome (); stanje = -1; outV = maxOutV/5.0; prihvaćeno = netačno; } else {bool ok = parse_param (commandString); if (! ok) {clearAndHome (); help (); prihvaćeno = netačno; Serial.println ("Comando desconhecido: '" + commandString + "'"); }} commandString = ""; if (prihvaćeno) {clearAndHome (); help (); Serial.println ("U redu!"); }} else {commandString+= v; if (stanje ==-10) {Serial.print (v); }}}}

Korak 4: Uma UI personalizacija

Uma UI Personalizada
Uma UI Personalizada

Za dodatnu podršku i sigurnost, koristite ferramenta PuTTY, i definirajte bez kodigo fonte:

kit = istina

Preporuke za definisanje:

  • Prozor

    • 61 Colunas e 20 Linhas
    • Prikažite traku za pomicanje desativado
  • Prozor> Izgled

    Veličina: Lucida Console, 28 piksela

Korak 5: Dúvidas?

Para abrir a guia de ajuda, digitalno:

?

Pritisnite [ENTER]

OBS: Caso o Estado seja:

-1 -> Cérebro não identificationado (corrente aberta) +0 -> Prilagođeni naponm+1 -> Tudo certo, tDCS funcionando

Preporučuje se: