Tabla de contenido:
- Paso 1: Saiba Mais
- Paso 2: Monte O Circuito Abaixo
- Paso 3: Instale O Código No Seu Arduino
- Paso 4: Uma UI Personalizada
- Paso 5: ¿Dúvidas?
Video: Arduino TDCS Super Simples. Estimulador de corriente continua transcraneal (tDCS) DIY: 5 pasos
2024 Autor: John Day | [email protected]. Última modificación: 2024-01-30 08:42
Para fazer este tDCS você precisará apenas de um arduino, resistor, capacitor e alguns cabos
-
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.
- Resistencia (~ 470 Ω, mas provavelmente entre 300-1000 Ω funciona, você precisará alterar sin código fuente)
- Condensador (220 μF). Sirve para estabilizar os pulsos do PWM.
- Eletrodos de Esponja (Use á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).
Paso 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, precações e dentre outros…
Paso 2: Monte O Circuito Abaixo
Não se esqueça das esponjas com água salina!
Paso 3: Instale O Código No Seu Arduino
Lembre-se de alterar como configuraciones y parámetros en el área de PARAMS DE HARDWARE y PARAMS CONFIGURABLES.
Você também deve alterar o boud rate do Serial para: 115200 para poder ver o resultado.
Para ejecutar comandos, troque o No Line Ending para Carriage Return.
O código fuente + tutorial también podem ser encontrado sin repositorio:
Código:
const String ver = "2.0m"; // PARAMS DE HARDWARE const int analogInPin = A0; // Entrada del 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]
// PARAMES CONFIGURABLES
plotter bool = falso; // 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 (en minutos) necesario para desligar [Min] float target_mA = 2.73; // Essa é a corrente que passará pelo seu cérebro !!! [mA] flotador épsilon_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 GLOBALES
int estado = 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; flotador suavizado_mA = 0;
String commandString = ""; // para CLI
// AYUDANTES DE RETROALIMENTACIÓN
float computeOutVoltage (float V, float new_mA) {if (abs (new_mA-target_mA) maxOutV) {estado = -1; // resistência muito alta -> cérebro não encontrado? return maxOutV; // devuelve maxOutV / 5.0; // para segurança} state = 0; return 0.1 * new_V + 0.9 * V; // devuelve new_V; }
int convertVtoOutputValue (float V) {
devolver restricción (int (V / maxOutV * 255), 0, 255); }
float sensorValue2mA (int sensorValue) {
flotador sensorVoltage = sensorValue / 1023.0 * maxRefInV; flotador sensor_mA = sensorVoltage / R * 1000.0; return sensor_mA; }
int debounced_state_compute (int estado) {
si (estado 5) devuelve 0; } return 1; }
inicio largo sin firmar, endc;
void process_feedback () {int sensorValue = analogRead (analogInPin); flotar new_mA = sensorValue2mA (sensorValue); suavizado_mA = 0.2 * nuevo_mA + 0.8 * suavizado_mA; float V = outV; outV = computeOutVoltage (V, new_mA); analogWrite (analogOutPin, convertVtoOutputValue (outV)); debounced_state = debounced_state_compute (estado); // Exibir informações no CLI endc = (millis () - start) / 1000; Cadena tv = "[", ttm = "mA /", tsm = "V,", ts = "mA] | Estado:", h = "| Tempo:", s = ":", leadM = "", leadS = "", plotT = "Target:", plotmA = "\ tSmoothed MA:", plotMin = "\ tMin:", tempo; unsigned long tmin = endc / 60 - ((endc / 60)% 1); // Formatação if (endc% 60 <10) leadS = "0"; si (tmin = 0) ts = ts + "+"; // Parar automaticamente if (tmin> maxmin) stop_device (); String txt; if (trazador) txt = plotT + target_mA + plotMin + "0" + plotmA + smoothed_mA; else txt = tv + V + tsm + smoothed_mA + ttm + target_mA + ts + debounced_state + h + tempo; if (masilla) Serial.print ("\ r / e [? 25l" + txt); else Serial.println (txt);
// espera 2 milisegundos antes del siguiente ciclo
// para que el convertidor analógico-digital se estabilice // después de la última lectura: delay (5); }
void stop_device () {
estado = -10; analogWrite (analogOutPin, 0); clearAndHome (); Serial.println ("Sessão tDCS interrompida"); Serial.println ("------------------------"); ayuda(); }
// AYUDANTES CLI
void clearAndHome () {Serial.write (27); Serial.print ("[2J"); // limpa a tela Serial.write (27); // ESC Serial.print ("[H"); // / r if (! putty) for (int i = 0; i <= 30; i ++) Serial.println (""); }
ayuda vacía () {
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 ("'masilla' - muda a formatação de saída pro PuTTY"); Serial.println ("'detener' - para una estimulación"); Serial.println ("'reiniciar' - inicia / reinicia a estimulação & o timer"); Serial.println ("'continuar' - 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 ("Ohmios"); }
bool parse_param (String & cmdString) {
int spacePos = cmdString.indexOf (''); if (spacePos <= 0) return false; Comando de cadena = cmdString.substring (0, spacePos); Cadena fval = cmdString.substring (spacePos + 1); if (comando == "putty") if (fval == "true") {putty = true; devuelve verdadero; } más si (fval == "falso") {masilla = falso; devuelve verdadero; } float val = fval.toFloat (); if (comando == "target_mA") {if (val100.0) {return false; } target_mA = val; clearAndHome (); ayuda(); } else if (comando == "epsilon_mA") {if (val0.3) {return false; } épsilon_mA = val; clearAndHome (); ayuda(); } else if (comando == "R") {R = val; clearAndHome (); ayuda(); } else if (comando == "max_time") {maxmin = val; clearAndHome (); ayuda(); } else {devolver falso; } devuelve verdadero; }
// CONFIGURACIÓN Y BUCLE PRINCIPAL
configuración vacía () {Serial.begin (115200); analogReference (INTERNAL); //1.1 V Serial.print ("Sessão iniciada!"); inicio = milis (); } void loop () {if (state! = - 10) {process_feedback (); } if (Serial.available ()> 0) {char v = Serial.read (); if (byte (v) == 13) {// Retorno de carro bool aceptado = verdadero; if (commandString == "?" || commandString == "detener") {stop_device (); } else if (commandString == "reiniciar") {clearAndHome (); estado = -1; outV = maxOutV / 5.0; inicio = milis (); aceptado = falso; } else if (commandString == "continuar") {clearAndHome (); estado = -1; outV = maxOutV / 5.0; aceptado = falso; } else {bool ok = parse_param (commandString); if (! ok) {clearAndHome (); ayuda(); aceptado = falso; Serial.println ("Comando desconhecido: '" + commandString + "'"); }} commandString = ""; if (aceptado) {clearAndHome (); ayuda(); Serial.println ("¡Ok!"); }} else {commandString + = v; if (estado == - 10) {Serial.print (v); }}}}
Paso 4: Uma UI Personalizada
Para melhor acompanhamento e segurança, utilice una ferramenta PuTTY, e defina no código fonte:
masilla = verdadero
Recomendaciones de definiciones:
- Ventana
- 61 Colunas e 20 Linhas
- Mostrar barra de desplazamiento desativado
- Ventana> Apariencia
Fuente: Consola Lucida, 28px
Paso 5: ¿Dúvidas?
Para abrir una guía de ajuda, digite:
?
e pressione [ENTRAR]
OBS: Caso o Estado seja:
-1 -> Cérebro não identificado (corrente aberta) +0 -> Ajustando voltagem + 1 -> Tudo certo, tDCS funcionando
Recomendado:
La diferencia entre (corriente alterna y corriente continua): 13 pasos
La diferencia entre (corriente alternativa y corriente continua): Todo el mundo sabe que la electricidad es principalmente de CC, pero ¿qué tal otro tipo de electricidad? ¿Conoces Ac? ¿Qué significa AC? ¿Es utilizable entonces DC? En este estudio conoceremos la diferencia entre los tipos de electricidad, fuentes, aplicaciones
Controlador de diodo láser DIY -- Fuente de corriente constante: 6 pasos (con imágenes)
Controlador de diodo láser DIY || Fuente de corriente constante: en este proyecto les mostraré cómo extraje un diodo láser de una grabadora de DVD que debería tener el poder de encender una cerilla. Para alimentar el diodo correctamente, también demostraré cómo construyo una fuente de corriente constante que proporciona una precisión
Adaptador de corriente DIY Magic Flight V3.2: 11 pasos
Adaptador de corriente DIY Magic Flight V3.2: comencé este proyecto hace más de un año porque sentí que podía hacer un mejor trabajo que los fabricantes originales. Aquí les presento la versión 3.2. Si tiene curiosidad sobre la versión 1, aquí hay un enlace a mi instructable original: https://www.instructables.com/id
Sensor de corriente DIY para Arduino: 6 pasos
Sensor de corriente de bricolaje para Arduino: Hola, espero que lo estés haciendo bien y en este tutorial te mostraré cómo hice un sensor de corriente para Arduino usando algunos componentes electrónicos muy básicos y una derivación casera. Esta derivación puede manejar fácilmente una gran magnitud de corriente, alrededor
Adaptador de corriente DIY PSP, GPS, teléfono SonyEricsson y material MiniUSB: 3 pasos
Adaptador de corriente DIY PSP, GPS, SonyEricsson Phone y MiniUSB Cosas: Ok, aquí está la cosa. Si tienes muchos dispositivos, también tienes muchas de esas feas cajas negras: adaptadores de corriente. Cada maldito bloque de alimentación tiene su propio voltaje y conector, ¿verdad? Entonces, ¿necesita de 3 a 5 adaptadores de corriente cada vez que viaja? Incorrecto