Satura rādītājs:

Arduino TDCS Super Simples. Transkraniāls līdzstrāvas stimulators (tDCS) DIY: 5 soļi
Arduino TDCS Super Simples. Transkraniāls līdzstrāvas stimulators (tDCS) DIY: 5 soļi

Video: Arduino TDCS Super Simples. Transkraniāls līdzstrāvas stimulators (tDCS) DIY: 5 soļi

Video: Arduino TDCS Super Simples. Transkraniāls līdzstrāvas stimulators (tDCS) DIY: 5 soļi
Video: working of dc capacitor after rectifier #shorts #capacitor 2024, Jūlijs
Anonim
Arduino TDCS Super Simples. Transkraniāls līdzstrāvas stimulators (tDCS) DIY
Arduino TDCS Super Simples. Transkraniāls līdzstrāvas stimulators (tDCS) DIY

Para fazer este tDCS você precisará apenas de um arduino, rezistors, kondensators un 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. Rezistors (~ 470 Ω, mas provavelmente entre 300-1000 Ω funciona, você precisará alterar no código fonte)
  3. Kondensators (220 μF). Pasniedziet PWM, lai izveidotu impulsu.
  4. Eletrodos de Esponja (Izmantojiet á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. darbība: Saiba Mais

Saiba Maisa
Saiba Maisa

Você deve ler mais sobre tDCS primeiro. Não é aprovado pelo FDA e pode ser aizspriedums a sua saúde, principmente se você não sabe nada sobre os efeitos colaterais, piesardzības pasākumi un zobu ārējie…

2. solis: Monte O Circuito Abaixo

Monte O Circuito Abaixo
Monte O Circuito Abaixo

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

3. darbība: instalējiet O Código No Seu Arduino

Lembre-se de alterar, kā konfigurācijas un parametru zonas, kurās ietilpst Aparatūras paraugi un KONFIGURĒJAMI PARAMI.

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

Par izpildāmām komandām, troque o No Line Ending par Carriage Return.

O código fonte + apmācība também podem ser encontrados no repositório:

Código:

const String ver = "2.0m"; // Aparatūras PARAMS 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; // Referencia à voltagem analógica [V] pludiņš R = 470,0; // Resistencia da corrente [Ohm]

// KONFIGURĒJAMI PARAMI

bool ploteris = nepatiess; // Defina: true, caso esteja usando o Serial ploter 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] pludiņš 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 stāvoklis = 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; // Spriegums int debounced_state = 0; int nulles_len = 0; pludiņš nogludināts_mA = 0;

String commandString = ""; // CLI

// ATBILDES PALĪGI

float computeOutVoltage (pludiņš V, pludiņš new_mA) {if (abs (new_mA -target_mA) maxOutV) {state = -1; // resistência muito alta -> cérebro não encontrado? atgriezt maxOutV; // atgriezt maxOutV/5.0; // para segurança} valsts = 0; atgriezties 0,1*new_V+0,9*V; // atgriezties new_V; }

int convertVtoOutputValue (pludiņš V) {

atgriešanās ierobežojums (int (V/maxOutV*255), 0, 255); }

float sensorValue2mA (int sensorValue) {

pludiņa sensorsVoltage = sensorValue/1023.0*maxRefInV; pludiņa sensors_mA = sensorVoltage/R*1000.0; atgriešanās sensors_mA; }

int debounced_state_compute (int stāvoklis) {

ja (5. stāvoklis) atgriežas 0; } atgriezties 1; }

neparakstīts garš sākums, beigas;

void process_feedback () {int sensorValue = analogRead (analogInPin); pludiņš new_mA = sensorValue2mA (sensorValue); izlīdzināta_mA = 0,2*jauna_mA+0,8*izlīdzināta_mA; pludiņš V = outV; outV = computeOutVoltage (V, new_mA); analogWrite (analogOutPin, convertVtoOutputValue (outV)); debounced_state = debounced_state_compute (stāvoklis); // Exibir informationções no CLI endc = (milis ()-sākums)/1000; String tv = "[", ttm = "mA/", tsm = "V", ts = "mA] | Estado:", h = "| Tempo:", s = ":", leadM = "", leadS = "", plotT = "Target:", plotmA = "\ tSmoothed MA:", plotMin = "\ tMin:", tempo; neparakstīts garš tmin = endc/60-((endc/60)%1); // Formāts, ja (endc%60 <10) leadS = "0"; ja (tmin = 0) ts = ts + " +"; // Parar automaticamente if (tmin> maxmin) stop_device (); String txt; ja (ploteris) txt = plotTT + target_mA + plotMin + "0" + plotmA + izlīdzināts_mA; cits txt = tv + V + tsm + izlīdzināts_mA + ttm + target_mA + ts + debounced_state + h + temps; if (tepe) Serial.print ("\ r / e [? 25l" + txt); cits Serial.println (txt);

// pagaidiet 2 milisekundes pirms nākamās cilpas

// lai analogo ciparu pārveidotājs nokārtotos // pēc pēdējā nolasījuma: delay (5); }

void stop_device () {

stāvoklis = -10; analogWrite (analogOutPin, 0); clearAndHome (); Serial.println ("Sessão tDCS interrompida"); Serial.println ("------------------------"); palīdzība (); }

// CLI PALĪGI

void clearAndHome () {Serial.write (27); Sērijas nospiedums ("[2J" "); // limpa a tela Serial.write (27); // ESC Serial.print ("[H"); // / r if (! tepe) for (int i = 0; i <= 30; i ++) Serial.println (""); }

anulēta palīdzība () {

Serial.println ("tDSC arduino, ver"+ver); Serial.println ("'?' - ajuda"); Serial.println ("'max_time' - atualiza o tempo máximo (em minutes)"); Serial.println ("'target_mA' - atualiza vai target (mA)"); Serial.println ("'epsilon_mA' - atualiza o epsilon_mA (mA)"); Serial.println ("'R' - aparatūras (ohm) pretestība un pretestība"); Serial.println ("'tepe' - muda a formatação de saída pro PuTTY"); Serial.println ("'stop' - para a tāmes"); Serial.println ("'restart' - inicia/reinicia a tāmesção & o timer"); Serial.println ("'turpināt' - Continua a tāmes"); Serial.print ("\ n / rEstado: / n / r * max_time:"); Sērijas nospiedums (maxmin); Serial.print ("minūtes / n / r * target_mA:"); Serial.print (target_mA); Serial.print ("mA / n / r * epsilon_mA:"); Sērijas nospiedums (epsilon_mA); Serial.print ("mA / n / r * R:"); Sērijas nospiedums (R); Serial.println ("Omi"); }

bool parse_param (String & cmdString) {

int spacePos = cmdString.indexOf (''); if (spacePos <= 0) return false; String komanda = cmdString.substring (0, spacePos); String fval = cmdString.substring (atstarpePos+1); ja (komanda == "tepe") ja (fval == "true") {tepe = true; atgriezties patiesi; } cits if (fval == "false") {tepe = nepatiesa; atgriezties patiesi; } pludiņš val = fval.toFloat (); ja (komanda == "target_mA") {if (val100.0) {return false; } target_mA = val; clearAndHome (); palīdzība (); } cits if (komanda == "epsilon_mA") {if (val0.3) {return false; } epsilon_mA = val; clearAndHome (); palīdzība (); } cits if (komanda == "R") {R = val; clearAndHome (); palīdzība (); } cits if (komanda == "max_time") {maxmin = val; clearAndHome (); palīdzība (); } else {return false; } return true; }

// IESTATĪŠANA UN GALVENĀ LOOP

void setup () {Serial.begin (115200); analogReference (INTERNAL); //1.1 V Serial.print ("Sessão iniciada!"); sākums = milis (); } void loop () {if (state! =-10) {process_feedback (); } ja (Serial.available ()> 0) {char v = Serial.read (); if (baits (v) == 13) {// Pārvadājumu atgriešanas bools pieņemts = true; ja (commandString == "?" || commandString == "stop") {stop_device (); } cits if (commandString == "restart") {clearAndHome (); stāvoklis = -1; outV = maxOutV/5.0; sākums = milis (); pieņemts = nepatiess; } cits if (commandString == "turpināt") {clearAndHome (); stāvoklis = -1; outV = maxOutV/5.0; pieņemts = nepatiess; } cits {bool labi = parsēt_param (commandString); ja (! labi) {clearAndHome (); palīdzība (); pieņemts = nepatiess; Serial.println ("Comando desconhecido: '" + commandString + "'"); }} commandString = ""; ja (pieņemts) {clearAndHome (); palīdzība (); Serial.println ("Labi!"); }} else {commandString+= v; ja (štats ==-10) {Sērijas.druka (v); }}}}

4. darbība. Uma personalizētā lietotāja saskarne

Uma personalizētā lietotāja saskarne
Uma personalizētā lietotāja saskarne

Lai pavadītu pavadošo pavadījumu un segranču, izmantojiet PuTTY ferramentu, un tas nav kods:

tepe = taisnība

Definīciju ieteikumi:

  • Logs

    • 61 Kolona un 20 Linhas
    • Rādīt ritjoslas atinstalēšanu
  • Logs> Izskats

    Fonts: Lucida konsole, 28 pikseļi

5. solis: Dúvidas?

Para abrir a guia de ajuda, digite:

?

un nospiediet [ENTER]

OBS: Caso vai Estado seja:

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

Ieteicams: