Բովանդակություն:
- Քայլ 1: Saiba Mais
- Քայլ 2. Monte O Circuito Abaixo
- Քայլ 3. Տեղադրեք O Código No Seu Arduino
- Քայլ 4: Uma UI Personalizada
- Քայլ 5: Dúvidas?
Video: Arduino TDCS Super Simple: Տրանսկրանալ ուղիղ հոսանքի խթանիչ (tDCS) DIY ՝ 5 քայլ
2024 Հեղինակ: John Day | [email protected]. Վերջին փոփոխված: 2024-01-30 09:48
Para fazer este tDCS você precisará apenas de um arduino, resistor, capacitor e alguns cabos Բաղադրիչներ
-
Արդուինո
- Pino D13- ը օգտագործում է PWM- ը (ծածկագիրը ser alterado):
- Pino A0 como entrada analógica (para feedback de corrente):
- Pino GND apenas para GND.
- Ռեզիստոր (70 470 Ω, mas provavelmente entre 300-1000 Ω գործառույթ, ձայնային ճշգրիտ փոփոխություն ոչ código fonte)
- Կոնդենսատոր (220 μF): Serառայել PWM- ի հաստատման համար:
- Eletrodos de Esponja (Օգտագործեք á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: Saiba Mais
Você deve ler mais sobre tDCS primeiro: FDA- ն կարող է ազդել կանխարգելիչ և հիմնավորված սկզբունքների վրա, որոնք հիմնված են այն բանի վրա, թե ինչպես են դրանք արդյունավետ օգտագործում, կանխարգելում և կանխում…
Քայլ 2. Monte O Circuito Abaixo
Não se esqueça das esponjas com água salina!
Քայլ 3. Տեղադրեք 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 do Serial para: 115200 para poder ver o resultado.
Գործողությունների հրահանգներ, troque o No Line Ending para Carriage Return:
O código fonte + tutorial também podem ser encontrados no repositório:
Código:
const Լարային ver = "2.0 մ"; // HARDWARE PARAMS 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; // Referencia à voltagem analógica [V] բոց R = 470.0; // Resistencia da corrente [Օհմ]
// ԿԱՌՈՎԱ ԱՆԱՉԱԳՆԵՐ
bool plotter = կեղծ; // 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) needário para desligar [Min] float target_mA = 2.73; // Essa é a corrente que passará pelo seu cérebro !!! [mA] բոց 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 պետություն = 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 zeros_len = 0; բոց smoothed_mA = 0;
String commandString = ""; // CLI- ի համար
// Հետադարձ կապի օգնականներ
float computeOutVoltage (float V, float new_mA) {if (abs (new_mA -target_mA) maxOutV) {վիճակ = -1; // resistencia muito alta -> cérebro não encontrado? վերադարձ maxOutV; // վերադարձ maxOutV/5.0; // para segurança} վիճակ = 0; վերադարձ 0.1*new_V+0.9*V; // վերադարձնել նոր_Վ; }
int convertVtoOutputValue (բոց V) {
վերադարձի սահմանափակում (int (V/maxOutV*255), 0, 255); }
float sensorValue2mA (int sensorValue) {
float sensorVoltage = sensorValue/1023.0*maxRefInV; float sensor_mA = sensorVoltage/R*1000.0; վերադարձի տվիչ_մԱ; }
int debounced_state_compute (int state) {
եթե (վիճակ 5) վերադարձ 0; } վերադարձ 1; }
անստորագիր երկար մեկնարկ, վերջ;
void process_feedback () {int sensorValue = analogRead (analogInPin); float new_mA = sensorValue2mA (sensorValue); smoothed_mA = 0.2*new_mA+0.8*smoothed_mA; բոց V = outV; outV = computeOutVoltage (V, new_mA); analogWrite (analogOutPin, convertVtoOutputValue (outV)); debounced_state = debounced_state_compute (վիճակ); // Exibir informações no CLI endc = (millis ()-սկիզբ)/1000; String tv = "[", ttm = "mA/", tsm = "V", ts = "mA] | Էստադո` ", h =" | poամանակը `", s = ":", leadM = "", leadS = "", plotT = "Target:", plotmA = "\ tSmoothed MA:", plotMin = "\ tMin:", տեմպ; անստորագիր երկար tmin = endc/60-((endc/60)%1); // Ձևաչափում, եթե (վերջ%60 <10) leadS = "0"; եթե (tmin = 0) ts = ts + " +"; // Պարամետրերի ավտոմատացում եթե (tmin> maxmin) stop_device (); Լարային txt; if (plotter) txt = plotT + target_mA + plotMin + "0" + plotmA + smoothed_mA; else txt = tv + V + tsm + smoothed_mA + ttm + target_mA + ts + debounced_state + h + tempo; եթե (ծեփոն) Serial.print ("\ r / e [? 25l" + txt); այլապես Serial.println (txt);
// սպասեք 2 միլիվայրկյան առաջ հաջորդ հանգույցին
// որպեսզի անալոգային-թվային փոխարկիչը կարգավորվի // վերջին ընթերցումից հետո. հետաձգում (5); }
void stop_device () {
վիճակ = -10; analogWrite (analogOutPin, 0); clearAndHome (); Serial.println ("Sessão tDCS interrompida"); Serial.println ("------------------------"); Օգնություն(); }
// CLI ՕԳՆՈՆՆԵՐ
դատարկություն clearAndHome () {Serial.write (27); Serial.print ("[2J"); // limpa a tela Serial.write (27); // ESC Serial.print ("[H"); // / r եթե (! մածիկ) for (int i = 0; i <= 30; i ++) Serial.println (""); }
անվավեր օգնություն () {
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 target (mA)"); Serial.println ("'epsilon_mA' - atualiza o epsilon_mA (mA)"); Serial.println ("'R' - atualiza a resistencia do hardware (Ohm)"); Serial.println ("'ծեփոն' - muda a formatação de saída pro PuTTY"); Serial.println ("'stop' - para a estulação"); Serial.println ("'վերագործարկում' - inicia/reinicia a estestulação & o timer"); Serial.println ("'շարունակել' - Continua a estestulação"); 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 («Օմ»); }
bool parse_param (String & cmdString) {
int spacePos = cmdString.indexOf (''); եթե (spacePos <= 0) վերադարձնել կեղծ; Լարային հրաման = cmdString.substring (0, spacePos); String fval = cmdString.substring (spacePos+1); եթե (հրաման == "ծեփոն") եթե (fval == "ճշմարիտ") {ծեփոն = ճշմարիտ; վերադարձնել ճշմարիտ; } else if (fval == "false") {putty = false; վերադարձնել ճշմարիտ; } float val = fval.toFloat (); if (հրաման == "target_mA") {if (val100.0) {return false; } target_mA = val; clearAndHome (); Օգնություն(); } else if (հրաման == "epsilon_mA") {if (val0.3) {return false; } epsilon_mA = val; clearAndHome (); Օգնություն(); } else if (հրաման == "R") {R = val; clearAndHome (); Օգնություն(); } else if (հրաման == "max_time") {maxmin = val; clearAndHome (); Օգնություն(); } else {return false; } վերադառնալ ճշմարիտ; }
// ԿԱՐԳԱՎՈՐՈՄ ԵՎ ՀԻՄՆԱԿԱՆ OOԱՆ
void setup () {Serial.begin (115200); analogReference (INTERNAL); //1.1 V Serial.print ("Sessão iniciada!"); սկիզբ = millis (); } void loop () {if (state! =-10) {process_feedback (); } if (Serial.available ()> 0) {char v = Serial.read (); եթե (բայթ (v) == 13) {// Վագոնի վերադարձի բուլը ընդունված է = ճշմարիտ; if (commandString == "?" || commandString == "stop") {stop_device (); } else if (commandString == "վերագործարկել") {clearAndHome (); վիճակ = -1; outV = maxOutV/5.0; սկիզբ = millis (); ընդունված = կեղծ; } else if (commandString == "շարունակել") {clearAndHome (); վիճակ = -1; outV = maxOutV/5.0; ընդունված = կեղծ; } else {bool ok = parse_param (commandString); եթե (! լավ) {clearAndHome (); Օգնություն(); ընդունված = կեղծ; Serial.println ("Comando desconhecido: '" + commandString + "'"); }} commandString = ""; եթե (ընդունված է) {clearAndHome (); Օգնություն(); Serial.println («Լավ»); }} else {commandString+= v; if (վիճակ ==-10) {Serial.print (v); }}}}
Քայլ 4: Uma UI Personalizada
Para melhor acompanhamento e segurança, use a ferramenta PuTTY, e definina no código fonte:
մածիկ = ճշմարիտ
Recomandações de definições:
-
Պատուհան
- 61 Colunas e 20 Linhas
- Displayուցադրել ոլորման ցանկալի տարբերակը
-
Պատուհան> Արտաքին տեսք
Հիմնապատկեր ՝ Lucida վահանակ, 28 պիքսել
Քայլ 5: Dúvidas?
Para abrir a guia de ajuda, digite:
?
e pressione [ENTER]
OBS: Caso o Estado seja:
-1 -> Cérebro não identificado (corrente aberta) +0 -> Ajustando voltagem+1 -> Tudo certo, tDCS գործառույթ
Խորհուրդ ենք տալիս:
Տարբերությունը (այլընտրանքային և ուղիղ հոսանքի) միջև `13 քայլ
Տարբերությունը (այլընտրանքային և ուղիղ հոսանքի) միջև. Բոլորը գիտեն, որ էլեկտրաէներգիան հիմնականում Dc է, իսկ ինչ վերաբերում է մեկ այլ տեսակի էլեկտրաէներգիային: Գիտե՞ք Ac- ին: Ի՞նչ է նշանակում AC- ը: Կարելի՞ է օգտագործել այն DC- ի դեպքում: Այս ուսումնասիրության ընթացքում մենք կիմանանք տարբերությունը էլեկտրաէներգիայի տեսակների, աղբյուրների, կիրառման միջև
Ինչպես սկսել խաղային ուղիղ հեռարձակում ՝ 9 քայլ
Ինչպես սկսել խաղային ուղիղ հեռարձակում. Այս Instructables- ը ձեզ ցույց կտա, թե ինչպես ստեղծել հոսք ՝ օգտագործելով Open Broadcaster Software կամ OBST ՝ ձեր ուղիղ հեռարձակումը OBS- ի միջոցով սկսելու համար դուք կցանկանաք հետևյալ բաները. Ձեր խաղը վարելու ունակ համակարգիչ և հոսքային փափուկ պատերազմը
Ինչպես ապրել ուղիղ հոսքով ՝ օգտագործելով Raspberry Pi: 5 քայլ
Ինչպես ապրել հոսքով ՝ օգտագործելով Raspberry Pi: Այս ձեռնարկում մենք կսովորենք, թե ինչպես պատրաստել մեր սեփական տեսախցիկը ՝ օգտագործելով Raspberry Pi- ն: Դուք կարող եք մուտք գործել այս հոսք ցանկացած սարքի միջոցով, քանի դեռ այն միացված է նույն ցանցին, ինչպիսին է RPi- ն:
Ուղիղ 4G/5G HD վիդեո հոսք DJI Drone- ից ցածր ուշացման ժամանակ [3 քայլ] ՝ 3 քայլ
Ուղիղ 4G/5G HD վիդեո հոսք DJI Drone- ից ՝ ցածր ուշացումով [3 քայլ]. Հետևյալ ուղեցույցը կօգնի ձեզ ուղիղ HD որակի տեսաերիզներ ստանալ գրեթե ցանկացած DJI անօդաչու սարքից: FlytOS բջջային հավելվածի և FlytNow վեբ հավելվածի օգնությամբ դուք կարող եք սկսել տեսանյութեր հեռարձակել անօդաչու սարքից
Ինչպես տեղադրել վառարանի խթանիչ երկրպագու էժան գնով. 8 քայլ
Ինչպես տեղադրել վառարանների խթանիչ երկրպագու էժան գնով. Մեր գլխավոր ննջասենյակը միշտ կամ սառը է ձմռանը, կամ շոգը ամռանը: Այն, որ շինարարը խառնաշփոթ է առաջացրել ՝ սենյակում տեղադրելով ընդամենը մեկ գրանցամատյան, և սենյակը հենց ավտոտնակից վերև է, նույնպես չի օգնում: Թվային ջերմաչափի օգտագործումը