Sisukord:
- 1. samm: Saiba Mais
- 2. samm: Monte O Circuito Abaixo
- 3. samm: installige O Código No Seu Arduino
- Samm 4: Uma kasutajaliidese isikupärastamine
- 5. samm: Dúvidas?
Video: Arduino TDCS super lihtsad. Transkraniaalne alalisvoolu stimulaator (tDCS) DIY: 5 sammu
2024 Autor: John Day | [email protected]. Viimati modifitseeritud: 2024-01-30 08:48
Para fazer este tDCS você precisará apenas de um arduino, resistor, kondensaator ja alguns cabosComponentes
-
Arduino
- Pino D13 on PWM (pode ser alterado).
- Pino A0 como entrada analógica (para feedback de corrente).
- Pino GND apenas para GND.
- Takisti (~ 470 Ω, massiivne sissepääs 300-1000 Ω funktsionaalsus, hääletäpsus alternatiivselt ilma koodita)
- Kondensaator (220 μF). Serveeri PWM -i jaoks pulsos.
- Eletrodos de Esponja (kasutage á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. Você também pode alterar o valor do target_mA pelo seeria CLI (konsool).
1. samm: Saiba Mais
Você deve ler mais sobre tDCS primeiro. Não é aprovado pelo FDA e pode ser eelarvamus a sua saúde, principmente se você não sabe nada sobre os efeitos colaterais, prepuações e dentre outros…
2. samm: Monte O Circuito Abaixo
Não se esqueça das esponjas com água salina!
3. samm: installige O Código No Seu Arduino
Lembre-se de alterar as configuraçõeses and parametros na área de RIISTVARA PARAAMID e KONFIGUREERITAVAD PARAMMID.
Você também deve alterar või boud rate do Serial para: 115200 para poder ver o resultado.
Täitekomandod, troque o No Line Ending para Carriage Return.
O código fonte + õpetus também podem ser encontrados no repositório:
Código:
const String ver = "2.0m"; // RIISTVARAAMID 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; // Viide pingele analüütiline [V] ujuk R = 470,0; // Resistencia da corrente [Ohm]
// KONFIGUREERITAVAD PARAMMID
bool plotter = vale; // 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) requiredário para desligar [Min] float target_mA = 2,73; // Essa é a corrente que passará pelo seu cérebro !!! [mA] ujuk 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 GLOBALS
int olek = 1; /* -1 - Cérebro não identifikaator 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 null_len = 0; ujuk silutud_mA = 0;
String käskString = ""; // CLI jaoks
// TAGASISIDE AITAB
float computeOutVoltage (float V, float new_mA) {if (abs (new_mA -target_mA) maxOutV) {olek = -1; // resistência muito alta -> cérebro não encontrado? return maxOutV; // tagasta maxOutV/5.0; // para segurança} olek = 0; tagasi 0,1*uus_V+0,9*V; // return new_V; }
int convertVtoOutputValue (float V) {
tagasipiirang (int (V/maxOutV*255), 0, 255); }
float sensorValue2mA (int sensorValue) {
float sensorVoltage = sensorValue/1023.0*maxRefInV; ujukandur_mA = sensorVoltage/R*1000,0; tagasivooluandur_mA; }
int debounced_state_compute (int olek) {
kui (olek 5) tagastab 0; } tagasipöördumine 1; }
allkirjata pikk algus, endc;
void process_feedback () {int sensorValue = analogRead (analogInPin); float new_mA = sensorValue2mA (sensorValue); silutud_mA = 0,2*uus_mA+0,8*silutud_mA; ujuk V = väljaV; outV = computeOutVoltage (V, uus_mA); analogWrite (analogOutPin, convertVtoOutputValue (outV)); debounced_state = debounced_state_compute (olek); // Exibir informationções no CLI endc = (millis ()-algus)/1000; String tv = "[", ttm = "mA/", tsm = "V", ts = "mA] | Estado:", h = "| Tempo:", s = ":", leadM = "", leadS = "", plotT = "Target:", plotmA = "\ tSmoothed MA:", plotMin = "\ tMin:", tempo; allkirjata pikk tmin = endc/60-((endc/60)%1); // Formaat if (endc%60 <10) leadS = "0"; kui (tmin = 0) ts = ts + " +"; // Parar automaticamente if (tmin> maxmin) stop_device (); String txt; if (plotter) txt = plotT + target_mA + plotMin + "0" + plotmA + silutud_mA; else txt = tv + V + tsm + silutud_mA + ttm + target_mA + ts + debounced_state + h + tempo; if (kitt) Serial.print ("\ r / e [? 25l" + txt); muu Serial.println (txt);
// oodake 2 millisekundit enne järgmist tsüklit
// analoog-digitaalmuundurile settimiseks // pärast viimast lugemist: delay (5); }
void stop_device () {
olek = -10; analogWrite (analogOutPin, 0); clearAndHome (); Serial.println ("Sessão tDCS interrompida"); Serial.println ("------------------------"); abi (); }
// CLI AITAB
void clearAndHome () {Serial.write (27); Seeria.print ("[2J" "); // limpa a tela Serial.write (27); // ESC Serial.print ("[H"); // kui (! kitt) jaoks (int i = 0; i <= 30; i ++) Serial.println (""); }
tühine abi () {
Serial.println ("tDSC arduino, ver"+ver); Serial.println ("'?' - ajuda"); Serial.println ("'max_time' - atualiza või tempo máximo (em minutos)"); Serial.println ("'target_mA' - eesmärk või sihtmärk (mA)"); Serial.println ("'epsilon_mA' - teostus või epsilon_mA (mA)"); Serial.println ("'R' - riistvara vastastikune vastupidavus (Ohm)"); Serial.println ("'kitt' - muda a formatação de saída pro PuTTY"); Serial.println ("'stop' - para a aprēķin"); Serial.println ("'restart' - inicia/reinicia a appreulação & o timer"); Serial.println ("'jätka' - Continua a Estimulação"); Serial.print ("\ n / rEstado: / n / r * max_time:"); Serial.print (maxmin); Serial.print ("minutid / 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:"); Seeriaprint (R); Serial.println ("oomid"); }
bool parse_param (String & cmdString) {
int spacePos = cmdString.indexOf (''); if (spacePos <= 0) return false; String käsk = cmdString.substring (0, spacePos); String fval = cmdString.substring (tühikPos+1); if (käsk == "kitt") if (fval == "true") {putty = true; tagastama tõene; } else if (fval == "false") {putty = false; tagastama tõene; } float val = fval.toFloat (); if (käsk == "target_mA") {if (val100.0) {return false; } target_mA = val; clearAndHome (); abi (); } else if (käsk == "epsilon_mA") {if (val0.3) {return false; } epsilon_mA = val; clearAndHome (); abi (); } else if (käsk == "R") {R = val; clearAndHome (); abi (); } else if (käsk == "max_time") {maxmin = val; clearAndHome (); abi (); } else {return false; } return true; }
// SEADISTAMINE JA PÕHISILM
void setup () {Serial.begin (115200); analogReference (INTERNAL); //1.1 V Serial.print ("Sessão iniciada!"); algus = millis (); } void loop () {if (state! =-10) {process_feedback (); } kui (Serial.available ()> 0) {char v = Serial.read (); if (bait (v) == 13) {// Vedu tagastamise bool aktsepteeritud = true; if (commandString == "?" || commandString == "stop") {stop_seade (); } else if (commandString == "restart") {clearAndHome (); olek = -1; outV = maxOutV/5,0; algus = millis (); aktsepteeritud = vale; } else if (commandString == "jatka") {clearAndHome (); olek = -1; outV = maxOutV/5,0; aktsepteeritud = vale; } else {bool ok = pars_param (commandString); if (! ok) {clearAndHome (); abi (); aktsepteeritud = vale; Serial.println ("Comando desconhecido: '" + commandString + "'"); }} commandString = ""; kui (aktsepteeritud) {clearAndHome (); abi (); Serial.println ("Ok!"); }} else {commandString+= v; if (olek ==-10) {Serial.print (v); }}}}
Samm 4: Uma kasutajaliidese isikupärastamine
Kui soovite meloodiat kaaslaseks ja segransaks, kasutage PuTTY ferramenta, ja see ei tähenda:
kitt = tõsi
Määratluste soovitused:
-
Aken
- 61 Colunas e 20 Linhas
- Kuva kerimisriba desativado
-
Aken> Välimus
Fonte: Lucida Console, 28 pikslit
5. samm: Dúvidas?
Para abrir a guia de ajuda, digite:
?
ja vajutage [ENTER]
OBS: Caso või Estado seja:
-1 -> Cérebro não identifikaator (corrente aberta) +0 -> Ajustando pingem+1 -> Tudo certo, tDCS funcionando
Soovitan:
Lihtne alalisvoolu - alalisvoolu võimendusmuundur, kasutades 555: 4 sammu
Lihtne alalisvoolu - alalisvoolu võimendusmuundur 555 abil: vooluahelas on sageli kasulik kasutada kõrgemat pinget. Kas anda võimendile +ve ja -ve rööpad, kasutada sumisejaid või isegi relee ilma lisaakuta. See on lihtne 5V kuni 12V alalisvoolu muundur, mis on ehitatud 555 taimeriga a
Diy DC alalisvoolu mõõtmise moodul Arduino jaoks: 8 sammu
Diy Dc võimsuse mõõtmise moodul Arduino jaoks: Selles projektis näeme, kuidas teha alalisvoolu võimsuse mõõtmise moodul Arduino abil
DIY AC/ DC Hack "Mod" RD6006 toiteallikas ja S06A ümbris W/ S-400-60 PSU Ehitus ja täiendatud alalisvoolu sisend: 9 sammu
DIY AC/ DC Hack "Mod" RD6006 toiteallikas ja S06A ümbris W/ S-400-60 PSU Ehitus ja täiendatud alalisvoolu sisend: see projekt on rohkem põhiline RD6006 ehitis, kasutades S06A korpust ja S-400-60 toiteallikat . Kuid ma tõesti tahan valida, kas ühendada aku kaasaskantavuse või elektrikatkestuse jaoks. Nii et ma häkkisin või muutsin ka juhtumit, et see võtaks vastu alalisvoolu või aku
Littlebots: lihtsad 3D -trükitud Androidi Arduino robotid: 13 sammu (koos piltidega)
Littlebots: lihtsad 3D -trükitud Androidi Arduino robotid: LittleBotid loodi robootika lihtsaks sissejuhatuseks. See näitab kõiki vajalikke robootika komponente, tundmist, otsuste tegemist ja liigendamist kena ja lihtsalt kokkupandavas pakendis. LittleBot on täielikult 3D-trükitud, mis võimaldab
Odavad lihtsad DIY Bluetooth -kõrvaklapid: 3 sammu
Odavad lihtsad DIY Bluetooth -kõrvaklapid: see pole kaugeltki eelnev ehitus, igaüks saab seda lihtsat projekti teha. See ei ole mõeldud püsivaks Bluetooth -kõrvaklappide komplektiks, vaid ajutiseks. Materjalide maksumus sõltub sellest, kust te need hankite, kuid minu jaoks oli Bluetooth -vastuvõtja vähe