Cov txheej txheem:
- Kauj Ruam 1: Saiba Mais
- Kauj Ruam 2: Monte O Circuito Abaixo
- Kauj Ruam 3: Txhim Kho O Código No Seu Arduino
- Kauj Ruam 4: Uma UI Tus Kheej
- Kauj Ruam 5: Puas yog?
Video: Arduino TDCS Super Simples. Transcranial Ncaj Ncees Tam Sim No (tDCS) DIY: 5 Cov Kauj Ruam
2024 Tus sau: John Day | [email protected]. Kawg hloov kho: 2024-01-30 09:27
Para fazer este tDCS você precisará apenas de um arduino, resistor, capacitor e 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 rau GND.
- Resistor (~ 470 Ω, mas provavelmente entre 300-1000 Ω funciona, você precisará alterar no código fonte)
- Capacitor (220 μF). Ua hauj lwm rau cov neeg ua haujlwm PWM.
- Eletrodos de Esponja (Siv água salina para molhá-lo).
Kev ua si
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 ua target_mA pelo serial CLI (Console).
Kauj Ruam 1: Saiba Mais
Você deve ler mais sobre tDCS primeiro. Não é aprovado pelo FDA e pode ser prejudicial a sua saúde, principalmente se você não sabe nada sobre os efeitos colaterais, precauções e dentre outros …
Kauj Ruam 2: Monte O Circuito Abaixo
Tsis muaj qhov tshwj xeeb tshaj li cov esponjas com água salina!
Kauj Ruam 3: Txhim Kho O Código No Seu Arduino
Lembre-se de alterar as configurações e parametros na área de HARDWARE PARAMS e CONFIGURABLE PARAMS.
Você também deve alterar o boud rate ua Serial para: 115200 para poder ver o resultado.
Para executar comandos, troque o Tsis Muaj Kab Kawg Para Carriage Return.
O código fonte + tutorial também podem ser encontrados tsis muaj chaw cia khoom:
Caj dab:
const String ver = "2.0m"; // HARDWARE PARAMS const int analogInPin = A0; // Entrada do Analógico const int analogOutPin = 13; // Saida D13 padrão ntab maxOutV = 5.0; // A voltagem de saída PWM padrão do Arduino [V] float maxRefInV = 1.1; // Referencia à voltagem analógica [V] ntab R = 470.0; // Resistencia da corrente [Ohm]
// CONFIGURABLE PARAMS
bool plotter = tsis tseeb; // Defina: tseeb, caso esteja usando o Serial plotter bool putty = cuav; // Defina: tseeb, caso esteja usando o PuTTT (pode ser alterado no CLI) int maxmin = 30; // Tempo (em minutos) necessário para desligar [Min] ntab target_mA = 2.73; // Essa é a corrente que passará pelo seu cérebro !!! [mA] ntab 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 ntiaj teb
int xeev = 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 */ ntab tawmV = maxOutV; // Voltagem int debounced_state = 0; int zeros_len = 0; ntab smoothed_mA = 0;
Txoj hlua commandString = ""; // rau CLI
// FEEDBACK HELPERS
ntab computeOutVoltage (ntab V, ntab new_mA) {yog (abs (new_mA -target_mA) maxOutV) {xeev = -1; // resistência muito alta -> cérebro não encontrado? rov maxOutV; // rov maxOutV/5.0; // para segurança} xeev = 0; rov qab 0.1*new_V+0.9*V; // rov tshiab_V; }
int convertVtoOutputValue (ntab V) {
rov qab txwv (int (V/maxOutV*255), 0, 255); }
ntab sensorValue2mA (int sensorValue) {
ntab sensorVoltage = sensorValue/1023.0*maxRefInV; ntab sensor_mA = sensorVoltage/R*1000.0; rov sensor_mA; }
int debounced_state_compute (int xeev) {
yog (xeev 5) rov qab 0; } rov qab 1; }
unsigned ntev pib, endc;
void process_feedback () {int sensorValue = analogRead (analogInPin); ntab new_mA = sensorValue2mA (sensorValue); smoothed_mA = 0.2*new_mA+0.8*smoothed_mA; float V = outV; outV = computeOutVoltage (V, new_mA); analogWrite (analogOutPin, hloov VtoOutputValue (tawmV)); debounced_state = debounced_state_compute (xeev); // Exibir informações no CLI endc = (millis ()-pib)/1000; String tv = "[", ttm = "mA/", tsm = "V,", ts = "mA] | Estado:", h = "| Tempo:", s = ":", leadM = "", leadS = "", plotT = "Target:", plotmA = "\ tSmoothed MA:", plotMin = "\ tMin:", tempo; unsigned ntev tmin = endc/60-((endc/60)%1); // Formatação yog (endc%60 <10) leadS = "0"; if (tmin = 0) ts = ts + " +"; // Parar automaticamente yog (tmin> maxmin) stop_device (); String txt; if (plotter) txt = plotT + target_mA + plotMin + "0" + plotmA + smoothed_mA; else txt = tv + V + tsm + smoothed_mA + ttm + target_mA + ts + debuted_state + h + tempo; yog (putty) Serial.print ("\ r / e [? 25l" + txt); lwm Serial.println (txt);
// tos 2 milliseconds ua ntej lub voj tom ntej
// rau qhov hloov pauv analog-rau-digital los daws teeb meem // tom qab nyeem kawg: ncua (5); }
tsis muaj dabtsis stop_device () {
xeev = -10; analogWrite (analogOutPin, 0); clearAndHome (); Serial.println ("Sessão tDCS interrompida"); Serial.println ("------------------------"); pab (); }
// CLI Pab
void clearAndHome () {Serial.write (27); Serial.print ("[2J"); // limpa a tela Serial.write (27); // ESC Serial.print ("[H"); // / r yog (! putty) rau (int i = 0; i <= 30; i ++) Serial.println (""); }
void pab () {
Serial.println ("tDSC arduino, ver"+ver); Serial.println ("'?' - ajuda"); Serial.println ("'max_time' - atualiza o tempo máximo (em minutos)"); Serial.println ("'target_mA' - atualiza o phiaj (mA)"); Serial.println ("'epsilon_mA' - atualiza o epsilon_mA (mA)"); Serial.println ("'R' - atualiza a resistência do hardware (Ohm)"); Serial.println ("'putty' - muab cov ntaub ntawv pov thawj los ntawm PuTTY"); Serial.println ("'nres' - rau qhov kwv yees '); Serial.println ("'rov pib dua' - inicia/reinicia kwv yees kwv yees & timer"); Serial.println ("'txuas ntxiv' - txuas ntxiv kev kwv yees"); 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:"); Serial.print (R); Serial.println ("Ohms"); }
bool parse_param (Txoj hlua & cmdString) {
int spacePos = cmdString.indexOf (''); yog (spacePos <= 0) rov tsis tseeb; Txoj hlua hais kom ua = cmdString.substring (0, spacePos); Txoj hlua fval = cmdString.substring (spacePos+1); if (command == "putty") if (fval == "true") {putty = tseeb; rov muaj tseeb; } lwm yog (fval == "cuav") {putty = cuav; rov muaj tseeb; } ntab val = fval.toFloat (); yog (hais kom == "target_mA") {yog (val100.0) {rov tsis tseeb; } target_mA = npib; clearAndHome (); pab (); } lwm yog (hais kom ua == "epsilon_mA") {yog (val0.3) {rov tsis tseeb; } epsilon_mA = np. clearAndHome (); pab (); } lwm yog (hais kom ua == "R") {R = val; clearAndHome (); pab (); } lwm yog (hais kom ua == "max_time") {maxmin = val; clearAndHome (); pab (); } lwm {xa rov qab tsis tseeb; } rov tseeb; }
// Teeb tsa thiab Qhib LOOP
teeb tsa tsis muaj dab tsi () {Serial.begin (115200); analogReference (sab hauv); //1.1 V Serial.print ("Sessão iniciada!"); pib = millis (); } void loop () {yog (xeev! =-10) {process_feedback (); } yog (Serial.available ()> 0) {char v = Serial.read (); yog (byte (v) == 13) {// Carriage return bool txais = muaj tseeb; yog (commandString == "?" || commandString == "stop") {stop_device (); } lwm yog (commandString == "restart") {clearAndHome (); xeev = -1; outV = maxOutV/5.0; pib = millis (); lees txais = tsis tseeb; } lwm yog (commandString == "txuas ntxiv") {clearAndHome (); xeev = -1; outV = maxOutV/5.0; lees txais = tsis tseeb; } lwm {bool ok = parse_param (commandString); yog (! ok) {clearAndHome (); pab (); lees txais = tsis tseeb; Serial.println ("Comando desconhecido: '" + commandString + "'"); }} commandString = ""; yog (txais) {clearAndHome (); pab (); Serial.println ("Ok!"); }} lwm {commandString+= v; yog (xeev ==-10) {Serial.print (v); }}}}
Kauj Ruam 4: Uma UI Tus Kheej
Txhawm rau ua kom tau txais txiaj ntsig zoo hauv kev siv, siv ferramenta PuTTY, thiab txiav txim siab tsis muaj código fonte:
putty = muaj tseeb
Cov ntsiab lus ntawm cov ntsiab lus:
-
Qhov rai
- 61 Colunas thiab 20 Linhas
- Zaub scrollbar desativado
-
Qhov rai> Tshwm Sim
Fonte: Lucida Console, 28px
Kauj Ruam 5: Puas yog?
Txhawm rau txhawm rau txhawm rau txhawm rau, digitize:
?
e pressione [ENTER]
OBS: Caso lossis Estado seja:
-1 -> Cérebro não identificado (corrente aberta) +0 -> Ajustando voltagem+1 -> Tudo certo, tDCS funcionando
Pom zoo:
MIDI-tswj Stepper Motor Nrog Kev Ncaj Ncees Digital Synthesis (DDS) Chip: 3 Cov Kauj Ruam
MIDI-tswj Stepper Motor Nrog Direct Digital Synthesis (DDS) Chip: Puas muaj lub tswv yim phem uas koj tsuas yog yuav tsum tig mus rau hauv qhov project me me? Zoo, Kuv tau ua si ib puag ncig nrog cov duab kos kuv tau ua rau Arduino Vim lub hom phiaj ua suab paj nruag nrog AD9833 Direct Digital Synthesis (DDS) module … thiab qee lub sijhawm kuv xav & q
Qhov Sib Txawv Ntawm (Lwm Yam Tam Sim No & Ncaj Ncees Tam Sim No): 13 Kauj Ruam
Qhov Sib Txawv Ntawm (Lwm Yam Tam Sim No & Tam Sim No Tam Sim No): Txhua tus paub tias hluav taws xob feem ntau yog Dc, tab sis li cas txog lwm hom hluav taws xob? Koj puas paub Ac? AC sawv rau dab tsi? Puas yog nws siv tau DC? Hauv txoj kev tshawb no peb yuav paub qhov sib txawv ntawm hom hluav taws xob, qhov chaw, daim ntawv thov
Ib-tes Ncaj Ncaj Ncaj Ncaj Ncaj Ncaj Ncaj Ncaj Qab Zib rau Quadriplegics: 5 Kauj Ruam
Ib-tes Ncaj Ncaj Ncaj Ncaj Ncaj Ncaj Ncaj rau Quadriplegics: Peb tsim cov qauv ntawm ib txhais tes ncaj plaub hau ncaj rau quadriplegics siv yam tsis muaj ntiv tes txawj ua
ESP8266 Kev Sib Txuas Cov Ntaub Ntawv Ncaj Ncees: 3 Cov Kauj Ruam
ESP8266 Kev Sib Txuas Cov Ntaub Ntawv Ncaj Ncees: Taw Qhia Thaum ua tiav qee qhov haujlwm nrog Arduinos thiab nRF24l01 modules Kuv xav tsis thoob yog tias kuv tuaj yeem txuag qee qhov kev siv zog los ntawm kev siv ESP8266 tus qauv. Qhov zoo ntawm ESP8266 tus qauv yog tias nws muaj lub micro tswj ntawm lub nkoj, yog li tsis muaj
Hloov Cov Ncaj Ncaj Ncaj Ncaj Ncaj mus rau Txoj Cai Lub Taub Hau (hauv Pinch): 4 Cov Kauj Ruam
Hloov Cov Ncaj Ncaj Ncaj Ncaj Ncaj Ncaj Ncaj Ncaj Ncaj Ncaws Ncaws Ncaws Ncaws Ncaws Pob (hauv Pinch): Tom qab pom qhov kev tshaj tawm rau kev sib tw arduino, kuv hais tias, hav zoo vim li cas ho tsis sim. Yog li kuv kinda cheaped tawm thiab tau txais cov khoom siv pob txha liab qab, nrog lub hom phiaj ntawm "ua nws txoj hauv kev". Ib qho ntawm cov kev hloov pauv no yog ib yam ntawm thawj yam uas koj