Tartalomjegyzék:
- 1. lépés: Saiba Mais
- 2. lépés: Monte O Circuito Abaixo
- 3. lépés: Instale O Código No Seu Arduino
- 4. lépés: Uma UI Personalizada
- 5. lépés: Dúvidas?
Videó: Arduino TDCS szuper egyszerű. Transzkraniális egyenáramú stimulátor (tDCS) DIY: 5 lépés
2024 Szerző: John Day | [email protected]. Utoljára módosítva: 2024-01-30 09:41
Para fazer este tDCS você precisará apenas de um arduino, ellenállás, kondenzátor és alguns cabosComponentes
-
Arduino
- Pino D13 como saída PWM (pode ser alterado).
- Pino A0 como entrada analógica (para feedback de corrente).
- Pino GND apenas para GND.
- Ellenállás (~ 470 Ω, mas provavelmente entre 300-1000 Ω funciona, você precisará alterar no código fonte)
- Kondenzátor (220 μF). Szolgálja a PWM alapú impulzust.
- Eletrodos de Esponja (Használjon á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. lépés: Saiba Mais
Você deve ler mais sobre tDCS primeiro. Não é aprovado pelo FDA e pode ser prejuditional a sua saúde, principmente se você não sabe nada sobre os efeitos colaterais, prepuações e dentre outros…
2. lépés: Monte O Circuito Abaixo
Não se esqueça das esponjas com água salina!
3. lépés: Instale O Código No Seu Arduino
Lembre-se de alterar as configurações and parametros na área de HARDWARE PARAMS e CONFIGURABLE PARAMS.
Você também deve alterar o boud rate do Serial para: 115200 para poder ver o resultado.
Végrehajtó parancsok, troque o No Line Ending para Carriage Return.
O código fonte + tutorial também podem ser encontrados no repositório:
Código:
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 feszültség de saída PWM padrão do Arduino [V] float maxRefInV = 1.1; // Referencia à feszültség analógica [V] úszó R = 470,0; Resistencia da corrente [Ohm]
// KONFIGURÁLHATÓ PARAMMÁK
bool plotter = hamis; // Defina: true, caso esteja usando o Soros 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] úszó 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 állapot = 1; /* -1 - Cérebro 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; // Feszültség int debounced_state = 0; int null_len = 0; úszó simított_mA = 0;
String parancsString = ""; // a CLI számára
// VISSZAJELZŐ SEGÍTŐK
float computeOutVoltage (float V, float new_mA) {if (abs (new_mA -target_mA) maxOutV) {állapot = -1; // resistência muito alta -> cérebro não encontrado? return maxOutV; // return maxOutV/5.0; // para segurança} állapot = 0; visszatérés 0,1*új_V+0,9*V; // return new_V; }
int convertVtoOutputValue (float V) {
visszatérési kényszer (int (V/maxOutV*255), 0, 255); }
float sensorValue2mA (int sensorValue) {
float sensorVoltage = sensorValue/1023.0*maxRefInV; float sensor_mA = sensorVoltage/R*1000.0; visszatérő érzékelő_mA; }
int debounced_state_compute (int állapot) {
ha (5. állapot) visszatér 0; } visszatérés 1; }
előjel nélküli hosszú kezdés, endc;
void process_feedback () {int sensorValue = analogRead (analogInPin); float new_mA = sensorValue2mA (sensorValue); simított_mA = 0,2*új_mA+0,8*simított_mA; úszó V = outV; outV = computeOutVoltage (V, new_mA); analogWrite (analogOutPin, convertVtoOutputValue (outV)); debounced_state = debounced_state_compute (állapot); // Exibir informationções no CLI endc = (millis ()-start)/1000; String tv = "[", ttm = "mA/", tsm = "V", ts = "mA] | Estado:", h = "| Tempo:", s = ":", leadM = "", leadS = "", plotT = "Target:", plotmA = "\ tSimított MA:", plotMin = "\ tMin:", tempó; előjel nélküli hosszú tmin = endc/60-((endc/60)%1); // Formázás if (endc%60 <10) leadS = "0"; if (tmin = 0) ts = ts + " +"; // Parar automaticamente if (tmin> maxmin) stop_device (); Karakterlánc txt; if (plotter) txt = plotT + cél_mA + plotMin + "0" + plotmA + simított_mA; else txt = tv + V + tsm + simított_mA + ttm + target_mA + ts + debounced_state + h + tempo; if (gitt) Serial.print ("\ r / e [? 25l" + txt); else Serial.println (txt);
// várjon 2 ezredmásodpercet a következő ciklus előtt
// hogy az analóg-digitális átalakító leülepedjen // az utolsó leolvasás után: delay (5); }
void stop_device () {
állapot = -10; analogWrite (analogOutPin, 0); clearAndHome (); Serial.println ("Sessão tDCS interrompida"); Serial.println ("------------------------"); Segítség(); }
// CLI HELPERS
void clearAndHome () {Soros.írás (27); Soros.nyomtatás ("[2J" "); // limpa a tela Serial.write (27); // ESC Serial.print ("[H" "); // / r if (! putty) for (int i = 0; i <= 30; i ++) Serial.println (""); }
érvénytelen segítség () {
Serial.println ("tDSC arduino, ver"+ver); Serial.println ("'?' - ajuda"); Serial.println ("'max_time' - atualiza o tempo máximo (em percos)"); Serial.println ("'target_mA' - cél vagy cél (mA)"); Serial.println ("'epsilon_mA' - atualiza o epsilon_mA (mA)"); Serial.println ("'R' - hardver ellenállása (Ohm)"); Serial.println ("'putty' - muda a formatação de saída pro PuTTY"); Serial.println ("'stop' - para a becslés"); Serial.println ("'újraindítás' - inicia/reinicia a becslés & időzítő"); Serial.println ("'folytassa' - Continua a becslés"); Serial.print ("\ n / rEstado: / n / r * max_time:"); Soros.nyomtatás (maxmin); Serial.print ("perc / n / r * target_mA:"); Serial.print (target_mA); Serial.print ("mA / n / r * epsilon_mA:"); Serial.print (epsilon_mA); Soros.nyomtatás ("mA / n / r * R:"); Sorozatnyomat (R); Serial.println ("Ohm"); }
bool parse_param (Karakterlánc és cmdString) {
int spacePos = cmdString.indexOf (""); if (spacePos <= 0) return false; String parancs = cmdString.substring (0, spacePos); Karakterlánc fval = cmdString.substring (spacePos+1); if (parancs == "putty") if (fval == "true") {putty = true; return true; } else if (fval == "false") {putty = false; return true; } float val = fval.toFloat (); if (parancs == "target_mA") {if (val100.0) {return false; } target_mA = val; clearAndHome (); Segítség(); } else if (parancs == "epsilon_mA") {if (val0.3) {return false; } epsilon_mA = val; clearAndHome (); Segítség(); } else if (parancs == "R") {R = val; clearAndHome (); Segítség(); } else if (parancs == "max_time") {maxmin = val; clearAndHome (); Segítség(); } else {return false; } return true; }
// BEÁLLÍTÁS ÉS FŐKÖR
void setup () {Serial.begin (115200); analogReference (INTERNAL); //1.1 V Serial.print ("Sessão iniciada!"); start = millis (); } void loop () {if (állapot! =-10) {process_feedback (); } if (Serial.available ()> 0) {char v = Serial.read (); if (byte (v) == 13) {// Kocsivisszaadási bool elfogadva = igaz; if (commandString == "?" || commandString == "stop") {stop_eszköz (); } else if (commandString == "restart") {clearAndHome (); állapot = -1; outV = maxOutV/5,0; start = millis (); elfogadott = hamis; } else if (commandString == "folytatás") {clearAndHome (); állapot = -1; outV = maxOutV/5,0; elfogadott = hamis; } else {bool ok = parse_param (commandString); if (! rendben) {clearAndHome (); Segítség(); elfogadott = hamis; Serial.println ("Comando desconhecido: '" + commandString + "" "); }} commandString = ""; if (elfogadva) {clearAndHome (); Segítség(); Serial.println ("Rendben!"); }} else {commandString+= v; if (állapot ==-10) {Sorozat.nyomtatás (v); }}}}
4. lépés: Uma UI Personalizada
A dal kíséretéhez és a keverékekhez használja a PuTTY ferramentát, és ne határozza meg a kódot:
gitt = igaz
Ajánlások a definiáláshoz:
-
Ablak
- 61 Colunas és 20 Linhas
- Görgetősáv megjelenítése
-
Ablak> Megjelenés
Font: Lucida Console, 28px
5. lépés: Dúvidas?
Para abrir a guia de ajuda, digite:
?
és nyomja meg az [ENTER] gombot
OBS: Caso vagy Estado seja:
-1 -> Cérebro não identifado (corrente aberta) +0 -> Ajustando feszültség m+1 -> Tudo certo, tDCS funcionando
Ajánlott:
Szuper egyszerű olcsó DIY USB LED (ek) (és egyéb dolgok): 16 lépés
Szuper egyszerű Olcsó DIY USB LED (ek) (és egyéb dolgok): Üdvözlöm és üdvözlöm az első tanulságos témámban :) Fogadok, hogy mindannyian újra beállítjuk és újra benépesítjük gyártótérünket a vírus után, úgyhogy azt hiszem, itt az ideje, hogy mi készítsünk Mindannyian megtanultuk, hogy saját USB -t készítsünk, és ne függjünk a könnyen lemerülő akkumulátoroktól
DIY - Szuper olcsó és szuper hűvös ívreaktor: 8 lépés (képekkel)
DIY - Szuper olcsó és szuper hűvös ívreaktor: Ebben az oktathatóban megmutatom, hogyan lehet rendkívül olcsó ívreaktorokat készíteni otthon. Kezdjük el. A teljes projekt kevesebb mint 1 dollárba került, és csak LED -eket kellett vásárolnom A LED 2,5 INR -ba került, és 25 -öt használtam, így a teljes költség kevesebb, mint 1
Hogyan készítsünk szuper fényes vakuval LED -el - DIY: Szuper fényes fény: 11 lépés
Hogyan készítsünk szuper fényes villanófényt LED -el - DIY: Szuper fényes fény: Nézze meg először a videót
Szuper hordozható, szuper hangos, tartós, akkumulátorral működő hangszórók: 9 lépés (képekkel)
Szuper hordozható, szuper hangos, tartós, akkumulátorral működő hangszórók: valaha is szerettem volna egy erőteljes hangszórórendszert azoknak a kerti partiknak/terepi tombolóknak. sokan azt mondják, hogy ez egy redundáns Instructable, mivel sok boombox stílusú rádió található a régmúlt időkben olcsón beszerezhető, vagy ezek az olcsó ipod stílusú mp3 d
Szuper egyszerű és szuper olcsó mágneskaparó !: 3 lépés
Szuper egyszerű és szuper OLCSÓ mágneskaparó !: " Magnero vakaró " olyan eszköz, amely vicces hangokat képes létrehozni csak "karcolással" " mágneses anyagok. Mint például hangszalagok, videokazetták, hitelkártyák, mágneslemezek stb. Nincs szükség forrasztásra