Innehållsförteckning:

Arduino TDCS Super Simples. Transkraniell likströmstimulator (tDCS) DIY: 5 steg
Arduino TDCS Super Simples. Transkraniell likströmstimulator (tDCS) DIY: 5 steg

Video: Arduino TDCS Super Simples. Transkraniell likströmstimulator (tDCS) DIY: 5 steg

Video: Arduino TDCS Super Simples. Transkraniell likströmstimulator (tDCS) DIY: 5 steg
Video: Simple DIY TENS and TDCS Example 2024, Juli
Anonim
Arduino TDCS Super Simples. Transkraniell likströmsstimulator (tDCS) DIY
Arduino TDCS Super Simples. Transkraniell likströmsstimulator (tDCS) DIY

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

  1. Arduino

    • Pino D13 som PWM (pode ser alterado).
    • Pino A0 como entrada analógica (para feedback de corrente).
    • Pino GND apenas para GND.
  2. Motstånd (~ 470 Ω, mas provavelmente entre 300-1000 Ω funciona, você precisará alterar no código fonte)
  3. Kondensator (220 μF). Servera para estabilizar os pulsos do PWM.
  4. Eletrodos de Esponja (Använd á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 valour do target_mA pelo serial CLI (Console).

Steg 1: Saiba Mais

Saiba Mais
Saiba Mais

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

Steg 2: Monte O Circuito Abaixo

Monte O Circuito Abaixo
Monte O Circuito Abaixo

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

Steg 3: Installera O Código No Seu Arduino

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

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

Para executar comandos, troque o No Line Ending för Carriage Return.

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

Kod:

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]

// KONFIGURERbara PARAM

bool plotter = falskt; // Defina: true, caso esteja usando o Seriell plotter bool kitt = 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 (Não altere caso não saiba o que está fazendo!)

// INIT GLOBALS

int tillstånd = 1; /* -1 - Cérebro não identifierado 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;

String commandString = ""; // för CLI

// FEEDBACK HJÄLPARE

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? return maxOutV; // return maxOutV/5.0; // para segurança} state = 0; retur 0,1*new_V+0,9*V; // returnera new_V; }

int convertVtoOutputValue (float V) {

returbegränsning (int (V/maxOutV*255), 0, 255); }

float sensorValue2mA (int sensorValue) {

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

int debounced_state_compute (int -tillstånd) {

om (tillstånd 5) returnerar 0; } return 1; }

osignerad långstart, slutc;

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)); debounced_state = debounced_state_compute (tillstånd); // 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; osignerad lång tmin = endc/60-((endc/60)%1); // Formatação if (endc%60 <10) leadS = "0"; om (tmin = 0) ts = ts + " +"; // Parar automaticamente if (tmin> maxmin) stop_device (); String txt; if (plotter) txt = plotT + target_mA + plotMin + "0" + plotmA + smoothed_mA; annars txt = tv + V + tsm + smoothed_mA + ttm + target_mA + ts + debounced_state + h + tempo; if (kitt) Serial.print ("\ r / e [? 25l" + txt); annars Serial.println (txt);

// vänta 2 millisekunder innan nästa slinga

// för att analog-till-digital-omvandlaren ska lösa sig // efter den senaste avläsningen: fördröjning (5); }

void stop_device () {

tillstånd = -10; analogWrite (analogOutPin, 0); clearAndHome (); Serial.println ("Sessão tDCS interrompida"); Serial.println ("------------------------"); hjälp(); }

// CLI -HJÄLPARE

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

ogiltig hjälp () {

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 ("'kitt' - 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 ("'fortsätta' - continua a estimulaçã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 ("Ohms"); }

bool parse_param (String & cmdString) {

int spacePos = cmdString.indexOf (''); om (spacePos <= 0) returnerar false; String -kommando = cmdString.substring (0, spacePos); String fval = cmdString.substring (spacePos+1); if (kommando == "kitt") if (fval == "sant") {kitt = sant; återvända sant; } annars if (fval == "false") {putty = false; återvända sant; } float val = fval.toFloat (); if (command == "target_mA") {if (val100.0) {return false; } target_mA = val; clearAndHome (); hjälp(); } annars if (command == "epsilon_mA") {if (val0.3) {return false; } epsilon_mA = val; clearAndHome (); hjälp(); } annars if (kommando == "R") {R = val; clearAndHome (); hjälp(); } annars if (command == "max_time") {maxmin = val; clearAndHome (); hjälp(); } annat {return false; } återvända sant; }

// INSTÄLLNING OCH MAIN LOOP

void setup () {Serial.begin (115200); analogReference (INTERNAL); //1.1 V Serial.print ("Sessão iniciada!"); start = millis (); } void loop () {if (state! =-10) {process_feedback (); } om (Serial.available ()> 0) {char v = Serial.read (); if (byte (v) == 13) {// Vagnretur bool accepteras = true; if (commandString == "?" || commandString == "stop") {stop_device (); } annars if (commandString == "restart") {clearAndHome (); tillstånd = -1; outV = maxOutV/5.0; start = millis (); accepterad = falsk; } annars if (commandString == "fortsätt") {clearAndHome (); tillstånd = -1; outV = maxOutV/5.0; accepterad = falsk; } annat {bool ok = parse_param (commandString); om (! ok) {clearAndHome (); hjälp(); accepterad = falsk; Serial.println ("Comando desconhecido: '" + commandString + "'"); }} commandString = ""; om (accepterat) {clearAndHome (); hjälp(); Serial.println ("Ok!"); }} else {commandString+= v; if (state ==-10) {Serial.print (v); }}}}

Steg 4: Uma UI Personalizada

Uma UI Personalizada
Uma UI Personalizada

Para melhor acompanhamento e segurança, använd en ferramenta PuTTY, och defina no código fonte:

kitt = sant

Recomendações de definições:

  • Fönster

    • 61 Colunas e 20 Linhas
    • Visa scrollbar desativado
  • Fönster> Utseende

    Funktion: Lucida Console, 28px

Steg 5: Dúvidas?

Para abrir a guia de ajuda, siffror:

?

e pressione [ENTER]

OBS: Caso o Estado seja:

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

Rekommenderad: