Inhoudsopgave:
- Stap 1: Saiba Mais
- Stap 2: Monte O Circuito Abaixo
- Stap 3: Installeer O Código No Seu Arduino
- Stap 4: Uma UI Personalizada
- Stap 5: Duvidas?
Video: Arduino TDCS Supersimpels. Transcraniële gelijkstroomstimulator (tDCS) DIY - Ajarnpa
2024 Auteur: John Day | [email protected]. Laatst gewijzigd: 2024-01-30 11:17
Para fazer este tDCS você precisará apenas de um arduino, weerstand, condensator en 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 voor GND.
- Weerstand (~470, mas provavelmente entre 300-1000 Ω funciona, você precisará alterar no código fonte)
- Condensator (220 F). Serveer para estabilizar en pulsen do PWM.
- Eletrodos de Esponja (Gebruik água salina para molhá-lo).
Como functie
O Arduino rekent een corrente padrão (pode ser alterado) uit om te zien welke apenas of mudar a voltagem de saída. Você também pode alterar o valor do target_mA pelo serial CLI (Console).
Stap 1: Saiba Mais
Você deve ler mais sobre tDCS primeiro. Geen enkele goedkeuring van de FDA en een mogelijke nadelige invloed van de wet op de mogelijke gevolgen van de schade…
Stap 2: Monte O Circuito Abaixo
Geen esqueça das esponjas com água salina!
Stap 3: Installeer O Código No Seu Arduino
Dit is een alternatief voor configuraties en parameters voor HARDWARE-PARAMES en CONFIGUREERBARE PARAMS.
Você também deve alterar o boud rate do Serial para: 115200 para poder ver o resultado.
Para executar comandos, troque o No Line Ending para Carriage Return.
O código fonte + tutorial também podem ser encontrados no repositório:
Code:
const String ver = "2.0m"; //HARDWAREPARAMES const int analogInPin = A0; // Entrada do Analógico const int analogOutPin = 13; // Saida D13 padrão float maxOutV = 5.0; // Een voltage van de PWM padro do Arduino [V] float maxRefInV = 1.1; // Referencia à voltagem analógica [V] float R = 470,0; // Weerstand van corrente [Ohm]
// CONFIGUREERBARE PARAMES
bool plotter = onwaar; // 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) noodzakelijk voor het instellen [Min] float target_mA = 2,73; // Essa é a corrente que passará pelo seu cérebro!!! [mA] float epsilon_mA = 0,03; // Diferença máxima entre a corrente real e o target_mA (No altere caso não saiba o que está fazendo!)
//INIT GLOBALS
int-status = 1; /* -1 - Cerebro não identificado 0 - Voltagem sendo alterada para definir a corrente padrão 1 - Tudo certo. Você esta corrente definida -10 - Voltagem desligada */ float outV = maxOutV; // Voltagem int debounced_state = 0; int nullen_len = 0; float smoothed_mA=0;
String commandString = ""; //voor CLI
//FEEDBACK HELPERS
float computeOutVoltage(float V, float new_mA){ if(abs(new_mA-target_mA)maxOutV){ state = -1; // resistência muito alta -> cérebro não encontrado? retour maxOutV; // retour maxOutV/5.0; // para segurança } staat = 0; retourneer 0.1*new_V+0.9*V; // retourneer nieuwe_V; }
int convertVtoOutputValue(float V){
retourbeperking (int(V/maxOutV*255), 0, 255); }
vlottersensorWaarde2mA(int sensorWaarde){
vlottersensorVoltage = sensorValue/1023,0*maxRefInV; vlottersensor_mA = sensorVoltage/R*1000,0; retour sensor_mA; }
int debounced_state_compute(int staat){
als (status 5) retourneert 0; } retour 1; }
niet ondertekend lange start, endc;
void process_feedback () {int sensorValue = analogRead (analogInPin); float new_mA = sensorValue2mA (sensorValue); smoothed_mA = 0.2*new_mA+0.8*smoothed_mA; vlotter V = uitV; outV = computeOutVoltage (V, nieuwe_mA); analogWrite(analogOutPin, convertVtoOutputValue(outV)); debounced_state = debounced_state_compute(staat); // Exibir informações no CLI endc = (millis()-start)/1000; String tv = "[", ttm = "mA/", tsm = "V, ", ts = "mA] | Estado: ", h = " | Tempo: ", s = ":", leadM = "", leadS = "", plotT = "Doel: ", plotmA = "\tSmoothed MA: ", plotMin = "\tMin:", tempo; unsigned long tmin = endc/60-((endc/60)%1); // Formatação if (endc%60<10) leadS = "0"; als (tmin=0) ts = ts + "+"; // Parar automatisch als (tmin>maxmin) stop_device(); Tekenreeks txt; if (plotter) txt = plotT + target_mA + plotMin + "0" + plotmA + smoothed_mA; anders txt = tv + V + tsm + smoothed_mA + ttm + target_mA + ts + debounced_state + h + tempo; if (putty) Serial.print("\r\e[?25l" + txt); anders Serial.println(txt);
// wacht 2 milliseconden voor de volgende lus
// voor de analoog-naar-digitaal omzetter om te regelen // na de laatste lezing: vertraging (5); }
ongeldig stop_device(){
staat = -10; analogWrite(analogOutPin, 0); clearAndHome(); Serial.println("Sessão tDCS interrompida"); Serial.println ("------------------------"); helpen(); }
//CLI HELPERS
void clearAndHome() { Serial.write(27); Serial.print("[2J"); // limpa een tela Serial.write(27); // ESC Serial.print ("[H"); // \r if (!putty) for (int i = 0; i<=30; i++) Serial.println(""); }
ongeldige hulp(){
Serial.println("tDSC arduino, ver "+ver); Serial.println("'?' - ajuda"); Serial.println("'max_time' - atualize of tempo max (em minutos)"); Serial.println("'target_mA' - atualize of target (mA)"); Serial.println("'epsilon_mA ' - atualiza of epsilon_mA (mA)"); Serial.println ("'R ' - atualiza a resistência do hardware (Ohm)"); Serial.println("'putty ' - een opmaak voor de pro PuTTY"); Serial.println("'stop' - voor een schatting"); Serial.println("'restart' - inicia/reinicia a estimulação & o timer"); Serial.println("'doorgaan' - wordt geschat"); Serial.print("\n\rEstado:\n\r * max_time: "); Seriële.afdruk (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: "); Serieafdruk(R); Serial.println ("Ohm"); }
bool parse_param(String &cmdString){
int spacePos = cmdString.indexOf(' '); if(spacePos<=0) retourneer false; Tekenreeksopdracht = cmdString.substring (0, spacePos); String fval = cmdString.substring(spacePos+1); if(command=="putty") if (fval=="true"){ putty = true; retourneer waar; }else if (fval=="false"){ putty = false; retourneer waar; } float val = fval.toFloat(); if(command=="target_mA"){ if(val100.0){ return false; } doel_mA = waarde; clearAndHome(); helpen(); }else if(command=="epsilon_mA"){ if(val0.3){ return false; } epsilon_mA = waarde; clearAndHome(); helpen(); }else if(command=="R"){ R = val; clearAndHome(); helpen(); }else if(command=="max_time"){ maxmin = val; clearAndHome(); helpen(); }els{ retourneer false; } retourneer waar; }
//SETUP EN HOOFDLUS
void setup() { Serial.begin(115200); analogeReferentie (INTERN); //1.1 V Serial.print ("Sessão iniciada!"); start = millis(); } void loop(){ if(state!=-10){ process_feedback(); } if (Serial.available() > 0){ char v = Serial.read(); if (byte (v) == 13) { // Carriage return bool geaccepteerd = waar; if (commandString == "?" || commandString == "stop"){ stop_device(); }else if (commandString == "herstart"){ clearAndHome(); staat = -1; outV = maxOutV/5,0; start = millis(); geaccepteerd = onwaar; }else if (commandString == "doorgaan"){ clearAndHome(); staat = -1; outV = maxOutV/5,0; geaccepteerd = onwaar; }else{ bool ok = parse_param(commandString); if(!ok){ clearAndHome(); helpen(); geaccepteerd = onwaar; Serial.println ("Commando desconhecido: '" + commandString + "'"); } } commandString = ""; if (geaccepteerd){ clearAndHome(); helpen(); Serial.println("Ok!"); } }anders{ commandString+=v; if(state==-10){ Serial.print(v); } } } }
Stap 4: Uma UI Personalizada
Gebruik een ferramenta PuTTY, e definia no código fonte:
stopverf = waar
Definitieve aanbevelingen:
-
Raam
- 61 Colunas en 20 Linhas
- Toon schuifbalk desativado
-
Venster > Uiterlijk
Lettertype: Lucida-console, 28px
Stap 5: Duvidas?
Para abrir a guia de ajuda, digite:
?
e druk [ENTER]
OBS:Caso of Estado zie:
-1 -> Cerebro não identificado (corrente aberta)+0 -> Ajustando voltagem+1 -> Tudo certo, tDCS funcionando
Aanbevolen:
DIY-gameconsole met Arduino: 4 stappen
DIY-gameconsole met Arduino: in deze tutorial laat ik je zien hoe je een gameconsole kunt maken met Arduino nano. Dus als je een gedetailleerde video erover wilt zien, bekijk het dan op mijn YouTube-kanaal
DIY Ambilight met Raspberry Pi en GEEN Arduino! Werkt op elke HDMI-bron: 17 stappen (met afbeeldingen)
DIY Ambilight met Raspberry Pi en GEEN Arduino! Werkt op elke HDMI-bron.: Ik heb een vrij basaal begrip van elektronica, daarom ben ik supertrots op mijn doe-het-zelf Ambilight-opstelling in een eenvoudige houten behuizing met de mogelijkheid om de lichten aan en uit te zetten wanneer en wanneer ik wil. Voor wie niet weet wat een Ambilight is;
Doe-het-zelf draagbaar TDCS-apparaat: 4 stappen
DIY Draagbaar TDCS-apparaat: TDCS (Transcranial Direct Current Stimulation) In deze Instructable zal ik: 1. Begeleidt u bij het maken van een eenvoudig TDCS-apparaat.3. Lay-out van de theorie achter de circuits.2. Introduceer wat onderzoek en leg uit waarom een apparaat als dit de moeite waard is om te maken
Bouw een Human Enhancement Device (Basic TDCS Supply): 3 stappen
Bouw een Human Enhancement Device (Basic TDCS Supply): Deze Instructable is geciteerd door een gerenommeerde bron (pdf-link)! Citaat #10 in de paper "New tools for neuroenhancement- hoe zit het met neuro-ethiek?"(html link) Croat Med J. 2016 aug; 57 (4): 392 - 394. doi: 10.3325/cmj.2016.57.392
Goedkoopste Arduino -- Kleinste Arduino -- Arduino Pro Mini -- Programmeren -- Arduino Neno: 6 stappen (met afbeeldingen)
Goedkoopste Arduino || Kleinste Arduino || Arduino Pro Mini || Programmeren || Arduino Neno:…………………………….. ABONNEER aub op mijn YouTube-kanaal voor meer video's……. Dit project gaat over hoe je een kleinste en goedkoopste arduino ooit kunt aansluiten. De kleinste en goedkoopste arduino is arduino pro mini. Het lijkt op arduino