Πίνακας περιεχομένων:

Arduino TDCS Super Simples. DIY διακρανιακός διεγέρτης συνεχούς ρεύματος (tDCS): 5 βήματα
Arduino TDCS Super Simples. DIY διακρανιακός διεγέρτης συνεχούς ρεύματος (tDCS): 5 βήματα

Βίντεο: Arduino TDCS Super Simples. DIY διακρανιακός διεγέρτης συνεχούς ρεύματος (tDCS): 5 βήματα

Βίντεο: Arduino TDCS Super Simples. DIY διακρανιακός διεγέρτης συνεχούς ρεύματος (tDCS): 5 βήματα
Βίντεο: Can you open this puzzle box?! #puzzle #puzzles #brainteaser #brainteasers #shorts 2024, Ιούλιος
Anonim
Arduino TDCS Super Simples. DIY διακρανιακού διεγέρτη συνεχούς ρεύματος (tDCS)
Arduino TDCS Super Simples. DIY διακρανιακού διεγέρτη συνεχούς ρεύματος (tDCS)

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

  1. Arduino

    • Pino D13 como saída PWM (pode ser alterado).
    • Pino A0 como entrada analógica (para feedback de corrente).
    • Pino GND apenas para GND.
  2. Αντίσταση (~ 470 Ω, mas provavelmente entre 300-1000 Ω funciona, você precisará alterar no código fonte)
  3. Πυκνωτής (220 μF). Σερβίρετε για το estabilizar os pulsos do PWM.
  4. Eletrodos de Esponja (Χρησιμοποιήστε á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: Saiba Mais

Saiba Mais
Saiba Mais

Você deve ler mais sobre tDCS primeiro. Δεν υπάρχει προειδοποίηση από το FDA και τον κωδικό πρόσβασης που μπορεί να επηρεάσει αρνητικά, με κύριο λόγο την προειδοποίηση και την προώθηση των προτύπων και των εξόδων…

Βήμα 2: Monte O Circuito Abaixo

Monte O Circuito Abaixo
Monte O Circuito Abaixo

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

Βήμα 3: Instale O Código No Seu Arduino

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

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

Para εκτελεστικά comandos, troque o No Line Ending για Carriage Return.

O código fonte + φροντιστήριο 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]

// ΡΥΘΜΙΖΟΜΕΝΕΣ ΠΑΡΑΛΑΜΕΣ

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) needá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 κατάσταση = 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 debounced_state = 0; int zeros_len = 0; float smoothed_mA = 0;

String commandString = ""; // για CLI

// ΒΟΗΘΟΙ ΑΝΑΒΟΛΗΣ

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; επιστροφή maxOutV? // επιστροφή maxOutV/5.0; // para segurança} κατάσταση = 0; επιστροφή 0.1*new_V+0.9*V; // επιστροφή new_V; }

int convertVtoOutputValue (float V) {

περιορισμός επιστροφής (int (V/maxOutV*255), 0, 255); }

float sensorValue2mA (int sensorValue) {

float sensorVoltage = sensorValue/1023.0*maxRefInV; float sensor_mA = sensorVoltage/R*1000.0; αισθητήρας επιστροφής_mA; }

int debounced_state_compute (κατάσταση int) {

εάν (κατάσταση 5) επιστρέφει 0 · } επιστροφή 1; }

ανυπόγραφο μακρύ ξεκίνημα, τελ.

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 (κατάσταση)? // Exibir informações no CLI endc = (millis ()-start)/1000; String tv = "[", ttm = "mA/", tsm = "V,", ts = "mA] | Estado:", h = "| Tempo:", s = ":", leadM = "", leadS = "", plotT = "Στόχος:", plotmA = "\ tΜελαττωμένο ΜΑ:", plotMin = "\ tΜιν:", tempo; ανυπόγραφο μακρύ tmin = endc/60-((endc/60)%1); // Μορφοποίηση αν (τέλος%60 <10) leadS = "0"; εάν (tmin = 0) ts = ts + " +"; // Parar automaticamente if (tmin> maxmin) stop_device (); Συμβολοσειρά txt; if (plotter) txt = plotT + target_mA + plotMin + "0" + plotmA + smoothed_mA; else txt = tv + V + tsm + smoothed_mA + ttm + target_mA + ts + debounced_state + h + tempo? if (putty) Serial.print ("\ r / e [? 25l" + txt); else Serial.println (txt);

// περιμένετε 2 χιλιοστά του δευτερολέπτου πριν από τον επόμενο βρόχο

// για να εγκατασταθεί ο μετατροπέας αναλογικού σε ψηφιακό // μετά την τελευταία ανάγνωση: καθυστέρηση (5); }

void stop_device () {

κατάσταση = -10; analogWrite (analogOutPin, 0); clearAndHome (); Serial.println ("Sessão tDCS interrompida"); Serial.println ("------------------------"); βοήθεια(); }

// CLI HELPERS

void clearAndHome () {Serial.write (27); Serial.print ("[2J"); // limpa a tela Serial.write (27); // ESC Serial.print ("[H"); // / r εάν (! στόκος) για (int i = 0; i <= 30; i ++) Serial.println (""); }

άκυρη βοήθεια () {

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 resistencia do hardware (Ohm)"); Serial.println ("'putty' - muda a formatação de saída pro PuTTY"); Serial.println ("'stop' - para a εκτιμήσεις"); Serial.println ("'επανεκκίνηση' - inicia/reinicia a εκτιμήσεις & o χρονοδιακόπτης"); Serial.println ("'συνέχεια' - Continua a estestulação"); Serial.print ("\ n / rΕκκίνηση: / 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 (''); if (spacePos <= 0) επιστρέφει false Εντολή συμβολοσειράς = cmdString.substring (0, spacePos); String fval = cmdString.substring (spacePos+1); if (εντολή == "putty") if (fval == "true") {putty = true? επιστροφή αληθινός? } else if (fval == "false") {putty = false? επιστροφή αληθινός? } float val = fval.toFloat (); if (εντολή == "target_mA") {if (val100.0) {return false? } target_mA = val; clearAndHome (); βοήθεια(); } else if (εντολή == "epsilon_mA") {if (val0.3) {return false? } epsilon_mA = val; clearAndHome (); βοήθεια(); } else if (εντολή == "R") {R = val; clearAndHome (); βοήθεια(); } else if (εντολή == "max_time") {maxmin = val; clearAndHome (); βοήθεια(); } else {return false? } return true? }

// ΡΥΘΜΙΣΗ ΚΑΙ ΚΥΡΙΟ ΒΛΕΜΑ

void setup () {Serial.begin (115200); analogReference (ΕΣΩΤΕΡΙΚΟ); //1.1 V Serial.print ("Sessão iniciada!"); έναρξη = millis (); } void loop () {if (κατάσταση! =-10) {process_feedback (); } if (Serial.available ()> 0) {char v = Serial.read (); αν (byte (v) == 13) {// Bool επιστροφής μεταφοράς αποδεκτό = true if (commandString == "?" || commandString == "stop") {stop_device (); } else if (commandString == "επανεκκίνηση") {clearAndHome (); κατάσταση = -1; outV = maxOutV/5.0; έναρξη = millis (); αποδεκτό = ψευδές? } else if (commandString == "συνέχεια") {clearAndHome (); κατάσταση = -1; outV = maxOutV/5.0; αποδεκτό = ψευδές? } else {bool ok = parse_param (commandString); εάν (! εντάξει) {clearAndHome (); βοήθεια(); αποδεκτό = ψευδές? Serial.println ("Comando desconhecido: '" + commandString + "'"); }} commandString = ""; εάν (αποδεκτό) {clearAndHome (); βοήθεια(); Serial.println ("Εντάξει!"); }} else {commandString+= v; if (κατάσταση ==-10) {Serial.print (v); }}}}

Βήμα 4: Uma UI Personalizada

Uma UI Personalizada
Uma UI Personalizada

Παρακαλώ επιλέξτε, χρησιμοποιήστε ένα ferramenta PuTTY, και ορίστε κανένα código fonte:

στόκος = αλήθεια

Συνιστώμενοι ορισμοί:

  • Παράθυρο

    • 61 Colunas e 20 Linhas
    • Εμφάνιση επιθυμητής γραμμής κύλισης
  • Παράθυρο> Εμφάνιση

    Φόντο: Κονσόλα Lucida, 28 εικονοστοιχεία

Βήμα 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

Συνιστάται: