Cuprins:
- Pasul 1: Saiba Mais
- Pasul 2: Monte O Circuito Abaixo
- Pasul 3: Instalați O Cod No Seu Arduino
- Pasul 4: Uma UI Personalizată
- Pasul 5: Dúvidas?
Video: Arduino TDCS Super Simples. Stimulator de curent direct transcranian (tDCS) DIY: 5 pași
2024 Autor: John Day | [email protected]. Modificat ultima dată: 2024-01-30 11:44
Pentru a face acest tDCS vocea precisă apenas de um arduino, rezistor, condensator și unele cabosComponentes
-
Arduino
- Pino D13 ca saída PWM (se poate modifica).
- Pino A0 como entrada analógica (pentru feedback de curent).
- Pino GND apenas para GND.
- Resistor (~ 470 Ω, mai provavelmente între 300-1000 Ω funcționează, se precizează modificarea codului sursă)
- Condensator (220 μF). Serve pentru a stabiliza os pulsos do PWM.
- Eletrodos de Esponja (Use água salina para molhá-lo).
Como works
O Arduino calculează un curent padron (poate fi modificat) care va trece părul său cérebro apenas por mudar a voltagem de saída. Vocați și voi să modificați valoarea valorii target_mA pelo serial CLI (Console).
Pasul 1: Saiba Mais
Você deve ler mais despre tDCS primul. Nu este aprovizionat cu părul FDA și poți fi prejudiciat pentru sănătatea sa, în principal, nu știi nimic despre efeitos colaterais, precauções e dentre outros …
Pasul 2: Monte O Circuito Abaixo
Não se esqueça das esponjas com água salina!
Pasul 3: Instalați O Cod No Seu Arduino
Lembre-se de alterar as configurações și parametros na area de HARDWARE PARAMS și CONFIGURABLE PARAMS.
Voce prea trebuie să schimbați sau să ratați seria pentru: 115200 pentru puterea ver rezultatului.
Pentru executarea comenzilor, troque o No Line Ending pentru Carriage Return.
O cod font + tutorial putem fi găsite și fără depozit:
Cod:
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]
// PARAMURI CONFIGURABILE
plotter bool = fals; // Defina: true, caso esteja using o Serial plotter bool putty = false; // Defina: true, caso esteja using o PuTTT (pode ser alterado no CLI) int maxmin = 30; // Tempo (em minutos) necesário para desligar [Min] float target_mA = 2.73; // Essa é a corrente care passará pelo seu cérebro !!! [mA] floare epsilon_mA = 0,03; // Diferența maximă între curent real și o target_mA (Nu altere caz nu saiba o că este fazând!)
// INIT GLOBALS
int state = 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 debowed_state = 0; int zeros_len = 0; float smoothed_mA = 0;
String commandString = ""; // pentru CLI
// AJUTORII FEEDBACK
float computeOutVoltage (float V, float new_mA) {if (abs (new_mA-target_mA) maxOutV) {state = -1; // resistência muito alta -> cérebro não found? returnează maxOutV; // returnează maxOutV / 5.0; // para segurança} state = 0; returnează 0,1 * nou_V + 0,9 * V; // returnează nou_V; }
int convertVtoOutputValue (float V) {
return constrain (int (V / maxOutV * 255), 0, 255); }
float sensorValue2mA (int sensorValue) {
float sensorVoltage = sensorValue / 1023.0 * maxRefInV; float sensor_mA = sensorVoltage / R * 1000.0; retur senzor_mA; }
int debowed_state_compute (int state) {
if (stare 5) returnează 0; } returnează 1; }
inceput lung nesemnat, endc;
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 (state); // 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; nesemnat tmin lung = endc / 60 - ((endc / 60)% 1); // Formatação if (endc% 60 <10) leadS = "0"; if (tmin = 0) ts = ts + "+"; // Parar automat if (tmin> maxmin) stop_device (); String txt; if (plotter) txt = plotT + target_mA + plotMin + "0" + plotmA + smoothed_mA; else txt = tv + V + tsm + smooth_mA + ttm + target_mA + ts + debounced_state + h + tempo; if (chit) Serial.print ("\ r / e [? 25l" + txt); else Serial.println (txt);
// așteptați 2 milisecunde înainte de următoarea buclă
// pentru ca convertorul analog-digital să se stabilească // după ultima citire: delay (5); }
void stop_device () {
stare = -10; analogWrite (analogOutPin, 0); clearAndHome (); Serial.println ("Sessão tDCS interrompida"); Serial.println ("------------------------"); Ajutor(); }
// AJUTORII CLI
void clearAndHome () {Serial.write (27); Serial.print ("[2J"); // limpa a tela Serial.write (27); // ESC Serial.print ("[H"); // / r if (! chit) pentru (int i = 0; i <= 30; i ++) Serial.println (""); }
anulați ajutorul () {
Serial.println ("tDSC arduino, ver" + ver); Serial.println ("'?' - ajuda"); Serial.println ("'max_time' - atualiza o tempo maxim (em minutos)"); Serial.println ("'target_mA' - atualiza o target (mA)"); Serial.println ("'epsilon_mA' - atualiza o epsilon_mA (mA)"); Serial.println ("'R' - atualiza o rezistență la hardware (Ohm)"); Serial.println ("'putty' - muda a formatação de saída pro PuTTY"); Serial.println ("'stop' - pentru o estimare"); Serial.println ("'restart' - inicia / reinicia a estimulação & o timer"); Serial.println ("'continue' - continuă o estimare"); 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) returnează false; Comanda șir = cmdString.substring (0, spacePos); String fval = cmdString.substring (spacePos + 1); if (comanda == "chit") if (fval == "adevărat") {chit = adevărat; întoarce-te adevărat; } else if (fval == "false") {chit = false; întoarce-te adevărat; } float val = fval.toFloat (); if (comanda == "target_mA") {if (val100.0) {return false; } target_mA = val; clearAndHome (); Ajutor(); } else if (comanda == "epsilon_mA") {if (val0.3) {return false; } epsilon_mA = val; clearAndHome (); Ajutor(); } else if (comanda == "R") {R = val; clearAndHome (); Ajutor(); } else if (comanda == "max_time") {maxmin = val; clearAndHome (); Ajutor(); } else {return false; } returnează adevărat; }
// CONFIGURARE ȘI BUCLĂ PRINCIPALĂ
void setup () {Serial.begin (115200); analogReference (INTERN); //1.1 V Serial.print ("Sesiunea inițiată!"); start = milis (); } bucla void () {if (state! = - 10) {process_feedback (); } if (Serial.available ()> 0) {char v = Serial.read (); if (octet (v) == 13) {// Bool return car acceptat = adevărat; if (commandString == "?" || commandString == "stop") {stop_device (); } else if (commandString == "restart") {clearAndHome (); stare = -1; outV = maxOutV / 5.0; start = milis (); acceptat = fals; } else if (commandString == "continuare") {clearAndHome (); stare = -1; outV = maxOutV / 5.0; acceptat = fals; } else {bool ok = parse_param (commandString); if (! ok) {clearAndHome (); Ajutor(); acceptat = fals; Serial.println ("Comando desconhecido: '" + commandString + "'"); }} commandString = ""; if (acceptat) {clearAndHome (); Ajutor(); Serial.println („Ok!”); }} else {commandString + = v; if (state == - 10) {Serial.print (v); }}}}
Pasul 4: Uma UI Personalizată
Pentru o mai bună acompaniație și siguranță, utilizați un instrument PuTTY, și definiți un cod sursă:
chit = adevărat
Recomandări de definiții:
-
Fereastră
- 61 Colune și 20 Linhas
- Afișați bara de derulare desativado
-
Fereastră> Aspect
Fonte: Lucida Console, 28px
Pasul 5: Dúvidas?
Pentru a deschide o guia de ajută, digite:
?
e pressione [ENTER]
OBS: Caso o Estado seja:
-1 -> Cérebro não identificado (corrente aberta) +0 -> Ajustando voltagem + 1 -> Tudo certo, tDCS funcționând
Recomandat:
Diferența dintre (curent alternativ și curent continuu): 13 pași
Diferența dintre (curent alternativ și curent continuu): Toată lumea știe că electricitatea este în mare parte curent continuu, dar ce zici de un alt tip de electricitate? Cunoști Ac? Ce înseamnă AC? Este utilizabil atunci DC? În acest studiu vom cunoaște diferența dintre tipurile de electricitate, surse, aplicații
DIY Încărcare constantă în curent: 4 pași (cu imagini)
Încărcare constantă de curent DIY: În acest mic proiect vă voi arăta cum să realizați o sarcină de curent constantă reglabilă simplă. Un astfel de gadget este util dacă doriți să măsurați capacitatea bateriilor Li-Ion chinezești. Sau puteți testa cât de stabilă este sursa de alimentare cu o anumită sarcină
Driver de diodă laser DIY -- Sursa de curent constant: 6 pași (cu imagini)
Driver de diodă laser DIY || Sursa de curent constant: În acest proiect vă voi arăta cum am extras o diodă laser dintr-un arzător DVD care ar trebui să aibă puterea de a aprinde o potrivire. Pentru a alimenta corect dioda, voi demonstra, de asemenea, cum construiesc o sursă de curent constantă, care oferă o precizie
Soft Starter (limitator de curent de intrare) pentru încărcări de curent alternativ și continuu: 10 pași
Soft Starter (limitator de curent de intrare) pentru încărcări de curent alternativ și continuu: curentul de intrare / supratensiunea de pornire este curentul maxim de intrare instantanee tras de un dispozitiv electric la prima pornire. Curentul de pornire este mult mai mare decât curentul stării de echilibru al sarcinii și aceasta este sursa multor probleme, cum ar fi siguranța bl
Senzor de curent DIY pentru Arduino: 6 pași
Senzor de curent DIY pentru Arduino: Bună ziua, sper că te descurci bine și în acest tutorial îți voi arăta cum am creat un senzor de curent pentru Arduino folosind câteva componente electronice foarte de bază și un șunt de casă. Acest șunt poate gestiona cu ușurință magnitudinea mare a curentului, în jurul