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 promjena: 2024-01-30 09:35
Para fazer este tDCS você precisará apenas de um arduino, otpornik, kondenzator i alguns cabosKomponente
-
Arduino
- Pino D13 kao sa PWM (pode ser alterado).
- Pino A0 como entrada analógica (para feedback de corrente).
- Pino GND apenas para GND.
- Otpornik (~ 470 Ω, provavelmente ulaze 300-1000 Ω funkcionalno, precizna izmjena bez izmjene fonte)
- Kondenzator (220 μF). Poslužite para estabilizar os pulsos do PWM.
- Eletrodos de Esponja (Koristite á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. Pozivajte tambem da promijenite ili promijenite 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 i pode ser prejudicial a sua saúde, principalmente se você não sabe nada sobre os efeitos colaterais, precauções e 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 e parametros na području de HARDWARE PARAMS e CONFIGURABLE PARAMS.
Você também deve alterar or boud rate to Serial para: 115200 para poder ver resultado.
Za izvršne komande, troque o Nema završetka linije za povratak prijevoza.
O código 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 plovak maxOutV = 5,0; // Voltm de saída PWM padrão do Arduino [V] plovak maxRefInV = 1,1; // Referencia à voltagem analógica [V] plovak R = 470,0; // Resistencia da corrente [Ohm]
// KONFIGURIRAJNI PARAMI
bool ploter = false; // Definacija: true, caso esteja usando o Serijski ploter bool putty = false; // Definacija: true, caso esteja usando o PuTTT (pode ser alterado no CLI) int maxmin = 30; // Tempo (em minutos) potrebno za desligar [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 o target_mA (Não altere caso não saiba o que está fazendo!)
// INIT GLOBALI
int stanje = 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 nule_len = 0; float smoothed_mA = 0;
Niz naredbeString = ""; // za CLI
// POMOĆNICI
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? povrat 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) {
povratno ograničenje (int (V/maxOutV*255), 0, 255); }
float sensorValue2mA (int sensorValue) {
osjetnik plovkaVoltage = sensorValue/1023.0*maxRefInV; osjetnik plovka_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); zaglađeni_mA = 0,2*novi_mA+0,8*zaglađeni_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; Niz 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"; ako je (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
// za podmirenje analogno-digitalnog pretvarača // nakon posljednjeg očitanja: delay (5); }
void stop_device () {
stanje = -10; analogWrite (analogOutPin, 0); clearAndHome (); Serial.println ("Sessão tDCS interrompida"); Serial.println ("------------------------"); Pomozite(); }
// CLI POMOĆNICI
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 tempa maksimuma (em minutos)"); Serial.println ("'target_mA' - ažuriranje cilja (mA)"); Serial.println ("'epsilon_mA' - atualiza o epsilon_mA (mA)"); Serial.println ("'R' - postavljanje otpornosti na hardver (Ohm)"); Serial.println ("'kit" - muda a formatação de saída pro PuTTY "); Serial.println ("'stop' - para a estimulação"); Serial.println ("'restart' - inicia/reinicia estimulação & o timer"); Serial.println ("'continue' - continua a estimulação"); Serial.print ("\ n / rEstado: / n / r * max_time:"); Serijski.ispis (maxmin); Serial.print ("minute / n / r * target_mA:"); Serial.print (target_mA); Serial.print ("mA / n / r * epsilon_mA:"); Serijski.ispis (epsilon_mA); Serial.print ("mA / n / r * R:"); Serijski ispis (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 (); Pomozite(); } else if (naredba == "epsilon_mA") {if (val0.3) {return false; } epsilon_mA = val; clearAndHome (); Pomozite(); } else if (naredba == "R") {R = val; clearAndHome (); Pomozite(); } else if (naredba == "max_time") {maxmin = val; clearAndHome (); Pomozite(); } else {return false; } return true; }
// POSTAVLJANJE I GLAVNA PETLJA
void setup () {Serial.begin (115200); analogReference (INTERNO); //1.1 V Serial.print ("Sessão iniciada!"); početak = 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; početak = millis (); prihvaćeno = lažno; } else if (commandString == "continue") {clearAndHome (); stanje = -1; outV = maxOutV/5,0; prihvaćeno = lažno; } else {bool ok = parse_param (commandString); if (! ok) {clearAndHome (); Pomozite(); prihvaćeno = lažno; Serial.println ("Comando desconhecido: '" + commandString + "'"); }} commandString = ""; ako (prihvaćeno) {clearAndHome (); Pomozite(); Serial.println ("U redu!"); }} else {commandString+= v; if (stanje ==-10) {Serial.print (v); }}}}
Korak 4: Uma UI personalizacija
Para melhor acompanhamento e segurança, use ferramenta PuTTY, e defina no código fonte:
kit = istina
Preporuke prema definicijama:
-
Prozor
- 61 Colunas e 20 Linhas
- Desativado prikazati kliznu traku
-
Prozor> Izgled
Fonte: Lucida Console, 28 piksela
Korak 5: Dúvidas?
Para abrir a guia de ajuda, digite:
?
pritisnite [ENTER]
OBS: Caso o Estado seja:
-1 -> Cérebro não identificado (corrente aberta) +0 -> Ajustando napon m+1 -> Tudo certo, tDCS funcionando
Preporučeni:
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 što je s drugom vrstom električne energije? Poznajete li Ac? Što znači AC? Je li onda upotrebljiv DC? U ovoj studiji ćemo znati razliku između vrsta električne energije, izvora, primjene
DIY upravljački program za laserske diode -- Izvor stalne struje: 6 koraka (sa slikama)
DIY upravljački program za laserske diode || Izvor konstantne struje: U ovom projektu pokazat ću vam kako sam izvukao lasersku diodu iz DVD snimača koji bi trebao imati moć zapaliti šibicu. Kako bih ispravno napajao diodu, također ću pokazati kako gradim izvor konstantne struje koji daje preciznost
DIY X-10 osjetnik izmjenične struje: 6 koraka
DIY X-10 izmjenični osjetnik izmjenične struje: Ovaj sam senzor sagradio za nadzor svoje X-10 pumpe za bazen. Budući da su kontrole X-10 normalno otvorene petlje i nisu 100% pouzdane, crpka se ponekad ne uspije aktivirati ili se ponekad sama uključi. Ovaj senzor daje povratne informacije kako bi se pokazalo kada je
DIY zaštita od prejake struje: 4 koraka
DIY zaštita od prenapona: UvodKao početnik u elektronici, prilično ste ograničeni što se tiče napajanja vaših novoproizvedenih krugova. To ne bi bio problem ako ne napravite apsolutno nikakvu grešku. No, priznajmo da je to rijetkost. Dakle, bez obzira na to
Kako jeftino radijski kontrolirati istosmjerne motore: 5 koraka
Kako jeftino radijski kontrolirati istosmjerne motore: Za ljude koji ne znaju što je "VEX". Riječ je o tvrtki koja prodaje robotske dijelove i komplete. Na svom web mjestu prodaju "VEX" odašiljač i prijemnik za 129,99 USD, ali možete kupiti "VEX" odašiljač i prijemnik za oko 20 USD na "Ebayu" i mnogim