Turinys:

„Arduino TDCS Super Simples“. Transkranijinis nuolatinės srovės stimuliatorius (tDCS) „pasidaryk pats“: 5 žingsniai
„Arduino TDCS Super Simples“. Transkranijinis nuolatinės srovės stimuliatorius (tDCS) „pasidaryk pats“: 5 žingsniai

Video: „Arduino TDCS Super Simples“. Transkranijinis nuolatinės srovės stimuliatorius (tDCS) „pasidaryk pats“: 5 žingsniai

Video: „Arduino TDCS Super Simples“. Transkranijinis nuolatinės srovės stimuliatorius (tDCS) „pasidaryk pats“: 5 žingsniai
Video: Simple DIY TENS and TDCS Example 2024, Lapkritis
Anonim
„Arduino TDCS Super Simples“. Transkranijinis nuolatinės srovės stimuliatorius (tDCS) „pasidaryk pats“
„Arduino TDCS Super Simples“. Transkranijinis nuolatinės srovės stimuliatorius (tDCS) „pasidaryk pats“

Para fazer este tDCS você precisará apenas de um arduino, rezistorius, kondensatorius ir alguns cabosComponentes

  1. Arduino

    • „Pino D13“yra PWM (pode ser alterado).
    • Pino A0 como entrada analógica (para feedback de corrente).
    • Pino GND apenas para GND.
  2. Rezistorius (~ 470 Ω, masinis provavelmente entre 300-1000 Ω funciona, vokê precisará alterar no código fonte)
  3. Kondensatorius (220 μF). Patiekite pagal PWM nustatytą pulsą.
  4. Eletrodos de Esponja (Naudokite á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 žingsnis: Saiba Mais

Saiba Mais
Saiba Mais

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

2 žingsnis: „Monte O Circuito Abaixo“

Monte O Circuito Abaixo
Monte O Circuito Abaixo

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

3 žingsnis: „Instale O Código No Seu Arduino“

Naudokite kitus įrankius, kaip konfigūracijas ir parametrus, skirtus HARDWARE PARAMS ir CONFIGURABLE PARAMS.

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

Pagal vykdomuosius komendus, „No Line Ending“pagal „Carriage Return“.

O código fonte + pamoka também podem ser encontrados no repositório:

Kodis:

const String ver = "2.0m"; // Aparatūros PARAMOS const int analogInPin = A0; // Entrada do Analógico const int analogOutPin = 13; // Saida D13 padrão float maxOutV = 5.0; // A įtampos įtampa PWM padrão do Arduino [V] float maxRefInV = 1.1; // Referencia à voltagem analógica [V] plūdė R = 470.0; // Resistencia da corrente [Ohm]

// KONFIGURUOJAMOS PARAMOS

bool ploteris = klaidingas; // Defina: true, caso esteja usando o Serial plotter bool putty = false; // Apibrėžimas: 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] plūdė 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 būsena = 1; /* -1 - Cherebro 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; // Įtampa int debounced_state = 0; int zeros_len = 0; plūdė išlyginta_mA = 0;

Eilutės komandaString = ""; // CLI

// PAGALBOS PAGALBOS

float computeOutVoltage (float V, float new_mA) {if (abs (new_mA -target_mA) maxOutV) {būsena = -1; // resistência muito alta -> cérebro não encontrado? return maxOutV; // grąžinti maxOutV/5.0; // para segurança} state = 0; grįžti 0,1*naujas_V+0,9*V; // return new_V; }

int convertVtoOutputValue (plūdė V) {

grąžinimo apribojimas (int (V/maxOutV*255), 0, 255); }

float sensorValue2mA (int sensorValue) {

float sensorVoltage = sensorValue/1023.0*maxRefInV; plūdės jutiklis_mA = sensorVoltage/R*1000.0; grąžinimo jutiklis_mA; }

int debounced_state_compute (int būsena) {

jei (5 būsena) grąžinkite 0; } grįžti 1; }

nepasirašyta ilga pradžia, pabaiga;

void process_feedback () {int sensorValue = analogRead (analogInPin); float new_mA = sensorValue2mA (sensorValue); išlygintas_mA = 0,2*naujas_mA+0,8*išlygintas_mA; plūdė V = outV; outV = computeOutVoltage (V, new_mA); analogWrite (analogOutPin, convertVtoOutputValue (outV)); debounced_state = debounced_state_compute (būsena); // Exibir informationções no CLI endc = (milis ()-pradžia)/1000; Eilutės tv = "[", ttm = "mA/", tsm = "V", ts = "mA] | Estado:", h = "| Tempo:", s = ":", leadM = "", leadS = "", plotT = "Target:", plotmA = "\ tSmoothed MA:", plotMin = "\ tMin:", tempo; nepasirašytas ilgas tmin = endc/60-((endc/60)%1); // Formatas, jei (endc%60 <10) leadS = "0"; jei (tmin = 0) ts = ts + " +"; // Parar automaticamente if (tmin> maxmin) stop_device (); Styginių txt; jei (braižytuvas) txt = plotTT + target_mA + plotMin + "0" + plotmA + išlygintas_mA; else txt = tv + V + tsm + išlyginta_mA + ttm + target_mA + ts + atšaukta_stata + h + tempas; if (glaistas) Serial.print ("\ r / e [? 25l" + txt); else Serial.println (txt);

// palaukite 2 milisekundes iki kitos kilpos

// kad analoginis-skaitmeninis keitiklis nusistovetu // po paskutinio skaitymo: delay (5); }

void stop_device () {

būsena = -10; analogWrite (analogOutPin, 0); clearAndHome (); Serial.println („Sessão tDCS interrompida“); Serial.println ("------------------------"); padėti (); }

// CLI HELPERS

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

niekinė pagalba () {

Serial.println ("tDSC arduino, ver"+ver); Serial.println ("'?' - ajuda"); Serial.println ("'max_time' - atualiza o tempo máximo (em minutes)"); Serial.println ("'target_mA' - aktualizavimas arba tikslas (mA)"); Serial.println ("'epsilon_mA' - aktualizuojama arba epsilon_mA (mA)"); Serial.println ("'R' - galutinis ir atsparus aparatinei įrangai (Ohm)"); Serial.println ("'glaistas' - muda a formatação de saída pro PuTTY"); Serial.println ("'stop' - para a aprēķinis"); Serial.println ("'restart' - inicia/reinicia a appreulação & o timer"); Serial.println ("'tęsti' - Continua a tāmė"); Serial.print ("\ n / rEstado: / n / r * max_time:"); Serijinis atspaudas (maks. Min.); Serial.print ("minutės / n / r * target_mA:"); Serial.print (target_mA); Serial.print ("mA / n / r * epsilon_mA:"); Serial.print (epsilon_mA); Serial.print ("mA / n * r:"); Serijinis atspaudas (R); Serial.println („omai“); }

bool parse_param (String & cmdString) {

int spacePos = cmdString.indexOf (''); if (spacePos <= 0) return false; Styginių komanda = cmdString.substring (0, spacePos); String fval = cmdString.substring (tarpasPos+1); if (komanda == "glaistas") if (fval == "tiesa") {glaistas = tiesa; grįžti tiesa; } else if (fval == "false") {putty = false; grįžti tiesa; } plūdė val = fval.toFloat (); if (komanda == "target_mA") {if (val100.0) {return false; } target_mA = val; clearAndHome (); padėti (); } else if (komanda == "epsilon_mA") {if (val0.3) {return false; } epsilon_mA = val; clearAndHome (); padėti (); } else if (komanda == "R") {R = val; clearAndHome (); padėti (); } else if (komanda == "max_time") {maxmin = val; clearAndHome (); padėti (); } else {return false; } return true; }

// Sąranka ir pagrindinis kilpas

void setup () {Serial.begin (115200); analogReference (INTERNAL); //1.1 V Serial.print ("Sessão iniciada!"); pradžia = milis (); } void loop () {if (state! =-10) {process_feedback (); } if (Serial.available ()> 0) {char v = Serial.read (); if (baitas (v) == 13) {// Vežimo grąžinimo boolis priimtas = tiesa; if (commandString == "?" || commandString == "stop") {stop_device (); } else if (commandString == "restart") {clearAndHome (); būsena = -1; outV = maxOutV/5.0; pradžia = milis (); priimta = klaidinga; } else if (commandString == "tęsti") {clearAndHome (); būsena = -1; outV = maxOutV/5.0; priimta = klaidinga; } else {bool ok = parse_param (commandString); if (! gerai) {clearAndHome (); padėti (); priimta = klaidinga; Serial.println ("Comando desconhecido: '" + commandString + "'"); }} commandString = ""; jei (priimta) {clearAndHome (); padėti (); Serial.println („Gerai!“); }} else {commandString+= v; if (būsena ==-10) {Serial.print (v); }}}}

4 žingsnis: „Uma UI Personalizada“

Uma Personalizada
Uma Personalizada

Norėdami palydėti akompanimentą ir mišinį, naudokite „PuTTY“ferramentą, o ne apibrėžimą:

glaistas = tiesa

Apibrėžimų rekomendacijos:

  • Langas

    • 61 Colunas ir 20 Linhas
    • Rodyti slinkties juostos desativado
  • Langas> Išvaizda

    Fontai: „Lucida Console“, 28 piks

5 žingsnis: Dúvidas?

Para abrir a guia de ajuda, digite:

?

ir paspauskite [ENTER]

OBS: „Caso“arba „Estado“:

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

Rekomenduojamas: