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, Srpanj
Anonim
Arduino TDCS super jednostavni. Transkranijalni stimulator istosmjerne struje (tDCS) DIY
Arduino TDCS super jednostavni. Transkranijalni stimulator istosmjerne struje (tDCS) DIY

Para fazer este tDCS você precisará apenas de um arduino, otpornik, kondenzator i alguns cabosKomponente

  1. Arduino

    • Pino D13 kao sa PWM (pode ser alterado).
    • Pino A0 como entrada analógica (para feedback de corrente).
    • Pino GND apenas para GND.
  2. Otpornik (~ 470 Ω, provavelmente ulaze 300-1000 Ω funkcionalno, precizna izmjena bez izmjene fonte)
  3. Kondenzator (220 μF). Poslužite para estabilizar os pulsos do PWM.
  4. Eletrodos de Esponja (Koristite á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. Pozivajte tambem da promijenite ili promijenite 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 i pode ser prejudicial a sua saúde, principalmente se você não sabe nada sobre os efeitos colaterais, precauções e 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 e parametros na području de HARDWARE PARAMS e CONFIGURABLE PARAMS.

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

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

O código 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 plovak maxOutV = 5,0; // Voltm de saída PWM padrão do Arduino [V] plovak maxRefInV = 1,1; // Referencia à voltagem analógica [V] plovak R = 470,0; // Resistencia da corrente [Ohm]

// KONFIGURIRAJNI PARAMI

bool ploter = false; // Definacija: true, caso esteja usando o Serijski ploter bool putty = false; // Definacija: true, caso esteja usando o PuTTT (pode ser alterado no CLI) int maxmin = 30; // Tempo (em minutos) potrebno za desligar [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 o target_mA (Não altere caso não saiba o que está fazendo!)

// INIT GLOBALI

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 - Voltagem desligada */ float outV = maxOutV; // Voltagem int debounced_state = 0; int nule_len = 0; float smoothed_mA = 0;

Niz naredbeString = ""; // za CLI

// POMOĆNICI

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? povrat 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) {

povratno ograničenje (int (V/maxOutV*255), 0, 255); }

float sensorValue2mA (int sensorValue) {

osjetnik plovkaVoltage = sensorValue/1023.0*maxRefInV; osjetnik plovka_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); zaglađeni_mA = 0,2*novi_mA+0,8*zaglađeni_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; Niz 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"; ako je (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

// za podmirenje analogno-digitalnog pretvarača // nakon posljednjeg očitanja: delay (5); }

void stop_device () {

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

// CLI POMOĆNICI

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 tempa maksimuma (em minutos)"); Serial.println ("'target_mA' - ažuriranje cilja (mA)"); Serial.println ("'epsilon_mA' - atualiza o epsilon_mA (mA)"); Serial.println ("'R' - postavljanje otpornosti na hardver (Ohm)"); Serial.println ("'kit" - muda a formatação de saída pro PuTTY "); Serial.println ("'stop' - para a estimulação"); Serial.println ("'restart' - inicia/reinicia estimulação & o timer"); Serial.println ("'continue' - continua a estimulação"); Serial.print ("\ n / rEstado: / n / r * max_time:"); Serijski.ispis (maxmin); Serial.print ("minute / n / r * target_mA:"); Serial.print (target_mA); Serial.print ("mA / n / r * epsilon_mA:"); Serijski.ispis (epsilon_mA); Serial.print ("mA / n / r * R:"); Serijski ispis (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 (); Pomozite(); } else if (naredba == "epsilon_mA") {if (val0.3) {return false; } epsilon_mA = val; clearAndHome (); Pomozite(); } else if (naredba == "R") {R = val; clearAndHome (); Pomozite(); } else if (naredba == "max_time") {maxmin = val; clearAndHome (); Pomozite(); } else {return false; } return true; }

// POSTAVLJANJE I GLAVNA PETLJA

void setup () {Serial.begin (115200); analogReference (INTERNO); //1.1 V Serial.print ("Sessão iniciada!"); početak = 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; početak = millis (); prihvaćeno = lažno; } else if (commandString == "continue") {clearAndHome (); stanje = -1; outV = maxOutV/5,0; prihvaćeno = lažno; } else {bool ok = parse_param (commandString); if (! ok) {clearAndHome (); Pomozite(); prihvaćeno = lažno; Serial.println ("Comando desconhecido: '" + commandString + "'"); }} commandString = ""; ako (prihvaćeno) {clearAndHome (); Pomozite(); Serial.println ("U redu!"); }} else {commandString+= v; if (stanje ==-10) {Serial.print (v); }}}}

Korak 4: Uma UI personalizacija

Uma UI Personalizacija
Uma UI Personalizacija

Para melhor acompanhamento e segurança, use ferramenta PuTTY, e defina no código fonte:

kit = istina

Preporuke prema definicijama:

  • Prozor

    • 61 Colunas e 20 Linhas
    • Desativado prikazati kliznu traku
  • Prozor> Izgled

    Fonte: Lucida Console, 28 piksela

Korak 5: Dúvidas?

Para abrir a guia de ajuda, digite:

?

pritisnite [ENTER]

OBS: Caso o Estado seja:

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

Preporučeni: