Turinys:
- 1 žingsnis: Saiba Mais
- 2 žingsnis: „Monte O Circuito Abaixo“
- 3 žingsnis: „Instale O Código No Seu Arduino“
- 4 žingsnis: „Uma UI Personalizada“
- 5 žingsnis: Dúvidas?
Video: „Arduino TDCS Super Simples“. Transkranijinis nuolatinės srovės stimuliatorius (tDCS) „pasidaryk pats“: 5 žingsniai
2024 Autorius: John Day | [email protected]. Paskutinį kartą keistas: 2024-01-30 10:47
Para fazer este tDCS você precisará apenas de um arduino, rezistorius, kondensatorius ir alguns cabosComponentes
-
Arduino
- „Pino D13“yra PWM (pode ser alterado).
- Pino A0 como entrada analógica (para feedback de corrente).
- Pino GND apenas para GND.
- Rezistorius (~ 470 Ω, masinis provavelmente entre 300-1000 Ω funciona, vokê precisará alterar no código fonte)
- Kondensatorius (220 μF). Patiekite pagal PWM nustatytą pulsą.
- Eletrodos de Esponja (Naudokite á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 serial CLI (Console).
1 žingsnis: Saiba Mais
Você deve ler mais sobre tDCS primeiro. Não é aprovado pelo FDA e pode ser prejudic a sua saúde, principmente se você não sabe nada sobre os efeitos colaterais, prepuações e dentre outros…
2 žingsnis: „Monte O Circuito Abaixo“
Não se esqueça das esponjas com água salina!
3 žingsnis: „Instale O Código No Seu Arduino“
Naudokite kitus įrankius, kaip konfigūracijas ir parametrus, skirtus HARDWARE PARAMS ir CONFIGURABLE PARAMS.
Você também deve alterar arba boud rate do Serial para: 115200 para poder ver o resultado.
Pagal vykdomuosius komendus, „No Line Ending“pagal „Carriage Return“.
O código fonte + pamoka também podem ser encontrados no repositório:
Kodis:
const String ver = "2.0m"; // Aparatūros PARAMOS const int analogInPin = A0; // Entrada do Analógico const int analogOutPin = 13; // Saida D13 padrão float maxOutV = 5.0; // A įtampos įtampa PWM padrão do Arduino [V] float maxRefInV = 1.1; // Referencia à voltagem analógica [V] plūdė R = 470.0; // Resistencia da corrente [Ohm]
// KONFIGURUOJAMOS PARAMOS
bool ploteris = klaidingas; // Defina: true, caso esteja usando o Serial plotter bool putty = false; // Apibrėžimas: 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] plūdė 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 būsena = 1; /* -1 - Cherebro não identifado 0 - Voltagem sendo alterada para definir a corrente padrão 1 - Tudo certo. Você esta na corrente definida -10 - Voltagem desligada */ float outV = maxOutV; // Įtampa int debounced_state = 0; int zeros_len = 0; plūdė išlyginta_mA = 0;
Eilutės komandaString = ""; // CLI
// PAGALBOS PAGALBOS
float computeOutVoltage (float V, float new_mA) {if (abs (new_mA -target_mA) maxOutV) {būsena = -1; // resistência muito alta -> cérebro não encontrado? return maxOutV; // grąžinti maxOutV/5.0; // para segurança} state = 0; grįžti 0,1*naujas_V+0,9*V; // return new_V; }
int convertVtoOutputValue (plūdė V) {
grąžinimo apribojimas (int (V/maxOutV*255), 0, 255); }
float sensorValue2mA (int sensorValue) {
float sensorVoltage = sensorValue/1023.0*maxRefInV; plūdės jutiklis_mA = sensorVoltage/R*1000.0; grąžinimo jutiklis_mA; }
int debounced_state_compute (int būsena) {
jei (5 būsena) grąžinkite 0; } grįžti 1; }
nepasirašyta ilga pradžia, pabaiga;
void process_feedback () {int sensorValue = analogRead (analogInPin); float new_mA = sensorValue2mA (sensorValue); išlygintas_mA = 0,2*naujas_mA+0,8*išlygintas_mA; plūdė V = outV; outV = computeOutVoltage (V, new_mA); analogWrite (analogOutPin, convertVtoOutputValue (outV)); debounced_state = debounced_state_compute (būsena); // Exibir informationções no CLI endc = (milis ()-pradžia)/1000; Eilutės tv = "[", ttm = "mA/", tsm = "V", ts = "mA] | Estado:", h = "| Tempo:", s = ":", leadM = "", leadS = "", plotT = "Target:", plotmA = "\ tSmoothed MA:", plotMin = "\ tMin:", tempo; nepasirašytas ilgas tmin = endc/60-((endc/60)%1); // Formatas, jei (endc%60 <10) leadS = "0"; jei (tmin = 0) ts = ts + " +"; // Parar automaticamente if (tmin> maxmin) stop_device (); Styginių txt; jei (braižytuvas) txt = plotTT + target_mA + plotMin + "0" + plotmA + išlygintas_mA; else txt = tv + V + tsm + išlyginta_mA + ttm + target_mA + ts + atšaukta_stata + h + tempas; if (glaistas) Serial.print ("\ r / e [? 25l" + txt); else Serial.println (txt);
// palaukite 2 milisekundes iki kitos kilpos
// kad analoginis-skaitmeninis keitiklis nusistovetu // po paskutinio skaitymo: delay (5); }
void stop_device () {
būsena = -10; analogWrite (analogOutPin, 0); clearAndHome (); Serial.println („Sessão tDCS interrompida“); Serial.println ("------------------------"); padėti (); }
// CLI HELPERS
void clearAndHome () {Serial.write (27); Serijinis atspaudas ("[2J"); // limpa a tela Serial.write (27); // ESC Serial.print ("[H"); // / r if (! glaistas) for (int i = 0; i <= 30; i ++) Serial.println (""); }
niekinė pagalba () {
Serial.println ("tDSC arduino, ver"+ver); Serial.println ("'?' - ajuda"); Serial.println ("'max_time' - atualiza o tempo máximo (em minutes)"); Serial.println ("'target_mA' - aktualizavimas arba tikslas (mA)"); Serial.println ("'epsilon_mA' - aktualizuojama arba epsilon_mA (mA)"); Serial.println ("'R' - galutinis ir atsparus aparatinei įrangai (Ohm)"); Serial.println ("'glaistas' - muda a formatação de saída pro PuTTY"); Serial.println ("'stop' - para a aprēķinis"); Serial.println ("'restart' - inicia/reinicia a appreulação & o timer"); Serial.println ("'tęsti' - Continua a tāmė"); Serial.print ("\ n / rEstado: / n / r * max_time:"); Serijinis atspaudas (maks. Min.); Serial.print ("minutės / n / r * target_mA:"); Serial.print (target_mA); Serial.print ("mA / n / r * epsilon_mA:"); Serial.print (epsilon_mA); Serial.print ("mA / n * r:"); Serijinis atspaudas (R); Serial.println („omai“); }
bool parse_param (String & cmdString) {
int spacePos = cmdString.indexOf (''); if (spacePos <= 0) return false; Styginių komanda = cmdString.substring (0, spacePos); String fval = cmdString.substring (tarpasPos+1); if (komanda == "glaistas") if (fval == "tiesa") {glaistas = tiesa; grįžti tiesa; } else if (fval == "false") {putty = false; grįžti tiesa; } plūdė val = fval.toFloat (); if (komanda == "target_mA") {if (val100.0) {return false; } target_mA = val; clearAndHome (); padėti (); } else if (komanda == "epsilon_mA") {if (val0.3) {return false; } epsilon_mA = val; clearAndHome (); padėti (); } else if (komanda == "R") {R = val; clearAndHome (); padėti (); } else if (komanda == "max_time") {maxmin = val; clearAndHome (); padėti (); } else {return false; } return true; }
// Sąranka ir pagrindinis kilpas
void setup () {Serial.begin (115200); analogReference (INTERNAL); //1.1 V Serial.print ("Sessão iniciada!"); pradžia = milis (); } void loop () {if (state! =-10) {process_feedback (); } if (Serial.available ()> 0) {char v = Serial.read (); if (baitas (v) == 13) {// Vežimo grąžinimo boolis priimtas = tiesa; if (commandString == "?" || commandString == "stop") {stop_device (); } else if (commandString == "restart") {clearAndHome (); būsena = -1; outV = maxOutV/5.0; pradžia = milis (); priimta = klaidinga; } else if (commandString == "tęsti") {clearAndHome (); būsena = -1; outV = maxOutV/5.0; priimta = klaidinga; } else {bool ok = parse_param (commandString); if (! gerai) {clearAndHome (); padėti (); priimta = klaidinga; Serial.println ("Comando desconhecido: '" + commandString + "'"); }} commandString = ""; jei (priimta) {clearAndHome (); padėti (); Serial.println („Gerai!“); }} else {commandString+= v; if (būsena ==-10) {Serial.print (v); }}}}
4 žingsnis: „Uma UI Personalizada“
Norėdami palydėti akompanimentą ir mišinį, naudokite „PuTTY“ferramentą, o ne apibrėžimą:
glaistas = tiesa
Apibrėžimų rekomendacijos:
-
Langas
- 61 Colunas ir 20 Linhas
- Rodyti slinkties juostos desativado
- Langas> Išvaizda
Fontai: „Lucida Console“, 28 piks
5 žingsnis: Dúvidas?
Para abrir a guia de ajuda, digite:
?
ir paspauskite [ENTER]
OBS: „Caso“arba „Estado“:
-1 -> Cérebro não identifado (corrente aberta) +0 -> Ajustando įtampa m+1 -> Tudo certo, tDCS funcionando
Rekomenduojamas:
„Pasidaryk pats“kišeninio dydžio nuolatinės srovės įtampos matuoklis: 5 žingsniai
„Pasidaryk pats“kišeninio dydžio nuolatinės įtampos matuoklis: šioje instrukcijoje aš jums parodysiu, kaip patiems pasidaryti „pasidaryk pats“kišeninio dydžio nuolatinės įtampos matuoklį su pjezo garsiniu signalu. Viskas, ko jums reikia, yra pagrindinės elektronikos žinios ir šiek tiek laiko. Jei turite klausimų ar problemų, galite
Paprastas nuolatinės srovės - nuolatinės srovės stiprinimo keitiklis naudojant 555: 4 žingsnius
Paprastas nuolatinės srovės - nuolatinės srovės stiprinimo keitiklis naudojant 555: dažnai grandinėje naudinga turėti aukštesnę įtampą. Pateikti „ +ve“ir „ve“bėgelius „op -amp“, vairuoti signalus ar net relę be papildomos baterijos. Tai paprastas 5V iki 12V nuolatinės srovės keitiklis, sukurtas naudojant 555 laikmatį
Nuo kintamosios srovės iki +15V, -15V 1A kintamasis ir 5V 1A nuolatinės srovės nuolatinės srovės maitinimo šaltinis: 8 žingsniai
Kintamosios srovės į +15V, -15V 1A kintamasis ir 5V 1A nuolatinio maitinimo šaltinis: maitinimo šaltinis yra elektros prietaisas, tiekiantis elektros energiją elektros apkrovai. Šiame modelio maitinimo šaltinyje yra trys kietojo kūno nuolatinės srovės maitinimo šaltiniai. Pirmasis maitinimas suteikia kintamą teigiamą 1,5–15 voltų išėjimą iki 1 ampero
„Pasidaryk pats“AC/ DC įsilaužimas „Mod“RD6006 maitinimo šaltinis ir S06A dėklas W/ S-400-60 PSU sukūrimas ir atnaujinta nuolatinės srovės įvestis: 9 žingsniai
„Pasidaryk pats“kintamosios srovės/ nuolatinės srovės įsilaužimas „Mod“RD6006 maitinimo šaltinis ir S06A dėklas W/ S-400-60 PSU sukūrimas ir patobulinta nuolatinės srovės įvestis: Šis projektas yra daugiau pagrindinis RD6006 kūrimas naudojant S06A dėklą ir S-400-60 maitinimo šaltinį . Bet aš tikrai noriu pasirinkti prijungti akumuliatorių, kad jis būtų nešiojamas arba nutrūktų elektros tiekimas. Taigi aš taip pat nulaužiau arba pakeičiau korpusą, kad jis priimtų nuolatinę srovę arba akumuliatorių
97% efektyvus nuolatinės srovės ir nuolatinės srovės keitiklis [3A, reguliuojamas]: 12 žingsnių
97% efektyvus nuolatinės srovės ir nuolatinės srovės konverteris [3A, reguliuojamas]: maža nuolatinės srovės į nuolatinę srovę konverterio plokštė yra naudinga daugeliui programų, ypač jei ji gali tiekti srovę iki 3A (2A nuolat be aušintuvo). Šiame straipsnyje mes išmoksime sukurti nedidelę, efektyvią ir pigią „Buck“keitiklio grandinę. [