INHOUDSOPGAWE:

Arduino TDCS Super Simples. Transkraniale gelykstroomstimulator (tDCS) DIY: 5 stappe
Arduino TDCS Super Simples. Transkraniale gelykstroomstimulator (tDCS) DIY: 5 stappe

Video: Arduino TDCS Super Simples. Transkraniale gelykstroomstimulator (tDCS) DIY: 5 stappe

Video: Arduino TDCS Super Simples. Transkraniale gelykstroomstimulator (tDCS) DIY: 5 stappe
Video: Transcranial Direct Current Stimulation (tDCS) explained | Neuroscience Methods 101 2024, November
Anonim
Arduino TDCS Super Simples. Transcraniale gelykstroomstimulator (tDCS) DIY
Arduino TDCS Super Simples. Transcraniale gelykstroomstimulator (tDCS) DIY

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

  1. Arduino

    • Pino D13 as PWM (pode ser alterado).
    • Ons het 'n analoog ingang (vir terugvoer van korrespondensie).
    • Pino GND apenas para GND.
  2. Weerstand (~ 470 Ω, mas provavelmente entre 300-1000 Ω funciona, você precisará alterar no código fonte)
  3. Kondensator (220 μF). Bedien vir die stabilisering van PWM.
  4. Eletrodos de Esponja (Gebruik água salina para molhá-lo).

Como funciona

O Arduino calcula a corrente padrão (pode ser alterado) que passarans pelo seu cérebro apenas por mudar a voltagem de saída. Ons kan 'n alternatiewe of waardevolle doelwit vir 'n reeks CLI (konsole) gebruik.

Stap 1: Saiba Mais

Saiba Mais
Saiba Mais

Você deve ler mais sobre tDCS primeiro. Die FDA kan ook 'n vooroordeel in die toekoms hê, maar ons kan nie meer 'n goeie idee hê nie …

Stap 2: Monte O Circuito Abaixo

Monte O Circuito Abaixo
Monte O Circuito Abaixo

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

Stap 3: Installeer O Código No Seu Arduino

Lembre-se de alterar as configurações and parametros na área de HARDWARE PARAMS e CONFIGURABLE PARAMS.

Ons kan 'n ander koers of 'n reeks koers gebruik: 115200 vir die wagwoord vir die resultate.

Vir die uitvoerende komando's, of No Line Ending vir Carriage Return.

O código fonte + tutoriaal oor hoe u dit kan installeer:

Wysiging:

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]

// KONFIGUREERbare parame

bool plotter = vals; // Defina: true, caso esteja usando o Serial plotter bool stopverf = vals; // 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; // Daar kan 'n korrekte werklike doelwit_mA wees (dit is 'n alternatiewe saak of dit 'n fazendo is!)

// INIT GLOBALS

int toestand = 1; - Você esta na corrente definida -10 - Voltagem desligada */ float outV = maxOutV; // Voltagem int debounced_state = 0; int nulle_len = 0; float smoothed_mA = 0;

String commandString = ""; // vir CLI

// TERUGVOERHULPERS

float computeOutVoltage (float V, float new_mA) {if (abs (new_mA -target_mA) maxOutV) {toestand = -1; // resistência muito alta -> cérebro não encontrado? gee maxOutV terug; // terugkeer maxOutV/5.0; // para segurança} staat = 0; opgawe 0,1*new_V+0,9*V; // terugkeer new_V; }

int convertVtoOutputValue (float V) {

terugkeerbeperking (int (V/maxOutV*255), 0, 255); }

float sensorValue2mA (int sensorValue) {

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

int debounced_state_compute (int toestand) {

as (staat 5) terugkeer 0; } terugkeer 1; }

ongetekende lang begin, einde;

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

// wag 2 millisekondes voor die volgende lus

// om die analoog-na-digitale omskakelaar te vestig // na die laaste lesing: vertraging (5); }

leemte stop_toestel () {

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

// CLI HELPERS

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

leegte hulp () {

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' - 'n weerstand teen hardeware (ohm)"); Serial.println ("'stopverf' - muda a formatação de saída pro PuTTY"); Serial.println ("'stop' - para a estimulação"); Serial.println ("'herlaai' - inicia/reinicia a estimulação & o timer"); Serial.println ("'voortgaan' - continua a estimulação"); Serial.print ("\ n / rEstado: / n / r * max_time:"); Reeks.afdruk (maksimum); 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:"); Reeks.afdruk (R); Serial.println ("Ohms"); }

bool parse_param (String & cmdString) {

int spacePos = cmdString.indexOf (''); as (spacePos <= 0) terugkeer vals; Stringopdrag = cmdString.substring (0, spacePos); String fval = cmdString.substring (spacePos+1); if (command == "stopverf") if (fval == "true") {stopverf = waar; terugkeer waar; } anders as (fval == "vals") {stopverf = vals; terugkeer waar; } float val = fval.toFloat (); if (command == "target_mA") {if (val100.0) {return false; } target_mA = val; clearAndHome (); hulp (); } anders if (command == "epsilon_mA") {if (val0.3) {return false; } epsilon_mA = val; clearAndHome (); hulp (); } anders as (command == "R") {R = val; clearAndHome (); hulp (); } anders as (command == "max_time") {maxmin = val; clearAndHome (); hulp (); } anders {return false; } terugkeer waar; }

// INSTELLING EN HOOFLUS

ongeldige opstelling () {Serial.begin (115200); analogReference (INTERNE); //1.1 V Serial.print ("Sessão iniciada!"); begin = millis (); } leemte lus () {if (staat! =-10) {proses_terugvoer (); } as (Serial.available ()> 0) {char v = Serial.read (); as (byte (v) == 13) {// Vervoeropgawe bool aanvaar = waar; if (commandString == "?" || commandString == "stop") {stop_device (); } anders as (commandString == "herlaai") {clearAndHome (); toestand = -1; outV = maxOutV/5.0; begin = millis (); aanvaar = vals; } anders as (commandString == "gaan voort") {clearAndHome (); toestand = -1; outV = maxOutV/5.0; aanvaar = vals; } anders {bool ok = parse_param (commandString); as (! ok) {clearAndHome (); hulp (); aanvaar = vals; Serial.println ("Comando desconhecido: '" + commandString + "'"); }} commandString = ""; as (aanvaar) {clearAndHome (); hulp (); Serial.println ("Ok!"); }} anders {commandString+= v; as (staat ==-10) {Serial.print (v); }}}}

Stap 4: Uma UI Personalizada

Uma UI Personalizada
Uma UI Personalizada

Vir 'n enkele kombinasie, gebruik 'n ferramenta PuTTY, of definieer geen funksie nie:

stopverf = waar

Aanbevelings vir definisies:

  • Venster

    • 61 Colunas e 20 Linhas
    • Vertoon die rolbalk in die besonder
  • Venster> Voorkoms

    Foto: Lucida -konsole, 28 px

Stap 5: Dúvidas?

Para abrir a guia de ajuda, syfer:

?

druk op [ENTER]

OBS: Caso o Estado seja:

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

Aanbeveel: