Sadržaj:
- Korak 1: Saiba Mais
- Korak 2: Monte O Circuito Abaixo
- Korak 3: Instalirajte O Código No Seu Arduino
- Korak 4: Uma UI personalizacija
- Korak 5: Dúvidas?
Video: Arduino TDCS super jednostavni. Transkranijalni stimulator istosmjerne struje (tDCS) DIY: 5 koraka
2024 Autor: John Day | [email protected]. Zadnja izmjena: 2024-01-30 08:07
Za rad na tDCS -u, precizni apeni za um arduino, otpornik, kondenzator i kabine
-
Arduino
- Pino D13 je sa PWM -om (podešeni servera).
- Pino A0 kao uvod u analnu analizu (za povratnu informaciju).
- Pino GND apenas para GND.
- Otpornik (~ 470 Ω, masovna radna snaga 300-1000 Ω sa funkcijom, precizna izmjena zvuka bez kodiranog fonta)
- Kondenzator (220 μF). Služiti para estabilizar os pulsos do PWM.
- Eletrodos de Esponja (Koristite água salina para molhá-lo).
Como funciona
O Arduino računa a corrente padrão (pode ser alterado) que passará pelo seu cérebro apenas por mudar a voltagem de saída. Pozovite tambem da promijenite vrijednost ili vrijednost do target_mA pelo serijskog CLI -a (konzole).
Korak 1: Saiba Mais
Você deve ler mais sobre tDCS primeiro. Não é aprovado pelo FDA -e i podešavanje štetnih a sua saúde, principijelno se você não sabe nada sobre os efeitos colaterais, predostrožnosti i dentre outros…
Korak 2: Monte O Circuito Abaixo
Não se esqueça das esponjas com água salina!
Korak 3: Instalirajte O Código No Seu Arduino
Lembre-se de alterar as configurações and parametros in the area of HARDWARE PARAMS e CONFIGURABLE PARAMS.
Molimo vas da promijenite nivo izmjene ili dopunske stope do serijskog parametra: 115200 po podređenom rezultatu.
Za izvršne komande, trofej o Nema završetka linije za povratak prijevoza.
O codigo fonte + tutorial também podem ser encontrados no repositório:
Código:
const String ver = "2.0m"; // HARDVER PARAMS const int analogInPin = A0; // Entrada do Analógico const int analogOutPin = 13; // Saida D13 padrão float maxOutV = 5.0; // Napon od detekcije PWM padrão do Arduino [V] plovak maxRefInV = 1,1; // Referenca à napon m analógica [V] plovak R = 470,0; // Resistencia da corrente [Ohm]
// KONFIGURIRAJNI PARAMS
bool ploter = false; // Definicija: true, caso esteja usando o Serijski ploter bool putty = false; // Definirano: true, caso esteja usando o PuTTT (podešena alterado bez CLI) int maxmin = 30; // Tempo (em minutos) neophodni parametri za [Min] float target_mA = 2.73; // Essa é a corrente que passará pelo seu cérebro !!! [mA] plovak epsilon_mA = 0,03; // Diferença máxima entre a corrente real e or target_mA (Não altere caso não saiba o que está fazendo!)
// INIT GLOBALS
int stanje = 1; /* -1 - Identifikacijski broj 0 - Napon slanja izmjene za definiciju odgovarajućeg padra 1 - Tudo certo. Você esta na corrente definida -10 - Desigadacija napona */ float outV = maxOutV; // Voltagem int debounced_state = 0; int nule_len = 0; float smoothed_mA = 0;
String commandString = ""; // za CLI
// POMOĆNICI ZA POVRATNE POVRATKE
float computeOutVoltage (float V, float new_mA) {if (abs (new_mA -target_mA) maxOutV) {stanje = -1; // otporência muito alta -> cérebro não encontrado? return maxOutV; // vraća maxOutV/5.0; // para segurança} stanje = 0; povratak 0,1*novi_V+0,9*V; // vrati new_V; }
int convertVtoOutputValue (float V) {
return constrain (int (V/maxOutV*255), 0, 255); }
float sensorValue2mA (int sensorValue) {
plivajući senzorVoltage = sensorValue/1023.0*maxRefInV; plovak sensor_mA = napon osjetnika/R*1000,0; povratni senzor_mA; }
int debounced_state_compute (int stanje) {
if (stanje 5) vraća 0; } return 1; }
nepotpisani dugi početak, endc;
void process_feedback () {int sensorValue = analogRead (analogInPin); float new_mA = sensorValue2mA (sensorValue); smoothed_mA = 0,2*new_mA+0,8*smoothed_mA; plovak V = outV; outV = computeOutVoltage (V, novi_mA); analogWrite (analogOutPin, convertVtoOutputValue (outV)); debounced_state = debounced_state_compute (stanje); // Exibir informacije nema CLI endc = (millis ()-početak)/1000; String tv = "[", ttm = "mA/", tsm = "V,", ts = "mA] | Estado:", h = "| Tempo:", s = ":", leadM = "", leadS = "", plotT = "Cilj:", plotmA = "\ tSmoothed MA:", plotMin = "\ tMin:", tempo; bez potpisa dugo tmin = endc/60-((endc/60)%1); // Formatação if (endc%60 <10) leadS = "0"; if (tmin = 0) ts = ts + " +"; // Paramat automaticamente if (tmin> maxmin) stop_device (); String txt; if (ploter) 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 (kit) Serial.print ("\ r / e [? 25l" + txt); else Serial.println (txt);
// čekati 2 milisekunde prije sljedeće petlje
// da se analogno-digitalni pretvarač smiri // nakon posljednjeg očitanja: delay (5); }
void stop_device () {
stanje = -10; analogWrite (analogOutPin, 0); clearAndHome (); Serial.println ("Sessão tDCS interrompida"); Serial.println ("------------------------"); help (); }
// CLI HELPERS
void clearAndHome () {Serial.write (27); Serial.print ("[2J"); // limpa a tela Serial.write (27); // ESC Serial.print ("[H"); // / r if (! kit) za (int i = 0; i <= 30; i ++) Serial.println (""); }
void help () {
Serial.println ("tDSC arduino, ver"+ver); Serial.println ("'?' - ajuda"); Serial.println ("'max_time' - ažuriranje maksimalnog tempa (em minute)"); Serial.println ("'target_mA' - ažuriranje cilja (mA)"); Serial.println ("'epsilon_mA' - ažuriranje o epsilon_mA (mA)"); Serial.println ("'R' - postavljanje otpornosti na hardver (Ohm)"); Serial.println ("'kit" - mora oblikovati podatke o PuTTY "); Serial.println ("'stop' - para i estimulação"); Serial.println ("'restart' - inicia/reinicia estimulação & o timer"); Serial.println ("'continue' - continuea 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:"); Serijski.print (R); Serial.println ("Ohmi"); }
bool parse_param (String & cmdString) {
int spacePos = cmdString.indexOf (''); if (spacePos <= 0) return false; Naredba niza = cmdString.substring (0, spacePos); Niz fval = cmdString.substring (razmakPos+1); if (naredba == "kit") if (fval == "true") {putty = true; return true; } else if (fval == "false") {putty = false; return true; } float val = fval.toFloat (); if (naredba == "target_mA") {if (val100.0) {return false; } target_mA = val; clearAndHome (); help (); } else if (command == "epsilon_mA") {if (val0.3) {return false; } epsilon_mA = val; clearAndHome (); help (); } else if (naredba == "R") {R = val; clearAndHome (); help (); } else if (command == "max_time") {maxmin = val; clearAndHome (); help (); } else {return false; } return true; }
// POSTAVLJANJE I GLAVNA PETLJA
void setup () {Serial.begin (115200); analogReference (INTERNAL); //1.1 V Serial.print ("Sessão iniciada!"); start = millis (); } void loop () {if (stanje! =-10) {process_feedback (); } if (Serial.available ()> 0) {char v = Serial.read (); if (byte (v) == 13) {// Bool return bool prihvaćen = true; if (commandString == "?" || commandString == "stop") {stop_device (); } else if (commandString == "restart") {clearAndHome (); stanje = -1; outV = maxOutV/5.0; start = millis (); prihvaćeno = netačno; } else if (commandString == "continue") {clearAndHome (); stanje = -1; outV = maxOutV/5.0; prihvaćeno = netačno; } else {bool ok = parse_param (commandString); if (! ok) {clearAndHome (); help (); prihvaćeno = netačno; Serial.println ("Comando desconhecido: '" + commandString + "'"); }} commandString = ""; if (prihvaćeno) {clearAndHome (); help (); Serial.println ("U redu!"); }} else {commandString+= v; if (stanje ==-10) {Serial.print (v); }}}}
Korak 4: Uma UI personalizacija
Za dodatnu podršku i sigurnost, koristite ferramenta PuTTY, i definirajte bez kodigo fonte:
kit = istina
Preporuke za definisanje:
-
Prozor
- 61 Colunas e 20 Linhas
- Prikažite traku za pomicanje desativado
-
Prozor> Izgled
Veličina: Lucida Console, 28 piksela
Korak 5: Dúvidas?
Para abrir a guia de ajuda, digitalno:
?
Pritisnite [ENTER]
OBS: Caso o Estado seja:
-1 -> Cérebro não identificationado (corrente aberta) +0 -> Prilagođeni naponm+1 -> Tudo certo, tDCS funcionando
Preporučuje se:
Kako koristiti pretvarač istosmjerne struje u DC LM2596: 8 koraka
Kako se koristi pretvarač istosmjernog u istosmjerni napon LM2596: Ovaj vodič će pokazati kako se pomoću pretvarača napona LM2596 može napajati uređaje koji zahtijevaju različite napone. Pokazat ćemo koje su najbolje vrste baterija za korištenje s pretvaračem i kako dobiti više od jednog izlaza iz pretvarača (indi
Jednostavni linearni regulator napajanja LED linearne struje, revidiran i pojašnjen: 3 koraka
Jednostavni linearni regulator snage linearne struje, revidiran i razjašnjen: Ovo uputstvo je u suštini ponavljanje Dan -ovog kruga linearnog regulatora struje. Njegova verzija je, naravno, vrlo dobra, ali nedostaje joj nešto na način da bude jasna. Ovo je moj pokušaj da to riješim. Ako razumijete i možete izgraditi Dan -ovu verziju
Razlika između (alternativne i istosmjerne struje): 13 koraka
Razlika između (alternativna struja i istosmjerna struja): Svi znaju da je električna energija uglavnom istosmjerna, ali šta je s drugom vrstom električne energije? Poznajete li Ac? Šta znači AC? Je li onda upotrebljiv DC? U ovoj studiji ćemo znati razliku između vrsta električne energije, izvora, primjene
DIY X-10 osjetnik izmjenične struje: 6 koraka
DIY X-10 AC senzor napajanja: Napravio sam ovaj senzor za nadzor svoje pumpe za bazen sa X-10 upravljanjem. Budući da su kontrole X-10 normalno otvorene petlje i nisu 100% pouzdane, pumpa se ponekad ne uspije aktivirati ili se ponekad sama uključi. Ovaj senzor daje povratne informacije kako bi pokazao kada je
Lemilica za vruće zračenje uradi sam pomoću 12-18 volti istosmjerne struje pri 2-3 ampera: 18 koraka (sa slikama)
DIY lemilica na vrući zrak pomoću 12-18 volti istosmjerne struje na 2-3 ampera: Ovo je moje prvo eva objavljivanje DIY članka na webu. Izvinite me zbog nekih grešaka u kucanju, protokola itd. Sljedeća uputstva pokazuju kako napraviti LIJEVO ZA LIJEVENJE na vrući zrak prikladno za SVE namjene koje zahtijevaju lemljenje. Ovo lemljenje toplim vazduhom