Taula de continguts:
- Pas 1: Saiba Mais
- Pas 2: Monte O Circuito Abaixo
- Step 3: Instale O Code No Seu Arduino
- Pas 4: Uma UI personalitzada
- Pas 5: Dúvidas?
Vídeo: Arduino TDCS Super Simples. Bricolatge estimulador de corrent continu transcranial (tDCS): 5 passos
2024 Autora: John Day | [email protected]. Última modificació: 2024-01-30 08:14
Per a fer aquest tDCS es precisarà apenas d'un arduino, resistor, condensador i alguns cabos
-
Arduino
- Pino D13 com a saída PWM (pot ser alterat).
- Pino A0 com a entrada analògica (per a retroalimentació de corrent).
- Pino GND apenas para GND.
- Resistor (~ 470 Ω, més provavelment entre 300-1000 Ω funciona, es precisarà alterar sense codi font)
- Condensador (220 μF). Serveix per estabilitzar els polsos de PWM.
- Eletrodos de Esponja (Use água salina para molhá-lo).
Com funciona
O Arduino calcula a corrente padrão (can ser alterado) que passará pelo seu cérebro apenas por mudar a voltagem de saída. També podeu canviar el valor de target_mA pelo serial CLI (Console).
Pas 1: Saiba Mais
Você deve ler mais sobre tDCS primer. No és aprovat pel pèl FDA i pots ser perjudicial per a la seva salut, principalment no es pot saber res sobre els efeitos colaterais, precauções e dentre outros …
Pas 2: Monte O Circuito Abaixo
Não se esqueça das esponjas com água salina!
Step 3: Instale O Code No Seu Arduino
Lembre-se alterar as configurações i parametros na area de HARDWARE PARAMS i CONFIGURABLE PARAMS.
També s'ha de canviar o canviar el número de sèrie per a: 115200 per a poder veure el resultat.
Per executar comandos, trets o No Line Ending per a Carriage Return.
O codi font + tutorial també podem trobar-nos sense repositori:
Codi:
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]
// PARAMS CONFIGURABLES
plotter bool = fals; // Definició: true, caso esteja using o Serial plotter bool putty = false; // Definició: true, cas que es faci servir o PuTTT (pot ser modificat sense CLI) int maxmin = 30; // Tempo (em minutos) necessário para desligar [Min] float target_mA = 2.73; // Essa és a corrent que passarà els seus cabells !!! [mA] float epsilon_mA = 0,03; // Diferència màxima entre un corrent real i o target_mA (No tinc cas no tinc saiba o que està fent!)
// INIT GLOBALS
estat int = 1; / * -1 - Cérebro no identificat 0 - Voltagem sendo alterada per definir a current padrão 1 - Tudo certo. Você esta na corrente definida -10 - Voltagem desligada * / float outV = maxOutV; // Voltagem int debowed_state = 0; int zeros_len = 0; float smoothed_mA = 0;
String commandString = ""; // per a CLI
// AJUDES DE FEEDBACK
float computeOutVoltage (float V, float new_mA) {if (abs (new_mA-target_mA) maxOutV) {state = -1; // resistência muito alta -> cérebro no trobat? retorn maxOutV; // torna maxOutV / 5.0; // para segurança} state = 0; retorna 0,1 * nou_V + 0,9 * V; // torna nou_V; }
int convertVtoOutputValue (float V) {
restringir retorn (int (V / maxOutV * 255), 0, 255); }
float sensorValue2mA (int sensorValue) {
float sensorVoltage = sensorValue / 1023.0 * maxRefInV; float sensor_mA = sensorVoltage / R * 1000.0; retorn sensor_mA; }
int deburred_state_compute (estat int) {
if (estat 5) retorna 0; } retorn 1; }
inici llarg sense signar, endc;
void process_feedback () {int sensorValue = analogRead (analogInPin); float new_mA = sensorValue2mA (sensorValue); smoothed_mA = 0,2 * new_mA + 0,8 * smoothed_mA; flotador V = outV; outV = computeOutVoltage (V, new_mA); analogWrite (analogOutPin, convertVtoOutputValue (outV)); debounced_state = debounced_state_compute (estat); // 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 = "\ t MA smoothed:", plotMin = "\ tMin:", tempo; unsigned long tmin = endc / 60 - ((endc / 60)% 1); // Formatação if (endc% 60 <10) leadS = "0"; if (tmin = 0) ts = ts + "+"; // Parar automaticamente if (tmin> maxmin) stop_device (); Txt de cadena; if (plotter) txt = plotT + target_mA + plotMin + "0" + plotmA + smoothed_mA; else txt = tv + V + tsm + smoothed_mA + ttm + target_mA + ts + debused_state + h + tempo; if (massilla) Serial.print ("\ r / e [? 25l" + txt); else Serial.println (txt);
// espereu 2 mil·lisegons abans del següent bucle
// perquè el convertidor analògic-digital es resolgui // després de la darrera lectura: delay (5); }
void stop_device () {
estat = -10; analogWrite (analogOutPin, 0); clearAndHome (); Serial.println ("Sessão tDCS interrompida"); Serial.println ("------------------------"); ajudar (); }
// AJUDES CLI
void clearAndHome () {Serial.write (27); Serial.print ("[2J"); // limpa a tela Serial.write (27); // ESC Serial.print ("[H"); // / r if (! putty) for (int i = 0; i <= 30; i ++) Serial.println (""); }
ajuda nul·la () {
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': actualitza la resistència del maquinari (Ohm)"); Serial.println ("'putty' - muda a formatação de saída pro PuTTY"); Serial.println ("'stop' - per a estimulação"); Serial.println ("'restart' - inicia / reinicia a estimulação & o timer"); Serial.println ("'continue' - 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 (''); if (spacePos <= 0) retorna false; Ordre de cadena = cmdString.substring (0, spacePos); Cadena fval = cmdString.substring (spacePos + 1); if (ordre == "massilla") if (fval == "true") {massilla = true; tornar cert; } else if (fval == "false") {massilla = false; tornar cert; } float val = fval.toFloat (); if (ordre == "target_mA") {if (val100.0) {return false; } target_mA = val; clearAndHome (); ajudar (); } else if (ordre == "epsilon_mA") {if (val0.3) {return false; } epsilon_mA = val; clearAndHome (); ajudar (); } else if (ordre == "R") {R = val; clearAndHome (); ajudar (); } else if (ordre == "max_time") {maxmin = val; clearAndHome (); ajudar (); } else {return false; } tornar cert; }
// CONFIGURACIÓ I LOOP PRINCIPAL
configuració nul·la () {Serial.begin (115200); analogReference (INTERN); //1.1 V Serial.print ("Sessão iniciada!"); inici = millis (); } bucle buit () {if (state! = - 10) {process_feedback (); } if (Serial.available ()> 0) {char v = Serial.read (); if (byte (v) == 13) {// Cool return bool acceptable = true; if (commandString == "?" || commandString == "stop") {stop_device (); } else if (commandString == "reinicia") {clearAndHome (); estat = -1; outV = maxOutV / 5.0; inici = millis (); acceptat = fals; } else if (commandString == "continuar") {clearAndHome (); estat = -1; outV = maxOutV / 5.0; acceptat = fals; } else {bool ok = parse_param (commandString); if (! ok) {clearAndHome (); ajudar (); acceptat = fals; Serial.println ("Comando desconhecido: '" + commandString + "'"); }} commandString = ""; if (acceptat) {clearAndHome (); ajudar (); Serial.println ("Ok!"); }} else {commandString + = v; if (state == - 10) {Serial.print (v); }}}}
Pas 4: Uma UI personalitzada
Per a més acompanyament i seguretat, utilitzeu una ferramenta PuTTY, i definiu un codi font:
massilla = cert
Recomanacions de definicions:
- Finestra
- 61 Colunas e 20 Linhas
- Mostra la barra de desplaçament desativada
- Finestra> Aparença
Fonte: Lucida Console, 28 px
Pas 5: Dúvidas?
Per obrir una guia d'ajuda, digite:
?
e pressione [ENTER]
OBS: Cas o Estado seja:
-1 -> Cérebro no identificat (corrent oberta) +0 -> Ajustant voltatge + 1 -> Tot cert, tDCS funcionant
Recomanat:
Com controlar el motor de corrent continu amb L298n i Arduino: 5 passos
Com controlar el motor de corrent continu amb L298n i Arduino: Hola a tothom. Presentem-me. Em dic Dimitris i sóc de Grècia. M'encanta Arduino perquè és una placa intel·ligent. Intentaré descriure el millor que puc, que sigui instructiu per fer-ho qualsevol. Comencem, doncs
Motor de corrent continu Control de gestos manuals Velocitat i direcció mitjançant Arduino: 8 passos
Control de gestos de mà amb velocitat i direcció de CC MOTOR mitjançant Arduino: en aquest tutorial aprendrem a controlar un motor de CC amb gestos de mans mitjançant arduino i Visuino. Mireu el vídeo. Consulteu també això: Tutorial sobre gestos de mans
Potència de corrent continu mitjançant Arduino Nano (0-16V / 0-20A): 3 passos
Wattímetre de CC mitjançant Arduino Nano (0-16V / 0-20A): Hola amics, estic aquí per mostrar-vos un wattímetre de CC que es pot fer fàcilment mitjançant Arduino nano. Un dels principals problemes que m’afrontava com a aficionat a l’electrònica és conèixer la quantitat de corrent i tensió aplicats als circuits de càrrega que jo
La diferència entre (corrent altern i corrent continu): 13 passos
La diferència entre (corrent altern i corrent continu): tothom sap que l’electricitat és majoritàriament corrent continu, però, què us sembla un altre tipus d’electricitat? Coneixeu Ac? Què significa AC? Es pot utilitzar llavors DC? En aquest estudi coneixerem la diferència entre els tipus d’electricitat, fonts, aplicacions
Interfície del motor de corrent continu sense escombretes (BLDC) amb Arduino: 4 passos (amb imatges)
Interfície del motor CC sense escombretes (BLDC) amb Arduino: es tracta d’un tutorial sobre com connectar i executar un motor CC sense escombretes mitjançant Arduino. Si teniu alguna pregunta o comentari, responeu per correu electrònic a rautmithil [at] gmail [dot] com. També podeu posar-vos en contacte amb mi @mithilraut a twitter.Per