Índice:
- Etapa 1: Saiba Mais
- Etapa 2: Monte O Circuito Abaixo
- Etapa 3: Instale O Código No Seu Arduino
- Etapa 4: Uma UI Personalizada
- Etapa 5: Dúvidas?
Vídeo: Arduino TDCS Super Simples. Estimulador de corrente contínua transcraniana (tDCS) Faça você mesmo: 5 etapas
2024 Autor: John Day | [email protected]. Última modificação: 2024-01-30 11:37
Para fazer este tDCS você só precisa 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 para GND.
- Resistor (~ 470 Ω, mas provavelmente entre 300-1000 Ω funciona, você deseja alterar no código fonte)
- Capacitor (220 μF). Servir 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).
Etapa 1: Saiba Mais
Você deve ler mais sobre tDCS primeiro. Não é aprovado pelo FDA e pode ser prejudicial à sua saúde, principalmente se você não sabe nada sobre os efeitos associados, precauções e dentre outros…
Etapa 2: Monte O Circuito Abaixo
Não se esqueça das esponjas com água salina!
Etapa 3: Instale O Código No Seu Arduino
Lembre-se de alterar as configurações e parâmetros 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 para Carriage Return.
O código fonte + tutorial também podem ser encontrados no repositório:
Código:
const String ver = "2.0m"; // PARAMS DE HARDWARE const int analogInPin = A0; // Entrada do Analógico const int analogOutPin = 13; // Saida D13 padrão float maxOutV = 5.0; // Uma 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]
// PARAMS CONFIGURÁVEIS
plotter bool = falso; // Defina: verdadeiro, caso esteja usando o Serial plotter bool putty = false; // Defina: verdadeiro, 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
estado interno = 1; / * -1 - Cérebro não identificado 0 - Voltagem alterada para definir a corrente padrão 1 - Tudo certo. Você esta na corrente definida -10 - Voltagem desligada * / float outV = maxOutV; // Voltagem int debumped_state = 0; zeros_len int = 0; float smoothed_mA = 0;
String commandString = ""; // para CLI
// AJUDANTES DE FEEDBACK
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; // retorna maxOutV / 5.0; // para segurança} estado = 0; retornar 0,1 * novo_V + 0,9 * V; // return new_V; }
int convertVtoOutputValue (float V) {
restrição de retorno (int (V / maxOutV * 255), 0, 255); }
float sensorValue2mA (int sensorValue) {
float sensorVoltage = sensorValue / 1023.0 * maxRefInV; flutuante sensor_mA = sensorVoltage / R * 1000,0; return sensor_mA; }
int debumped_state_compute (int state) {
if (estado 5) retorna 0; } return 1; }
início longo sem sinal, fimc;
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)); debounce_state = debumped_state_compute (estado); // Exibir informações no CLI endc = (millis () - início) / 1000; String tv = "[", ttm = "mA /", tsm = "V,", ts = "mA] | Estado:", h = "| Tempo:", s = ":", leadM = "", leadS = "", plotT = "Alvo:", plotmA = "\ tSmoothed MA:", plotMin = "\ tMin:", tempo; tmin longo sem sinal = endc / 60 - ((endc / 60)% 1); // Formatação if (endc% 60 <10) leadS = "0"; se (tmin = 0) ts = ts + "+"; // Parar automaticamente if (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 + debumped_state + h + tempo; if (massa) Serial.print ("\ r / e [? 25l" + txt); else Serial.println (txt);
// aguarde 2 milissegundos antes do próximo loop
// para o conversor analógico-digital estabilizar // após a última leitura: delay (5); }
void stop_device () {
estado = -10; analogWrite (analogOutPin, 0); clearAndHome (); Serial.println ("Sessão tDCS interrompida"); Serial.println ("------------------------"); ajuda(); }
// CLI HELPERS
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 (""); }
void help () {
Serial.println ("tDSC arduino, versão" + versão); 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 ("'massa' - muda a formatação de saída pro PuTTY"); Serial.println ("'parar' - para a estimulação"); Serial.println ("'reiniciar' - inicia / reinicia a estimulação & o cronômetro"); 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 ("Ohms"); }
bool parse_param (String & cmdString) {
int spacePos = cmdString.indexOf (''); if (spacePos <= 0) retorna falso; String command = cmdString.substring (0, spacePos); String fval = cmdString.substring (spacePos + 1); if (command == "putty") if (fval == "true") {putty = true; return true; } else if (fval == "false") {putty = false; return true; } float val = fval.toFloat (); if (comando == "target_mA") {if (val100.0) {return false; } target_mA = val; clearAndHome (); ajuda(); } else if (command == "epsilon_mA") {if (val0.3) {return false; } epsilon_mA = val; clearAndHome (); ajuda(); } else if (command == "R") {R = val; clearAndHome (); ajuda(); } else if (command == "max_time") {maxmin = val; clearAndHome (); ajuda(); } else {return false; } return true; }
// CONFIGURAÇÃO E LOOP PRINCIPAL
void setup () {Serial.begin (115200); analogReference (INTERNAL); //1.1 V Serial.print ("Sessão explicada!"); início = milis (); } void loop () {if (state! = - 10) {process_feedback (); } if (Serial.available ()> 0) {char v = Serial.read (); if (byte (v) == 13) {// Retorno de carro bool aceito = verdadeiro; if (commandString == "?" || commandString == "stop") {stop_device (); } else if (commandString == "reiniciar") {clearAndHome (); estado = -1; outV = maxOutV / 5.0; início = milis (); aceito = falso; } else if (commandString == "continue") {clearAndHome (); estado = -1; outV = maxOutV / 5.0; aceito = falso; } else {bool ok = parse_param (commandString); if (! ok) {clearAndHome (); ajuda(); aceito = falso; Serial.println ("Comando desconhecido: '" + commandString + "'"); }} commandString = ""; if (aceito) {clearAndHome (); ajuda(); Serial.println ("Ok!"); }} else {commandString + = v; if (estado == - 10) {Serial.print (v); }}}}
Etapa 4: Uma UI Personalizada
Para melhor acompanhamento e segurança, utilizar uma ferramenta PuTTY, e definir no código fonte:
putty = true
Recomendações de definições:
- Janela
- 61 Colunas e 20 Linhas
- Display scrollbar desativado
- Janela> Aparência
Fonte: Lucida Console, 28px
Etapa 5: Dúvidas?
Para abrir um 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 funcionando
Recomendado:
Lente macro faça você mesmo com AF (diferente de todas as outras lentes macro faça você mesmo): 4 etapas (com fotos)
Lente macro faça você mesmo com AF (diferente de todas as outras lentes macro faça você mesmo): Já vi muitas pessoas fazendo lentes macro com um kit de lentes padrão (geralmente de 18-55 mm). A maioria deles são lentes fixadas na câmera ao contrário ou com o elemento frontal removido. Existem desvantagens para ambas as opções. Para montar a lente
A diferença entre (corrente alternativa e corrente contínua): 13 etapas
A diferença entre (corrente alternativa e corrente contínua): Todo mundo sabe que a eletricidade é principalmente CC, mas que tal outro tipo de eletricidade? Você conhece o Ac? O que AC significa? É utilizável, então, DC? Neste estudo saberemos a diferença entre os tipos de eletricidade, fontes, aplicações
Construir um Mini Sistema Hidropônico Faça Você Mesmo e Jardim de Ervas Hidropônico Faça Você Mesmo com Alertas de WiFi: 18 etapas
Construa um Mini Sistemas Hidropônicos DIY e Jardim de Ervas Hidropônico DIY com Alertas de WiFi: Neste tutorial, mostraremos como construir um sistema #DIY #hidropônico. Este sistema hidropônico DIY regará em um ciclo de irrigação hidropônico personalizado com 2 minutos ligado e 4 minutos desligado. Ele também monitorará o nível de água do reservatório. Este sistema
Atualize a panela de autorregulação faça você mesmo com Wi-Fi em um alarme de sentinela de detecção de movimento faça-você-mesmo plantador: 17 etapas
Atualize a panela self-watering DIY com Wi-Fi em um alarme Sentry de detecção de movimento DIY Plantador: neste artigo, mostraremos como atualizar sua panela self-watering DIY com WiFi para uma panela self-watering DIY com Wi-Fi e alarme Sentry de detecção de movimento. Se você não leu o artigo sobre como construir uma panela autônoma do tipo faça-você-mesmo com Wi-Fi, pode encontrar
Amplificador de áudio super simples faça você mesmo: 8 etapas
Amplificador de áudio super simples DIY: Ei! todos Meu nome é Steve. Hoje vou mostrar a vocês como fazer um amplificador portátil de 30 watts de uma maneira muito simples Clique aqui para ver o vídeo