Πίνακας περιεχομένων:
- Βήμα 1: Saiba Mais
- Βήμα 2: Monte O Circuito Abaixo
- Βήμα 3: Instale O Código No Seu Arduino
- Βήμα 4: Uma UI Personalizada
- Βήμα 5: Dúvidas;
Βίντεο: Arduino TDCS Super Simples. DIY διακρανιακός διεγέρτης συνεχούς ρεύματος (tDCS): 5 βήματα
2024 Συγγραφέας: John Day | [email protected]. Τελευταία τροποποίηση: 2024-01-30 08:35
Para fazer este tDCS você precisará apenas de um arduino, resistor, capacitor e alguns cabosComponentes
-
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.
- Αντίσταση (~ 470 Ω, mas provavelmente entre 300-1000 Ω funciona, você precisará alterar no código fonte)
- Πυκνωτής (220 μF). Σερβίρετε για το estabilizar os pulsos do PWM.
- 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
Você deve ler mais sobre tDCS primeiro. Δεν υπάρχει προειδοποίηση από το FDA και τον κωδικό πρόσβασης που μπορεί να επηρεάσει αρνητικά, με κύριο λόγο την προειδοποίηση και την προώθηση των προτύπων και των εξόδων…
Βήμα 2: 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
Παρακαλώ επιλέξτε, χρησιμοποιήστε ένα 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
Συνιστάται:
Ισχυρός ψηφιακός ρυθμιστής εναλλασσόμενου ρεύματος με χρήση STM32: 15 βήματα (με εικόνες)
Ισχυρό ψηφιακό ρυθμιστή εναλλασσόμενου ρεύματος χρησιμοποιώντας STM32: Του Hesam Moshiri, [email protected] Τα φορτία AC ζουν μαζί μας! Επειδή βρίσκονται παντού γύρω μας και τουλάχιστον οι οικιακές συσκευές παρέχονται με την κύρια τροφοδοσία. Πολλοί τύποι βιομηχανικού εξοπλισμού τροφοδοτούνται επίσης με το μονοφασικό 220V-AC
Διακοπή ρεύματος εναλλασσόμενου ρεύματος, Φωτισμός διαδρομής LED με μπαταρία: 8 βήματα
Διακοπή ρεύματος AC, Φωτεινή ένδειξη LED Path με μπαταρία: Κατά τη διάρκεια μιας πρόσφατης διακοπής ρεύματος, στα πιο σκοτεινά βάθη του υπογείου μου … ένα φως θα ήταν πολύ βολικό. Δυστυχώς ο φακός μου ήταν μερικά σκοτεινά δωμάτια μακριά. Ανακάτεψα λίγο, βρήκα το φως και πήρα το δρόμο για το οικογενειακό δωμάτιο. Το wi μου
Ασύρματος ανιχνευτής ρεύματος AC: 7 βήματα (με εικόνες)
Ασύρματος ανιχνευτής ρεύματος εναλλασσόμενου ρεύματος: Ενώ έκανα τον προηγούμενο Instructable (εύκολος αισθητήρας εγγύτητας υπέρυθρων) κατάλαβα μερικά πράγματα σχετικά με τη χρήση 2 τρανζίστορ στη σειρά για ενίσχυση ενός πολύ αδύναμου σήματος. Σε αυτό το Εγχειρίδιο θα επεκτείνω αυτήν την αρχή που ονομάζεται επίσης & quo
Γραμμικός ρυθμιστής ρεύματος απλής ισχύος LED, αναθεωρημένος & διευκρινισμένος: 3 βήματα
Γραμμικός ρυθμιστής ρεύματος απλής ισχύος LED, αναθεωρημένος και διευκρινισμένος: Αυτό το Instructable είναι ουσιαστικά μια επανάληψη του κυκλώματος του γραμμικού ρυθμιστή ρεύματος Dan. Η εκδοχή του είναι πολύ καλή, φυσικά, αλλά στερείται κάτι με τρόπο σαφήνειας. Αυτή είναι η προσπάθειά μου να το αντιμετωπίσω. Αν καταλαβαίνετε και μπορείτε να δημιουργήσετε την έκδοση του Dan
Κινητήρας συνεχούς περιστροφής σερβο (CRS) με τηλεχειριστήριο: 8 βήματα
Κινητήρας συνεχούς περιστροφής Servo (CRS) με έλεγχο Telegram: Σε αυτό το διδακτικό θα σας διδάξω πώς να ελέγχετε ένα CRS μέσω τηλεγραφήματος. Για αυτό το διδακτικό θα χρειαστείτε μερικά πράγματα. Θα δουλέψω σε ένα NodeMCU 1.0 (μονάδα ESP-12E). Αυτό μπορεί να λειτουργήσει σε άλλα σύνορα Arduino, απλά πρέπει να βρείτε το επαγγελματικό