Innehållsförteckning:
- Steg 1: Saiba Mais
- Steg 2: Monte O Circuito Abaixo
- Steg 3: Installera O Código No Seu Arduino
- Steg 4: Uma UI Personalizada
- Steg 5: Dúvidas?
Video: Arduino TDCS Super Simples. Transkraniell likströmstimulator (tDCS) DIY: 5 steg
2024 Författare: John Day | [email protected]. Senast ändrad: 2024-01-30 12:44
Para fazer este tDCS você precisará apenas de um arduino, resistor, capacitor e alguns cabosComponentes
-
Arduino
- Pino D13 som PWM (pode ser alterado).
- Pino A0 como entrada analógica (para feedback de corrente).
- Pino GND apenas para GND.
- Motstånd (~ 470 Ω, mas provavelmente entre 300-1000 Ω funciona, você precisará alterar no código fonte)
- Kondensator (220 μF). Servera para estabilizar os pulsos do PWM.
- Eletrodos de Esponja (Använd á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 valour do target_mA pelo serial CLI (Console).
Steg 1: Saiba Mais
Você deve ler mais sobre tDCS primeiro. Não é aprovado pelo FDA och pode ser prejudicial a sua saúde, principalmente se você não sabe nada sobre os efeitos colaterais, precauções and dentre outros …
Steg 2: Monte O Circuito Abaixo
Não se esqueça das esponjas com água salina!
Steg 3: Installera 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.
Para executar comandos, troque o No Line Ending för Carriage Return.
O código fonte + tutorial também podem ser encontrados no repositório:
Kod:
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 voltagem de saída PWM padrão do Arduino [V] float maxRefInV = 1.1; // Referencia à voltagem analógica [V] float R = 470,0; // Resistencia da corrente [Ohm]
// KONFIGURERbara PARAM
bool plotter = falskt; // Defina: true, caso esteja usando o Seriell plotter bool kitt = false; // Defina: true, caso esteja usando o PuTTT (pode ser alterado no CLI) int maxmin = 30; // Tempo (em minutos) necessário para desligar [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 (Não altere caso não saiba o que está fazendo!)
// INIT GLOBALS
int tillstånd = 1; /* -1 - Cérebro não identifierado 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; float smoothed_mA = 0;
String commandString = ""; // för CLI
// FEEDBACK HJÄLPARE
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? return maxOutV; // return maxOutV/5.0; // para segurança} state = 0; retur 0,1*new_V+0,9*V; // returnera new_V; }
int convertVtoOutputValue (float V) {
returbegränsning (int (V/maxOutV*255), 0, 255); }
float sensorValue2mA (int sensorValue) {
float sensorVoltage = sensorValue/1023.0*maxRefInV; float sensor_mA = sensorVoltage/R*1000.0; retur sensor_mA; }
int debounced_state_compute (int -tillstånd) {
om (tillstånd 5) returnerar 0; } return 1; }
osignerad långstart, slutc;
void process_feedback () {int sensorValue = analogRead (analogInPin); float new_mA = sensorValue2mA (sensorValue); smoothed_mA = 0,2*new_mA+0,8*smoothed_mA; float V = outV; outV = computeOutVoltage (V, new_mA); analogWrite (analogOutPin, convertVtoOutputValue (outV)); debounced_state = debounced_state_compute (tillstånd); // Exibir informações no CLI endc = (millis ()-start)/1000; String tv = "[", ttm = "mA/", tsm = "V,", ts = "mA] | Estado:", h = "| Tempo:", s = ":", leadM = "", leadS = "", plotT = "Target:", plotmA = "\ tSmoothed MA:", plotMin = "\ tMin:", tempo; osignerad lång tmin = endc/60-((endc/60)%1); // Formatação if (endc%60 <10) leadS = "0"; om (tmin = 0) ts = ts + " +"; // Parar automaticamente if (tmin> maxmin) stop_device (); String txt; if (plotter) txt = plotT + target_mA + plotMin + "0" + plotmA + smoothed_mA; annars txt = tv + V + tsm + smoothed_mA + ttm + target_mA + ts + debounced_state + h + tempo; if (kitt) Serial.print ("\ r / e [? 25l" + txt); annars Serial.println (txt);
// vänta 2 millisekunder innan nästa slinga
// för att analog-till-digital-omvandlaren ska lösa sig // efter den senaste avläsningen: fördröjning (5); }
void stop_device () {
tillstånd = -10; analogWrite (analogOutPin, 0); clearAndHome (); Serial.println ("Sessão tDCS interrompida"); Serial.println ("------------------------"); hjälp(); }
// CLI -HJÄLPARE
void clearAndHome () {Serial.write (27); Serial.print ("[2J"); // limpa a tela Serial.write (27); // ESC Serial.print ("[H"); // / r if (! kitt) för (int i = 0; i <= 30; i ++) Serial.println (""); }
ogiltig hjälp () {
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 resistência do hardware (Ohm)"); Serial.println ("'kitt' - muda a formatação de saída pro PuTTY"); Serial.println ("'stop' - para a estimulação"); Serial.println ("'restart' - inicia/reinicia a estimulação & o timer"); Serial.println ("'fortsätta' - continua a estimulaçã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 ("Ohms"); }
bool parse_param (String & cmdString) {
int spacePos = cmdString.indexOf (''); om (spacePos <= 0) returnerar false; String -kommando = cmdString.substring (0, spacePos); String fval = cmdString.substring (spacePos+1); if (kommando == "kitt") if (fval == "sant") {kitt = sant; återvända sant; } annars if (fval == "false") {putty = false; återvända sant; } float val = fval.toFloat (); if (command == "target_mA") {if (val100.0) {return false; } target_mA = val; clearAndHome (); hjälp(); } annars if (command == "epsilon_mA") {if (val0.3) {return false; } epsilon_mA = val; clearAndHome (); hjälp(); } annars if (kommando == "R") {R = val; clearAndHome (); hjälp(); } annars if (command == "max_time") {maxmin = val; clearAndHome (); hjälp(); } annat {return false; } återvända sant; }
// INSTÄLLNING OCH MAIN LOOP
void setup () {Serial.begin (115200); analogReference (INTERNAL); //1.1 V Serial.print ("Sessão iniciada!"); start = millis (); } void loop () {if (state! =-10) {process_feedback (); } om (Serial.available ()> 0) {char v = Serial.read (); if (byte (v) == 13) {// Vagnretur bool accepteras = true; if (commandString == "?" || commandString == "stop") {stop_device (); } annars if (commandString == "restart") {clearAndHome (); tillstånd = -1; outV = maxOutV/5.0; start = millis (); accepterad = falsk; } annars if (commandString == "fortsätt") {clearAndHome (); tillstånd = -1; outV = maxOutV/5.0; accepterad = falsk; } annat {bool ok = parse_param (commandString); om (! ok) {clearAndHome (); hjälp(); accepterad = falsk; Serial.println ("Comando desconhecido: '" + commandString + "'"); }} commandString = ""; om (accepterat) {clearAndHome (); hjälp(); Serial.println ("Ok!"); }} else {commandString+= v; if (state ==-10) {Serial.print (v); }}}}
Steg 4: Uma UI Personalizada
Para melhor acompanhamento e segurança, använd en ferramenta PuTTY, och defina no código fonte:
kitt = sant
Recomendações de definições:
-
Fönster
- 61 Colunas e 20 Linhas
- Visa scrollbar desativado
-
Fönster> Utseende
Funktion: Lucida Console, 28px
Steg 5: Dúvidas?
Para abrir a guia de ajuda, siffror:
?
e pressione [ENTER]
OBS: Caso o Estado seja:
-1 -> Cérebro não identifierado (corrente aberta) +0 -> Ajustando voltagem+1 -> Tudo certo, tDCS funcionando
Rekommenderad:
DIY bärbar TDCS -enhet: 4 steg
DIY bärbar TDCS -enhet: TDCS (transkraniell likströmsstimulering) I denna instruktionsbok kommer jag att: 1. Gå igenom skapandet av en enkel TDCS -enhet. Beskriv teorin bakom kretsarna.2. Presentera lite forskning och förklara varför en sådan enhet är värd att göra
Akustisk levitation med Arduino Uno Steg-för-steg (8-steg): 8 steg
Akustisk levitation med Arduino Uno Steg-för-steg (8-steg): ultraljudsgivare L298N Dc kvinnlig adapter strömförsörjning med en manlig DC-pin Arduino UNOBreadboardHur det fungerar: Först laddar du upp kod till Arduino Uno (det är en mikrokontroller utrustad med digital och analoga portar för att konvertera kod (C ++)
DIY Arduino robotarm, steg för steg: 9 steg
DIY Arduino robotarm, steg för steg: Denna handledning lär dig hur du bygger en robotarm själv
Bygg en Human Enhancement Device (Basic TDCS Supply): 3 steg
Bygg en Human Enhancement Device (Basic TDCS Supply): Denna instruktion har citerats av en ansedd källa (pdf -länk)! Citation nr 10 i tidningen " Nya verktyg för neuroenhancement - hur är det med neuroetik? " (html -länk) Croat Med J. 2016 aug; 57 (4): 392 - 394. doi: 10.3325/cmj.2016.57.392
Ultra Hiper Super Robot Que Pinta, med fler steg: 7 steg
Ultra Hiper Super Robot Que Pinta, nada Más: Tekniken går för närvarande mycket snabbt framåt vilket hjälper och samarbetar i en persons arbete. Genom att veta detta har vi skapat en prototypritningsrobot; Vi vet att detta kan användas i gravyrindustrin, denna robot underlättar arbetet