Obsah:
- Krok 1: Saiba Mais
- Krok 2: Monte O Circuito Abaixo
- Krok 3: Nainstalujte O Código No Seu Arduino
- Krok 4: Uma UI Personalizada
- Krok 5: Dúvidas?
Video: Arduino TDCS Super Simples. Transkraniální stimulátor stejnosměrného proudu (tDCS) DIY: 5 kroků
2024 Autor: John Day | [email protected]. Naposledy změněno: 2024-01-30 08:21
Para fazer este tDCS você precisará apenas de um arduino, resistor, kondenzator e alguns cabosComponentes
-
Arduino
- Pino D13 je kompatibilní s PWM (pode alter alterado).
- Pino A0 s analogovou anodou (pro zpětnou vazbu).
- Pino GND apena jako GND.
- Rezistor (~ 470 Ω, mas provavelmente entre 300-1000 Ω funciona, você precisará alterar no código fonte)
- Kondenzátor (220 μF). Slouží k zavedení pulzů do PWM.
- Eletrodos de Esponja (Použijte á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. Vícenásobné změny nebo změny v cílové mA pelo sériové CLI (konzole).
Krok 1: Saiba Mais
Podívejte se na hlavní stránku tDCS. Všechny naše FDA mohou podněcovat a poškozovat hlavní záležitosti, které se týkají většiny, prevence a prevence…
Krok 2: Monte O Circuito Abaixo
Načtení se nezdařilo.
Krok 3: Nainstalujte O Código No Seu Arduino
Konfigurace a konfigurace parametrů a hardwarových parametrů a konfigurovatelných parametrů.
Podívejte se, jak se mění různé sazby za sériové číslo: 115200 bodů za výsledek.
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 Řetězec ver = "2,0 m"; // PARAMETRY HARDWARU const int analogInPin = A0; // Entrada do Analógico const int analogOutPin = 13; // Saida D13 padrão float maxOutV = 5,0; // Voltagem de saída PWM padrão do Arduino [V] float maxRefInV = 1.1; // Referencia à voltagem analógica [V] float R = 470,0; // Rezistence da corrente [Ohm]
// KONFIGUROVATELNÉ PARAMETRY
bool plotter = false; // 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) nutá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 maxima entre a corrente real e o target_mA (Não altere caso não saiba o que está fazendo!)
// INIT GLOBALS
int stav = 1; /* -1 - Hlavní identifikace 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;
Řetězec commandString = ""; // pro CLI
// POMOCNÍCI ZPĚTNÉ VAZBY
float computeOutVoltage (float V, float new_mA) {if (abs (new_mA -target_mA) maxOutV) {state = -1; // vzdorovat muito alta -> cérebro não encontrado? vrátit maxOutV; // návrat maxOutV/5.0; // para segurança} state = 0; návrat 0,1*nový_V+0,9*V; // návrat new_V; }
int convertVtoOutputValue (float V) {
návratové omezení (int (V/maxOutV*255), 0, 255); }
float sensorValue2mA (int sensorValue) {
float sensorVoltage = sensorValue/1023.0*maxRefInV; float sensor_mA = sensorVoltage/R*1000,0; snímač návratu_mA; }
int debounced_state_compute (int stav) {
if (state 5) return 0; } vrátit 1; }
nepodepsaný dlouhý začátek, endc;
void process_feedback () {int sensorValue = analogRead (analogInPin); float new_mA = sensorValue2mA (sensorValue); vyhlazený_mA = 0,2*nový_mA+0,8*vyhlazený_mA; float V = outV; outV = computeOutVoltage (V, new_mA); analogWrite (analogOutPin, convertVtoOutputValue (outV)); debounced_state = debounced_state_compute (stav); // Exibir informações no CLI endc = (millis ()-start)/1000; Řetězec tv = "[", ttm = "mA/", tsm = "V,", ts = "mA] | Estado:", h = "| Tempo:", s = ":", leadM = "", leadS = "", plotT = "Target:", plotmA = "\ tSmoothed MA:", plotMin = "\ tMin:", tempo; nepodepsané dlouhé tmin = endc/60-((endc/60)%1); // Formatação if (endc%60 <10) leadS = "0"; if (tmin = 0) ts = ts + " +"; // Parar automaticamente if (tmin> maxmin) stop_device (); Řetězec txt; if (plotter) txt = plotT + target_mA + plotMin + "0" + plotmA + smoothed_mA; jinak txt = tv + V + tsm + vyhlazeno_mA + ttm + target_mA + ts + debounced_state + h + tempo; if (tmel) Serial.print ("\ r / e [? 25l" + txt); else Serial.println (txt);
// počkejte 2 milisekundy před další smyčkou
// aby se převodník analogového signálu na digitální usadil // po posledním čtení: delay (5); }
neplatné stop_device () {
stav = -10; analogWrite (analogOutPin, 0); clearAndHome (); Serial.println ("Sessão tDCS interrompida"); Serial.println ("------------------------"); Pomoc(); }
// POMOCNÍCI 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 (""); }
zrušit pomoc () {
Serial.println ("tDSC arduino, ver"+ver); Serial.println ("'?' - ajuda"); Serial.println ("" max_time ' - atualiza o tempo maxima (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 ("'putty' - muda a formatação de saída pro PuTTY"); Serial.println ("'stop' - para a odhadulação"); Serial.println ("" restart " - iniciační/reinicia a odhadulação & o timer"); Serial.println ("'continue' - continua a odhadulaçã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 ("Ohmy"); }
bool parse_param (String & cmdString) {
int spacePos = cmdString.indexOf (''); if (spacePos <= 0) return false; Řetězcový příkaz = cmdString.substring (0, spacePos); Řetězec fval = cmdString.substring (spacePos+1); if (příkaz == "tmel") if (fval == "true") {putty = true; return true; } else if (fval == "false") {putty = false; return true; } float val = fval.toFloat (); if (příkaz == "target_mA") {if (val100.0) {return false; } target_mA = val; clearAndHome (); Pomoc(); } else if (příkaz == "epsilon_mA") {if (val0.3) {return false; } epsilon_mA = val; clearAndHome (); Pomoc(); } else if (příkaz == "R") {R = val; clearAndHome (); Pomoc(); } else if (příkaz == "max_time") {maxmin = val; clearAndHome (); Pomoc(); } else {return false; } return true; }
// NASTAVENÍ A HLAVNÍ Smyčka
neplatné nastavení () {Serial.begin (115200); analogReference (VNITŘNÍ); //1.1 V Serial.print („Sessão iniciada!“); start = milis (); } void loop () {if (state! =-10) {process_feedback (); } if (Serial.available ()> 0) {char v = Serial.read (); if (byte (v) == 13) {// Návrat boolů přijat = true; if (commandString == "?" || commandString == "stop") {stop_device (); } else if (commandString == "restart") {clearAndHome (); stav = -1; outV = maxOutV/5,0; start = milis (); přijato = nepravda; } else if (commandString == "continue") {clearAndHome (); stav = -1; outV = maxOutV/5,0; přijato = nepravda; } else {bool ok = parse_param (commandString); if (! ok) {clearAndHome (); Pomoc(); přijato = nepravda; Serial.println ("Comando desconhecido: '" + commandString + "'"); }} commandString = ""; pokud (přijato) {clearAndHome (); Pomoc(); Serial.println („Ok!“); }} else {commandString+= v; if (state ==-10) {Serial.print (v); }}}}
Krok 4: Uma UI Personalizada
Chcete -li použít některou z následujících možností, použijte ferramenta PuTTY, a defina no código fonte:
tmel = pravda
Doporučené definice:
-
Okno
- 61 Colunas e 20 Linhas
- Zobrazit desativado posuvníku
-
Okno> Vzhled
Fonte: Lucida Console, 28px
Krok 5: Dúvidas?
Para abrir a guia de ajuda, digite:
?
e stiskněte [ENTER]
OBS: Caso o Estado seja:
-1 -> Cérebro não identificado (corrente aberta) +0 -> Ajustando voltagem+1 -> Tudo certo, tDCS funcionando
Doporučuje:
DIY kapesní měřič stejnosměrného napětí: 5 kroků
DIY kapesní měřič stejnosměrného napětí v kapse: V tomto návodu vám ukážu, jak vyrobit kapesní měřič stejnosměrného napětí s kapucí pro piezo bzučák pro kontrolu obvodu sami. Vše, co potřebujete, je základní znalost elektroniky a trochu času. Pokud máte nějaké dotazy nebo problémy, můžete
Rychlost a směr stejnosměrného motoru Arduino pomocí potenciometru, OLED displeje a tlačítek: 6 kroků
Řízení a směrování stejnosměrného motoru Arduino pomocí potenciometru, OLED displeje a tlačítek: V tomto tutoriálu se naučíme, jak pomocí ovladače L298N DC MOTOR CONTROL a potenciometru ovládat rychlost a směr stejnosměrného motoru pomocí dvou tlačítek a zobrazovat hodnotu potenciometru na OLED displeji. Podívejte se na ukázkové video
Rychlost a směr stejnosměrného motoru Arduino pomocí potenciometru a tlačítek: 6 kroků
Rychlost a směr stejnosměrného motoru Arduino pomocí potenciometru a tlačítek: V tomto tutoriálu se naučíme, jak pomocí ovladače L298N DC MOTOR CONTROL a potenciometru ovládat rychlost a směr stejnosměrného motoru dvěma tlačítky. Podívejte se na ukázkové video
Otáčky a směr stejnosměrného motoru Arduino pomocí potenciometru: 6 kroků
Rychlost a směr stejnosměrného motoru Arduino pomocí potenciometru: V tomto tutoriálu se naučíme, jak pomocí ovladače L298N DC MOTOR CONTROL a potenciometru ovládat rychlost a směr stejnosměrného motoru. Podívejte se na ukázkové video
DIY snímač proudu pro Arduino: 6 kroků
DIY proudový senzor pro Arduino: Dobrý den, doufám, že se vám to daří a v tomto tutoriálu vám ukážu, jak jsem vytvořil proudový senzor pro Arduino pomocí některých velmi základních elektronických součástek a domácího zkratu. Tento zkrat dokáže snadno zvládnout velkou velikost proudu