Съдържание:

Arduino TDCS Super Simples. Транскраниален стимулатор на постоянен ток (tDCS) DIY: 5 стъпки
Arduino TDCS Super Simples. Транскраниален стимулатор на постоянен ток (tDCS) DIY: 5 стъпки

Видео: Arduino TDCS Super Simples. Транскраниален стимулатор на постоянен ток (tDCS) DIY: 5 стъпки

Видео: Arduino TDCS Super Simples. Транскраниален стимулатор на постоянен ток (tDCS) DIY: 5 стъпки
Видео: Can I Use Electricity to Make Her Dance? DIY SHOCK MACHINE 2024, Ноември
Anonim
Arduino TDCS Super Simples. Транскраниален стимулатор на постоянен ток (tDCS) DIY
Arduino TDCS Super Simples. Транскраниален стимулатор на постоянен ток (tDCS) DIY

Para fazer este tDCS você precisará apenas de um arduino, резистор, кондензатор и alguns cabos

  1. Arduino

    • Pino D13 е съвместим с ШИМ (поддръжка на алтернатива).
    • Pino A0 като аналогова ентрада (за обратна връзка от корена).
    • Pino GND apenas para GND.
  2. Резистор (~ 470 Ω)
  3. Кондензатор (220 μF). Сервирайте para estabilizar os pulsos до PWM.
  4. 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. Отидете там, за да промените или доблестта до target_mA пело сериен CLI (конзола).

Стъпка 1: Saiba Mais

Сайба Майс
Сайба Майс

Você deve ler mais sobre tDCS primeiro. Não é aprovado pelo FDA и pode ser prejudicial a sua saúde, principalmente se você não sabe nada sobre os efeitos colaterais, precauções e dentre outros…

Стъпка 2: Monte O Circuito Abaixo

Monte O Circuito Abaixo
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 and parametros na área de HARDWARE PARAMS e CONFIGURABLE PARAMS.

Очаквайте да промените промяната на скоростта на предаване до сериен номер: 115200 за под или до резултата.

Командос за изпълнение на изпълнител, троя o Без завършване на ред за връщане на карета.

O código fonte + tutorial também podem ser encontrados no repositório:

Кодиго:

const String ver = "2.0m"; // ХАРАКТЕРНИ ПАРАМЕТИ const int analogInPin = A0; // Entrada do Analógico const int analogOutPin = 13; // Saida D13 padrão float maxOutV = 5.0; // Напрежение от детайл PWM padrão do Arduino [V] поплавък maxRefInV = 1,1; // Referencia à voltagem analógica [V] поплавък R = 470,0; // Resistencia da corrente [Ом]

// КОНФИГУРАЦИРАНИ ПАРАМЕТИ

bool плотер = невярно; // Определя: true, caso esteja usando o Сериен плотер bool putty = false; // Определя: true, caso esteja usando o PuTTT (pode ser alterado no CLI) int maxmin = 30; // Темпо (em minutos) необходимо за описание [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á fazindo!)

// 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 - Делигадация на напрежение */ float outV = maxOutV; // Voltagem int debounced_state = 0; int нули_лен = 0; float smoothed_mA = 0;

String commandString = ""; // за CLI

// ПОМОЩНИЦИ ЗА ОБРАТНА ВРЪЗКА

float computeOutVoltage (float V, float new_mA) {if (abs (new_mA -target_mA) maxOutV) {state = -1; // резистенция muito alta -> cérebro não encontrado? връщане maxOutV; // връща maxOutV/5.0; // para segurança} състояние = 0; връщане 0,1*new_V+0,9*V; // връща new_V; }

int convertVtoOutputValue (float V) {

връщане ограничение (int (V/maxOutV*255), 0, 255); }

float sensorValue2mA (int sensorValue) {

датчик за поплавък Напрежение = сензорна стойност/1023.0*maxRefInV; float sensor_mA = sensorVoltage/R*1000.0; сензор за връщане_mA; }

int debounced_state_compute (int state) {

if (състояние 5) връща 0; } връщане 1; }

без подпис дълъг старт, endc;

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 без CLI endc = (millis ()-начало)/1000; Низ tv = "[", ttm = "mA/", tsm = "V,", ts = "mA] | Estado:", h = "| Tempo:", s = ":", leadM = "", leadS = "", plotT = "Цел:", plotmA = "\ tSmoothed MA:", plotMin = "\ tMin:", темпо; без знак дълго tmin = endc/60-((endc/60)%1); // Форматиране if (endc%60 <10) leadS = "0"; ако (tmin = 0) ts = ts + " +"; // Parar automaticamente if (tmin> maxmin) stop_device (); Низ txt; ако (плотер) 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 (замазка) Serial.print ("\ r / e [? 25l" + txt); else Serial.println (txt);

// изчакайте 2 милисекунди преди следващия цикъл

// за аналогово-цифровия преобразувател да се утаи // след последното отчитане: delay (5); }

void stop_device () {

състояние = -10; analogWrite (analogOutPin, 0); clearAndHome (); Serial.println ("Sessão tDCS interrompida"); Serial.println ("------------------------"); помогне(); }

// CLI ПОМОЩНИЦИ

void clearAndHome () {Serial.write (27); Serial.print ("[2J"); // limpa a tela Serial.write (27); // ESC Serial.print ("[H"); // / r if (! kitty) за (int i = 0; i <= 30; i ++) Serial.println (""); }

void help () {

Serial.println ("tDSC arduino, ver"+ver); Serial.println ("'?' - ajuda"); Serial.println ("'max_time' - актуализиране на темпото на максимум (em minutos)"); Serial.println ("'target_mA' - настройка на цел (mA)"); Serial.println ("'epsilon_mA' - atualiza o epsilon_mA (mA)"); Serial.println ("'R' - настройка на устойчивост на хардуер (Ом)"); Serial.println ("'шпакловка" - трябва да създава информация за PuTTY "); Serial.println ("'stop' - para a estimulação"); Serial.println ("'restart' - inicia/reinicia a estimulação & o timer"); Serial.println ("'continue' - 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) връща false; Команда за низ = cmdString.substring (0, spacePos); Низ fval = cmdString.substring (spacePos+1); if (команда == "kitty") if (fval == "true") {putty = true; връщане true; } else if (fval == "false") {putty = false; връщане true; } float val = fval.toFloat (); if (команда == "target_mA") {if (val100.0) {return false; } target_mA = val; clearAndHome (); помогне(); } else if (command == "epsilon_mA") {if (val0.3) {return false; } epsilon_mA = val; clearAndHome (); помогне(); } else if (команда == "R") {R = val; clearAndHome (); помогне(); } else if (command == "max_time") {maxmin = val; clearAndHome (); помогне(); } else {return false; } return true; }

// НАСТРОЙКА И ОСНОВЕН КЪМ

void setup () {Serial.begin (115200); analogReference (ВНУТРЕННИ); //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) {// Bool за връщане на каретка приет = true; if (commandString == "?" || commandString == "stop") {stop_device (); } else if (commandString == "restart") {clearAndHome (); състояние = -1; outV = maxOutV/5.0; start = millis (); приет = невярно; } else if (commandString == "continue") {clearAndHome (); състояние = -1; outV = maxOutV/5.0; приет = невярно; } else {bool ok = parse_param (commandString); if (! ok) {clearAndHome (); помогне(); приет = невярно; Serial.println ("Comando desconhecido: '" + commandString + "'"); }} commandString = ""; ако (прието) {clearAndHome (); помогне(); Serial.println ("Добре!"); }} else {commandString+= v; if (състояние ==-10) {Serial.print (v); }}}}

Стъпка 4: Персонализиране на потребителския интерфейс на Uma

Персонализация на потребителския интерфейс на Uma
Персонализация на потребителския интерфейс на Uma

Para melhor acompanhamento e segurança, use a ferramenta PuTTY, e defina no código fonte:

замазка = вярно

Препоръки за определяне:

  • Прозорец

    • 61 Colunas e 20 Linhas
    • Показване на лентата за превъртане desativado
  • Прозорец> Външен вид

    Фон: Lucida Console, 28 пиксела

Стъпка 5: Дувидас?

Para abrir a guia de ajuda, дигитално:

?

натиснете [ENTER]

OBS: Caso o Estado seja:

-1 -> Cérebro não identificado (corrente aberta) +0 -> Ajustando напрежение m+1 -> Tudo certo, tDCS funcionando

Препоръчано: