![Arduino TDCS Super Simple. Stimulateur transcrânien à courant continu (tDCS) DIY : 5 étapes Arduino TDCS Super Simple. Stimulateur transcrânien à courant continu (tDCS) DIY : 5 étapes](https://i.howwhatproduce.com/images/003/image-7933-7-j.webp)
Table des matières:
2025 Auteur: John Day | [email protected]. Dernière modifié: 2025-01-23 14:46
![Arduino TDCS super simples. Stimulateur transcrânien à courant continu (tDCS) DIY Arduino TDCS super simples. Stimulateur transcrânien à courant continu (tDCS) DIY](https://i.howwhatproduce.com/images/003/image-7933-8-j.webp)
Para fazer este tDCS você precisará apenas de um arduino, résistance, condensateur et alguns cabosComponentes
-
Arduino
- Pino D13 como saída PWM (pode ser alterado).
- Pino A0 como entrada analógica (para feedback de corrente).
- Pino GND apena pour GND.
- Résistance (~470 Ω, mas provavelmente entre 300-1000 Ω funciona, você precisará alterar no código fonte)
- Condensateur (220 F). Servez para estabilizar os pulsos do PWM.
- Eletrodos de Esponja (Utilisez água salina para molhá-lo).
Fonction de Côme
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).
Étape 1: Saiba Mais
![Saiba Mais Saiba Mais](https://i.howwhatproduce.com/images/003/image-7933-9-j.webp)
Você deve ler mais sobre tDCS primeiro. Não é aprovado pelo FDA e pode ser prejudicial a sua saúde, principalmente se você não sabe nada sobre os efeitos colaterais, precauções e dentre outros…
Étape 2: Monte O Circuito Abaixo
![Monte O Circuito Abaixo Monte O Circuito Abaixo](https://i.howwhatproduce.com/images/003/image-7933-10-j.webp)
Não se esqueça das esponjas com água salina!
Étape 3: Installer O Código No Seu Arduino
Lembre-se de alterar comme configurações e 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 commandos, troque o No Line Ending para Carriage Return.
O código fonte + tutoriel também podem ser encontrados no repositório:
Code:
const Chaîne ver = "2.0m"; //PARAMETRES MATERIELS const int analogInPin = A0; // Entrada do Analógico const int analogOutPin = 13; // Saida D13 padrão float maxOutV = 5.0; // Un voltagem de saída PWM padrão do Arduino [V] float maxRefInV = 1.1; // Reference à voltagem analógica [V] float R = 470,0; // Resistencia da corrente [Ohm]
//PARAMETRES CONFIGURABLES
traceur booléen = faux; // 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 (Não altere caso não saiba o que está fazendo!)
//INIT GLOBAUX
état 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; // Tensionm int debounced_state = 0; int zeros_len = 0; float lissé_mA=0;
String commandString = ""; //pour l'interface de ligne de commande
//AIDE DE RÉTROACTION
float computeOutVoltage(float V, float new_mA){ if(abs(new_mA-target_mA)maxOutV){ state = -1; // resistência muito alta -> cerebro não encontrado? renvoie maxOutV; //retourner maxOutV/5.0; // para segurança } état = 0; renvoie 0,1*nouveau_V+0,9*V; //retourne nouveau_V; }
int convertVtoOutputValue(float V){
return contrainte(int(V/maxOutV*255), 0, 255); }
float sensorValue2mA(int sensorValue){
float sensorVoltage = sensorValue/1023.0*maxRefInV; float sensor_mA = sensorVoltage/R*1000.0; retour sensor_mA; }
int debounced_state_compute(int state){
si (état 5) renvoie 0; } renvoie 1; }
début long non signé, finc;
void process_feedback(){ int sensorValue = analogRead(analogInPin); float new_mA = sensorValue2mA(sensorValue); lissé_mA = 0,2*nouveau_mA+0,8*lissé_mA; flotteur V = outV; outV = calculateOutVoltage(V, new_mA); analogWrite(analogOutPin, convertVtoOutputValue(outV)); debounced_state = debounced_state_compute(state); // Exibir n'informe aucune CLI endc = (millis()-start)/1000; Chaîne tv = "[", ttm = "mA/", tsm = "V, ", ts = "mA] | Estado: ", h = " | Tempo: ", s = ":", leadM = "", leadS = "", plotT = "Cible: ", plotmA = "\tSmoothed MA: ", plotMin = "\tMin: ", tempo; tmin long non signé = endc/60-((endc/60)%1); // Formatage if (endc%60<10) leadS = "0"; si (tmin=0) ts = ts + "+"; // Paramétrer automatiquement if (tmin>maxmin) stop_device(); Chaîne txt; if (traceur) txt = plotT + target_mA + plotMin + "0" + plotmA + smoothed_mA; sinon 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);
// attend 2 millisecondes avant la prochaine boucle
// pour que le convertisseur analogique-numérique se règle // après la dernière lecture: delay(5); }
void stop_device(){
état = -10; analogWrite(analogOutPin, 0); clearAndHome(); Serial.println("Sessão tDCS interrompida"); Serial.println("--------------------------"); aider(); }
//AIDE CLIENT
void clearAndHome() { Serial.write(27); Serial.print("[2J"); // limpa a tela Serial.write(27); // ESC Serial.print("[H"); // \r if (!putty) pour (int i = 0; i<=30; i++) Serial.println(""); }
annuler l'aide (){
Serial.println("tDSC arduino, ver "+ver); Serial.println("'?' - ajuda"); Serial.println("'max_time ' - temporisation maximale (em minutos)"); Serial.println("'target_mA ' - atteindre la cible (mA)"); Serial.println("'epsilon_mA ' - ualiza o epsilon_mA (mA)"); Serial.println("'R ' - permet de résister au matériel (Ohm)"); Serial.println("'putty ' - permet de formater l'application pour PuTTY"); Serial.println("'stop' - pour une estimation"); Serial.println("'restart' - inicia/reinicia a estimulação & o timer"); Serial.println("'continue' - continue une estimation"); 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(' '); if(spacePos<=0) renvoie faux; Commande de chaîne = cmdString.substring(0, spacePos); Chaîne fval = cmdString.substring(spacePos+1); if(commande=="putty") if (fval=="true"){ putty = true; renvoie vrai; } else if (fval=="false"){ putty = false; renvoie vrai; } float val = fval.toFloat(); if(command=="target_mA"){ if(val100.0){ return false; } cible_mA = val; clearAndHome(); aider(); } else if(command=="epsilon_mA"){ if(val0.3){ return false; } epsilon_mA = val; clearAndHome(); aider(); } else if(commande=="R"){ R = val; clearAndHome(); aider(); } else if(command=="max_time"){ maxmin = val; clearAndHome(); aider(); }autre{ renvoie faux; } renvoie vrai; }
//RÉGLAGE ET BOUCLE PRINCIPALE
void setup() { Serial.begin(115200); analogReference(INTERNE); //1.1 V Serial.print("Sessão iniciada!"); début = millis(); } void loop(){ if(state!=-10){ process_feedback(); } if (Serial.available() > 0){ char v = Serial.read(); if (byte(v) == 13){ // Retour chariot bool accepté = true; if (commandString == "?" || commandString == "stop"){ stop_device(); } else if (commandString == "restart"){ clearAndHome(); état = -1; outV = maxOutV/5,0; début = millis(); accepté = faux; } else if (commandString == "continue"){ clearAndHome(); état = -1; outV = maxOutV/5,0; accepté = faux; }else{ bool ok = parse_param(commandString); if(!ok){ clearAndHome(); aider(); accepté = faux; Serial.println("Comando desconhecido: '" + chaîne_commande + "'"); } } chaîne_commande = ""; if (accepté){ clearAndHome(); aider(); Serial.println("Ok!"); } }else{ commandString+=v; if(state==-10){ Serial.print(v); } } } }
Étape 4: Uma UI Personalizada
![Uma UI Personalizada Uma UI Personalizada](https://i.howwhatproduce.com/images/003/image-7933-11-j.webp)
Pour melhor acompanhamento e segurança, use a ferramenta PuTTY, e defina no código fonte:
mastic = vrai
Définitions recommandées:
-
Fenêtre
- 61 Colunas et 20 Linhas
- Afficher la barre de défilement désactivée
-
Fenêtre > Apparence
Fonte: Console Lucida, 28px
Étape 5: Duvidas ?
Pour ouvrir une guia de ajuda, digite:
?
e pressione [ENTRER]
OBS: Caso o Estado seja:
-1 -> Cérebro não identificado (corrente aberta)+0 -> Ajustando voltagem+1 -> Tudo certo, tDCS funcionando
Conseillé:
Comment contrôler un moteur à courant continu avec L298n et Arduino : 5 étapes
![Comment contrôler un moteur à courant continu avec L298n et Arduino : 5 étapes Comment contrôler un moteur à courant continu avec L298n et Arduino : 5 étapes](https://i.howwhatproduce.com/images/001/image-1866-j.webp)
Comment contrôler le moteur à courant continu avec L298n et Arduino : Bonjour à tous. Présentons-moi. Je m'appelle Dimitris et je viens de Grèce. J'aime beaucoup Arduino parce que c'est une carte intelligente. Je vais essayer de décrire du mieux que je peux cette instructable afin de faire par n'importe qui. Alors commençons
La différence entre (courant alternatif et courant continu): 13 étapes
![La différence entre (courant alternatif et courant continu): 13 étapes La différence entre (courant alternatif et courant continu): 13 étapes](https://i.howwhatproduce.com/images/001/image-2985-8-j.webp)
La différence entre (courant alternatif et courant continu) : Tout le monde sait que l'électricité est principalement du courant continu, mais qu'en est-il d'un autre type d'électricité ? Connaissez-vous Ac ? Que signifie AC ? Est-il utilisable alors DC? Dans cette étude, nous connaîtrons la différence entre les types d'électricité, les sources, les applications
Projets amusants avec le kit Super Start Elegoo Uno R3 - Commande par joystick pour moteur à courant continu : 4 étapes
![Projets amusants avec le kit Super Start Elegoo Uno R3 - Commande par joystick pour moteur à courant continu : 4 étapes Projets amusants avec le kit Super Start Elegoo Uno R3 - Commande par joystick pour moteur à courant continu : 4 étapes](https://i.howwhatproduce.com/images/004/image-11903-6-j.webp)
Projets amusants avec Elegoo Uno R3 Super Start Kit - Joystick Control for DC Motor: Dans ce Instructables, je vais essayer de contrôler la direction et la vitesse d'un moteur DC par un joystick à l'aide d'Arduino, utiliser les composants du Kit Super Start Elegoo Uno R3 disponible sur Amazon.com
Moteur à courant continu DEF Eindopdracht DIY: 5 étapes
![Moteur à courant continu DEF Eindopdracht DIY: 5 étapes Moteur à courant continu DEF Eindopdracht DIY: 5 étapes](https://i.howwhatproduce.com/images/003/image-6821-45-j.webp)
DEF Eindopdracht DIY DC Motor: Dit is hoe het eindproduct eruit ziet. Le moteur à courant continu est aangesloten aan een Arduino die als voeding dient
Fabriquer un générateur à courant continu à aimant à partir d'un moteur de mélangeur mort DIY: 3 étapes (avec photos)
![Fabriquer un générateur à courant continu à aimant à partir d'un moteur de mélangeur mort DIY: 3 étapes (avec photos) Fabriquer un générateur à courant continu à aimant à partir d'un moteur de mélangeur mort DIY: 3 étapes (avec photos)](https://i.howwhatproduce.com/images/001/image-1032-97-j.webp)
Faire un générateur de courant continu à aimant à partir d'un moteur de mélangeur mort DIY : Salut ! Remarque : Cette méthode n'est applicable que si les bobines de champ d'un moteur universel sont brûlées