Talaan ng mga Nilalaman:

Arduino TDCS Super Simples. Transcranial Direct Kasalukuyang Stimulator (tDCS) DIY: 5 Mga Hakbang
Arduino TDCS Super Simples. Transcranial Direct Kasalukuyang Stimulator (tDCS) DIY: 5 Mga Hakbang

Video: Arduino TDCS Super Simples. Transcranial Direct Kasalukuyang Stimulator (tDCS) DIY: 5 Mga Hakbang

Video: Arduino TDCS Super Simples. Transcranial Direct Kasalukuyang Stimulator (tDCS) DIY: 5 Mga Hakbang
Video: Transcranial Direct Current Stimulation (tDCS) explained | Neuroscience Methods 101 2024, Nobyembre
Anonim
Arduino TDCS Super Simples. Transcranial Direct Kasalukuyang Stimulator (tDCS) DIY
Arduino TDCS Super Simples. Transcranial Direct Kasalukuyang Stimulator (tDCS) DIY

Para sa fazer este tDCS você precisará apenas de um arduino, resistor, capacitor at alguns cabosComponentes

  1. Arduino

    • Pino D13 como saída PWM (pode ser alterado).
    • Pino A0 como entrada analógica (para sa feedback de corrente).
    • Pino GND apenas para GND.
  2. Resistor (~ 470 Ω, mas provavelmente entre 300-1000 Ω funciona, você precisará alterar no código fonte)
  3. Kapasitor (220 μF). Paglilingkod para sa pagtatag ng os pulsos gawin PWM.
  4. Eletrodos de Esponja (Gumamit ng á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. Tumingin sa pode alterar o valor do target_mA pelo serial CLI (Console).

Hakbang 1: Saiba Mais

Saiba Mais
Saiba Mais

Mag-iwan ng pahina sa ngayon sobre tDCS primeiro. Hindi mo ito nabibigyan ng peligro ang FDA at ang pode ay hindi nakakaunawa sa isang mas mahusay na pamamahala, punong-guro na nagtatrabaho sa iyo upang mabuo ang mga ito sa colaterais, precauções at dentre outros…

Hakbang 2: Monte O Circuito Abaixo

Monte O Circuito Abaixo
Monte O Circuito Abaixo

Nao se esqueça das esponjas com água salina!

Hakbang 3: Mag-install O Código No Seu Arduino

Mahusay na pagbabago bilang configurações at parametros na área de HARDWARE PARAMS at CONFIGURABLE PARAMS.

Tumingin sa pagbabago ng rate ng serial para sa: 115200 para sa poder ver o resulta.

Para sa mga pagpapatupad ng comandos, troque o Walang Pagtatapos ng Linya para sa Pagbabalik ng Karwahe.

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

Código:

const String ver = "2.0m"; // HARDWARE 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] float R = 470.0; // Resistencia da corrente [Ohm]

// CONFIGURABLE PARAMS

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) necessá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 máxima entre a corrente real e o target_mA (Hindi mo na mababago ang mga ito saiba o que está fazendo!)

// INIT GLOBALS

int estado = 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 debounc_state = 0; int zeros_len = 0; lumutang smoothed_mA = 0;

String commandString = ""; // para sa CLI

// FEEDBACK HELPERS

float computeOutVoltage (float V, float new_mA) {if (abs (new_mA-target_mA) maxOutV) {state = -1; // resistência muito alta -> cérebro não encontrado? ibalik ang maxOutV; // return maxOutV / 5.0; // para segurança} estado = 0; ibalik ang 0.1 * bago_V + 0.9 * V; // return new_V; }

int convertVtoOutputValue (float V) {

bumalik na pigilan (int (V / maxOutV * 255), 0, 255); }

float sensorValue2mA (int sensorValue) {

float sensorVoltage = sensorValue / 1023.0 * maxRefInV; float sensor_mA = sensorVoltage / R * 1000.0; ibalik ang sensor_mA; }

int debounc_state_compute (int estado) {

kung (estado 5) ibalik ang 0; } bumalik 1; }

unsigned matagal na pagsisimula, endc;

void process_feedback () {int sensorValue = analogRead (analogInPin); float new_mA = sensorValue2mA (sensorValue); smoothed_mA = 0.2 * new_mA + 0.8 * smoothed_mA; float V = outV; outV = computeOutVoltage (V, new_mA); analogWrite (analogOutPin, convertVtoOutputValue (outV)); debounce_state = debounce_state_compute (estado); // Exibir informações no CLI endc = (millis () - start) / 1000; String tv = "[", ttm = "mA /", tsm = "V,", ts = "mA] | Estado:", h = "| Tempo:", s = ":", leadM = "", leadS = "", plotT = "Target:", plotmA = "\ tSmoothed MA:", plotMin = "\ tMin:", tempo; unsigned long tmin = endc / 60 - ((endc / 60)% 1); // Formatação if (endc% 60 <10) leadS = "0"; kung (tmin = 0) ts = ts + "+"; // Parar automaticamente kung (tmin> maxmin) stop_device (); String txt; kung (plotter) txt = plotT + target_mA + plotMin + "0" + plotmA + smoothed_mA; iba pa txt = tv + V + tsm + smoothed_mA + ttm + target_mA + ts + debounce_state + h + tempo; kung (masilya) Serial.print ("\ r / e [? 25l" + txt); iba pa Serial.println (txt);

// wait 2 milliseconds bago ang susunod na loop

// para sa analog-to-digital converter upang maayos // pagkatapos ng huling pagbabasa: pagkaantala (5); }

void stop_device () {

estado = -10; analogWrite (analogOutPin, 0); malinawAndHome (); Serial.println ("Sessão tDCS interrompida"); Serial.println ("-----------------"); tulong (); }

// CLI HELPERS

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

walang bisa ang tulong () {

Serial.println ("tDSC arduino, ver" + ver); Serial.println ("'?' - ajuda"); Serial.println ("'max_time' - atualiza o tempo máximo (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 estimulação"); Serial.println ("'restart' - inicia / reinicia a estimulação & o timer"); Serial.println ("'magpatuloy' - patuloy na isang pagtantya"); 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 ("Ohms"); }

bool parse_param (String & cmdString) {

int spacePos = cmdString.indexOf ("); kung (spacePos <= 0) bumalik maling; String command = cmdString.substring (0, spacePos); String fval = cmdString.substring (spacePos + 1); kung (utos == "masilya") kung (fval == "totoo") {putty = totoo; bumalik totoo; } iba pa kung (fval == "false") {putty = false; bumalik totoo; } float val = fval.toFloat (); kung (utos == "target_mA") {kung (val100.0) {bumalik maling; } target_mA = val; malinawAndHome (); tulong (); } iba pa kung (utusan == "epsilon_mA") {kung (val0.3) {return false; } epsilon_mA = val; malinawAndHome (); tulong (); } iba pa kung (utusan == "R") {R = val; malinawAndHome (); tulong (); } iba pa kung (utusan == "max_time") {maxmin = val; malinawAndHome (); tulong (); } iba pa {bumalik na hindi totoo; } bumalik totoo; }

// SETUP AT MAIN LOOP

void setup () {Serial.begin (115200); sanggunian ng analog (INTERNAL); //1.1 V Serial.print ("Sessão iniciada!"); simulan = millis (); } void loop () {if (state! = - 10) {process_feedback (); } kung (Serial.available ()> 0) {char v = Serial.read (); kung (byte (v) == 13) {// Caroli return bool tinanggap = totoo; kung (commandString == "?" || commandString == "stop") {stop_device (); } iba pa kung (commandString == "restart") {clearAndHome (); estado = -1; outV = maxOutV / 5.0; simulan = millis (); tinanggap = false; } iba pa kung (commandString == "magpatuloy") {clearAndHome (); estado = -1; outV = maxOutV / 5.0; tinanggap = false; } iba pa {bool ok = parse_param (commandString); kung (! ok) {clearAndHome (); tulong (); tinanggap = false; Serial.println ("Comando desconhecido: '" + commandString + "'"); }} commandString = ""; kung (tinanggap) {clearAndHome (); tulong (); Serial.println ("Ok!"); }} iba pa {commandString + = v; kung (state == - 10) {Serial.print (v); }}}}

Hakbang 4: Uma UI Personalizada

Uma UI Personalizada
Uma UI Personalizada

Para melhor acompanhamento at segurança, gumamit ng isang ferramenta PuTTY, at maaari kang magkaroon ng isang font:

masilya = totoo

Recomendações de definições:

  • Window

    • 61 Colunas e 20 Linhas
    • Ipakita ang scrollbar desativado
  • Window> Hitsura

    Fonte: Lucida Console, 28px

Hakbang 5: Dúvidas?

Para abrir a guia de ajuda, digite:

?

e pressione [ENTER]

OBS: Caso o Estado seja:

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

Inirerekumendang: