Obsah:

Arduino TDCS Super Simples. Transkraniální stimulátor stejnosměrného proudu (tDCS) DIY: 5 kroků
Arduino TDCS Super Simples. Transkraniální stimulátor stejnosměrného proudu (tDCS) DIY: 5 kroků

Video: Arduino TDCS Super Simples. Transkraniální stimulátor stejnosměrného proudu (tDCS) DIY: 5 kroků

Video: Arduino TDCS Super Simples. Transkraniální stimulátor stejnosměrného proudu (tDCS) DIY: 5 kroků
Video: Simple DIY TENS and TDCS Example 2024, Červenec
Anonim
Arduino TDCS Super Simples. Transkraniální stimulátor přímého proudu (tDCS) DIY
Arduino TDCS Super Simples. Transkraniální stimulátor přímého proudu (tDCS) DIY

Para fazer este tDCS você precisará apenas de um arduino, resistor, kondenzator e alguns cabosComponentes

  1. Arduino

    • Pino D13 je kompatibilní s PWM (pode alter alterado).
    • Pino A0 s analogovou anodou (pro zpětnou vazbu).
    • Pino GND apena jako GND.
  2. Rezistor (~ 470 Ω, mas provavelmente entre 300-1000 Ω funciona, você precisará alterar no código fonte)
  3. Kondenzátor (220 μF). Slouží k zavedení pulzů do PWM.
  4. Eletrodos de Esponja (Použijte á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. Vícenásobné změny nebo změny v cílové mA pelo sériové CLI (konzole).

Krok 1: Saiba Mais

Saiba Mais
Saiba Mais

Podívejte se na hlavní stránku tDCS. Všechny naše FDA mohou podněcovat a poškozovat hlavní záležitosti, které se týkají většiny, prevence a prevence…

Krok 2: Monte O Circuito Abaixo

Monte O Circuito Abaixo
Monte O Circuito Abaixo

Načtení se nezdařilo.

Krok 3: Nainstalujte O Código No Seu Arduino

Konfigurace a konfigurace parametrů a hardwarových parametrů a konfigurovatelných parametrů.

Podívejte se, jak se mění různé sazby za sériové číslo: 115200 bodů za výsledek.

Para executar 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 Řetězec ver = "2,0 m"; // PARAMETRY HARDWARU const int analogInPin = A0; // Entrada do Analógico const int analogOutPin = 13; // Saida D13 padrão float maxOutV = 5,0; // Voltagem de saída PWM padrão do Arduino [V] float maxRefInV = 1.1; // Referencia à voltagem analógica [V] float R = 470,0; // Rezistence da corrente [Ohm]

// KONFIGUROVATELNÉ PARAMETRY

bool plotter = false; // Defina: true, caso esteja usando o Serial plotter bool putty = false; // Defina: true, caso esteja usando o PuTTT (pode ser alterado no CLI) int maxmin = 30; // Tempo (em minutos) nutário para desligar [Min] float target_mA = 2.73; // Essa é a corrente que passará pelo seu cérebro !!! [mA] float epsilon_mA = 0,03; // Diferença maxima entre a corrente real e o target_mA (Não altere caso não saiba o que está fazendo!)

// INIT GLOBALS

int stav = 1; /* -1 - Hlavní identifikace 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 zeros_len = 0; float smoothed_mA = 0;

Řetězec commandString = ""; // pro CLI

// POMOCNÍCI ZPĚTNÉ VAZBY

float computeOutVoltage (float V, float new_mA) {if (abs (new_mA -target_mA) maxOutV) {state = -1; // vzdorovat muito alta -> cérebro não encontrado? vrátit maxOutV; // návrat maxOutV/5.0; // para segurança} state = 0; návrat 0,1*nový_V+0,9*V; // návrat new_V; }

int convertVtoOutputValue (float V) {

návratové omezení (int (V/maxOutV*255), 0, 255); }

float sensorValue2mA (int sensorValue) {

float sensorVoltage = sensorValue/1023.0*maxRefInV; float sensor_mA = sensorVoltage/R*1000,0; snímač návratu_mA; }

int debounced_state_compute (int stav) {

if (state 5) return 0; } vrátit 1; }

nepodepsaný dlouhý začátek, endc;

void process_feedback () {int sensorValue = analogRead (analogInPin); float new_mA = sensorValue2mA (sensorValue); vyhlazený_mA = 0,2*nový_mA+0,8*vyhlazený_mA; float V = outV; outV = computeOutVoltage (V, new_mA); analogWrite (analogOutPin, convertVtoOutputValue (outV)); debounced_state = debounced_state_compute (stav); // Exibir informações no CLI endc = (millis ()-start)/1000; Řetězec tv = "[", ttm = "mA/", tsm = "V,", ts = "mA] | Estado:", h = "| Tempo:", s = ":", leadM = "", leadS = "", plotT = "Target:", plotmA = "\ tSmoothed MA:", plotMin = "\ tMin:", tempo; nepodepsané dlouhé tmin = endc/60-((endc/60)%1); // Formatação if (endc%60 <10) leadS = "0"; if (tmin = 0) ts = ts + " +"; // Parar automaticamente if (tmin> maxmin) stop_device (); Řetězec txt; if (plotter) txt = plotT + target_mA + plotMin + "0" + plotmA + smoothed_mA; jinak txt = tv + V + tsm + vyhlazeno_mA + ttm + target_mA + ts + debounced_state + h + tempo; if (tmel) Serial.print ("\ r / e [? 25l" + txt); else Serial.println (txt);

// počkejte 2 milisekundy před další smyčkou

// aby se převodník analogového signálu na digitální usadil // po posledním čtení: delay (5); }

neplatné stop_device () {

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

// POMOCNÍCI CLI

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

zrušit pomoc () {

Serial.println ("tDSC arduino, ver"+ver); Serial.println ("'?' - ajuda"); Serial.println ("" max_time ' - atualiza o tempo maxima (em minutos) "); Serial.println ("'target_mA' - atualiza o target (mA)"); Serial.println ("'epsilon_mA' - atualiza o epsilon_mA (mA)"); Serial.println ("'R' - atualiza a resistência do hardware (Ohm)"); Serial.println ("'putty' - muda a formatação de saída pro PuTTY"); Serial.println ("'stop' - para a odhadulação"); Serial.println ("" restart " - iniciační/reinicia a odhadulação & o timer"); Serial.println ("'continue' - continua a odhadulaçã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:"); Serial.print (R); Serial.println ("Ohmy"); }

bool parse_param (String & cmdString) {

int spacePos = cmdString.indexOf (''); if (spacePos <= 0) return false; Řetězcový příkaz = cmdString.substring (0, spacePos); Řetězec fval = cmdString.substring (spacePos+1); if (příkaz == "tmel") if (fval == "true") {putty = true; return true; } else if (fval == "false") {putty = false; return true; } float val = fval.toFloat (); if (příkaz == "target_mA") {if (val100.0) {return false; } target_mA = val; clearAndHome (); Pomoc(); } else if (příkaz == "epsilon_mA") {if (val0.3) {return false; } epsilon_mA = val; clearAndHome (); Pomoc(); } else if (příkaz == "R") {R = val; clearAndHome (); Pomoc(); } else if (příkaz == "max_time") {maxmin = val; clearAndHome (); Pomoc(); } else {return false; } return true; }

// NASTAVENÍ A HLAVNÍ Smyčka

neplatné nastavení () {Serial.begin (115200); analogReference (VNITŘNÍ); //1.1 V Serial.print („Sessão iniciada!“); start = milis (); } void loop () {if (state! =-10) {process_feedback (); } if (Serial.available ()> 0) {char v = Serial.read (); if (byte (v) == 13) {// Návrat boolů přijat = true; if (commandString == "?" || commandString == "stop") {stop_device (); } else if (commandString == "restart") {clearAndHome (); stav = -1; outV = maxOutV/5,0; start = milis (); přijato = nepravda; } else if (commandString == "continue") {clearAndHome (); stav = -1; outV = maxOutV/5,0; přijato = nepravda; } else {bool ok = parse_param (commandString); if (! ok) {clearAndHome (); Pomoc(); přijato = nepravda; Serial.println ("Comando desconhecido: '" + commandString + "'"); }} commandString = ""; pokud (přijato) {clearAndHome (); Pomoc(); Serial.println („Ok!“); }} else {commandString+= v; if (state ==-10) {Serial.print (v); }}}}

Krok 4: Uma UI Personalizada

Přizpůsobení uživatelského rozhraní Uma
Přizpůsobení uživatelského rozhraní Uma

Chcete -li použít některou z následujících možností, použijte ferramenta PuTTY, a defina no código fonte:

tmel = pravda

Doporučené definice:

  • Okno

    • 61 Colunas e 20 Linhas
    • Zobrazit desativado posuvníku
  • Okno> Vzhled

    Fonte: Lucida Console, 28px

Krok 5: Dúvidas?

Para abrir a guia de ajuda, digite:

?

e stiskněte [ENTER]

OBS: Caso o Estado seja:

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

Doporučuje: