Përmbajtje:

Arduino TDCS Super Simple. DIY DIY: 5 hapa
Arduino TDCS Super Simple. DIY DIY: 5 hapa

Video: Arduino TDCS Super Simple. DIY DIY: 5 hapa

Video: Arduino TDCS Super Simple. DIY DIY: 5 hapa
Video: 5 AMAZING Arduino project DIY 2024, Korrik
Anonim
Arduino TDCS Super Simple. Stimulues transkranial i rrymës direkte (tDCS) DIY
Arduino TDCS Super Simple. Stimulues transkranial i rrymës direkte (tDCS) DIY

Para fazer este tDCS você precisará apenas de um arduino, resistor, capacitor e alguns cabosPononentet

  1. Arduino

    • Pino D13 përdoret për PWM (kodi në alterado).
    • Pino A0 hyn në analizën analogica (para feedback de corrente).
    • Pino GND apenas para GND.
  2. Rezistencë (~ 470 Ω, mas provavelmente entre 300-1000 Ω funksion, duke përcaktuar saktësisht alterar no código fonte)
  3. Kondensator (220 μF). Shërbejeni për vendosjen e sistemit operativ të PWM.
  4. Eletrodos de Esponja (Përdorni água salina para molhá-lo).

Como funciona

O Arduino njehsoni një korrente padrão (pode ser alterado) që kalon në seerebro apenas nga mudar a voltagem de saída. Você também pode alterar o valor do target_mA pelo serial CLI (Console).

Hapi 1: Saiba Mais

Saiba Mais
Saiba Mais

Você deve ler mais sobre tDCS primeiro. Nuk ka aprovim të FDA -së dhe të dhëna për paragjykime, si dhe të kuptoni se si të thoni që nuk mund të përdoret në mënyrë të pavarur, parapagimet dhe daljet e jashtme…

Hapi 2: Monte O Circuito Abaixo

Monte O Circuito Abaixo
Monte O Circuito Abaixo

Não se esqueça das esponjas com água salina!

Hapi 3: Instaloni O Código No Seu Arduino

Lembre-se de alterar as configurações e parametros na área de HARDWARE PARAMS dhe KONFIGURABLE PARAMS.

Você também deve alterar o boud rate do Serial para: 115200 para poder ver o resultado.

Për ekzekutues komando, troque o No Line Ending para Transportit Kthimi.

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

Código:

const String ver = "2.0m"; // PARAMET HARDWARE const int analogInPin = A0; // Entrada do Analógico const int analogOutPin = 13; // Saida D13 padrão float maxOutV = 5.0; // Një tension i madh PWM padrão do Arduino [V] noton maxRefInV = 1.1; // Referencia à voltagem analógica [V] noton R = 470.0; // Rezistenca e korrenteve [Ohm]

// PARAMET E KONFIGURUESHME

bool plotter = false; // Përkufizimi: e vërtetë, rasti i përdorimit o Serial plotter bool stuko = false; // Përkufizimi: e vërtetë, me siguri që përdorni o PuTTT (pode ser alterado no CLI) int maxmin = 30; // Tempo (em minutos) needário para desligar [Min] float target_mA = 2.73; // Essa é a corrente que passará pelo seu cérebro !!! [mA] noton epsilon_mA = 0.03; // Diferença máxima hyn në një korrente reale ose objektiv_mA (Não altere caso não saiba o que está fazendo!)

// INIT GLOBALE

gjendja int = 1; /* -1 - Cérebro não identificado 0 - Voltagem sendo alterada paracaktuar për një korrente 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; noton smoothed_mA = 0;

String commandString = ""; // për CLI

// NDIHMT E PERDORIMIT

float computeOutVoltage (float V, float new_mA) {if (abs (new_mA -target_mA) maxOutV) {gjendja = -1; // resistencia muito alta -> cérebro não encontrado? kthehu maxOutV; // kthehu maxOutV/5.0; // para segurança} gjendja = 0; kthimi 0.1*new_V+0.9*V; // kthej new_V; }

int convertVtoOutputValue (noton V) {

kufizimi i kthimit (int (V/maxOutV*255), 0, 255); }

sensor floatValue2mA (int sensorVlera) {

float sensorVoltage = sensorVlera/1023.0*maxRefInV; sensor notues_mA = sensorVoltage/R*1000.0; sensori i kthimit_mA; }

int debounced_state_compute (gjendja int) {

nëse (gjendja 5) kthehet 0; } kthimi 1; }

fillimi i gjatë i panënshkruar, përfundimi;

void process_feedback () {int sensorValue = analogRead (analogInPin); noton new_mA = sensorValue2mA (sensorVlera); smoothed_mA = 0.2*new_mA+0.8*smoothed_mA; noton V = outV; outV = computeOutVoltage (V, new_mA); analogWrite (analogOutPin, convertVtoOutputValue (outV)); debounced_state = debounced_state_compute (gjendja); // Exibir informações no CLI endc = (milis ()-fillimi)/1000; String tv = "[", ttm = "mA/", tsm = "V,", ts = "mA] | Estado:", h = "| Tempo:", s = ":", leadM = "", leadS = "", plotT = "Synimi:", plotmA = "\ tZbutur MA:", plotMin = "\ tMin:", tempo; tmin i gjatë i panënshkruar = endc/60-((endc/60)%1); // Formatimi nëse (fundc%60 <10) leadS = "0"; nëse (tmin = 0) ts = ts + " +"; // Parar automatike nëse (tmin> maxmin) stop_device (); Varg txt; if (plotter) txt = plotT + target_mA + plotMin + "0" + plotmA + zbutur_mA; përndryshe txt = tv + V + tsm + zbutur_mA + ttm + target_mA + ts + gjendje e debatuar + h + tempo; nëse (stuko) Serial.print ("\ r / e [? 25l" + txt); tjetër Serial.println (txt);

// prisni 2 milisekonda para lakit tjetër

// që konvertuesi analog-dixhital të vendoset // pas leximit të fundit: vonesë (5); }

pavlefshme stop_device () {

gjendje = -10; analogWrite (analogOutPin, 0); clearAndHome (); Serial.println ("Sessão tDCS interrompida"); Serial.println ("------------------------"); ndihmë (); }

// NDIHMT CLI

void clearAndHome () {Serial.shkruaj (27); Serial.print ("[2J"); // limpa a tela Seriali.shkruaj (27); // ESC Serial.print ("[H"); // / r nëse (! stuko) për (int i = 0; i <= 30; i ++) Serial.println (""); }

ndihmë e pavlefshme () {

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 resistencia do hardware (Ohm)"); Serial.println ("'stuko' - muda a formatação de saída pro PuTTY"); Serial.println ("'stop' - para a estulação"); Serial.println ("'rinisja' - inicia/reinicia a estulação & o timer"); Serial.println ("'vazhdoj' - Continua a estestulação"); Serial.print ("\ n / rEstado: / n / r * max_time:"); Serial.print (maxmin); Serial.print ("minutat / 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 (''); nëse (spacePos <= 0) kthehet false; Komanda String = cmdString.substring (0, spacePos); String fval = cmdString.substring (spacePos+1); nëse (komanda == "stuko") nëse (fval == "e vërtetë") {stuko = e vërtetë; kthehet e vërtetë; } tjetër nëse (fval == "false") {stuko = false; kthehet e vërtetë; } float val = fval.toFloat (); if (komanda == "target_mA") {if (val100.0) {return false; } target_mA = val; clearAndHome (); ndihmë (); } else if (komanda == "epsilon_mA") {if (val0.3) {kthehu false; } epsilon_mA = val; clearAndHome (); ndihmë (); } tjetër if (komanda == "R") {R = val; clearAndHome (); ndihmë (); } else if (komanda == "max_time") {maxmin = val; clearAndHome (); ndihmë (); } else {return false; } kthehu i vërtetë; }

// VENDOSJA DHE LIGJI KRYESOR

void setup () {Serial.begin (115200); analogReference (INTERNAL); //1.1 V Serial.print ("Sessão iniciada!"); fillimi = millis (); } void loop () {if (gjendja! =-10) {process_feedback (); } if (Serial.available ()> 0) {char v = Serial.read (); nëse (byte (v) == 13) {// Boli i kthimit të karrocës i pranuar = i vërtetë; if (commandString == "?" || commandString == "stop") {stop_device (); } else if (commandString == "rinis") {clearAndHome (); gjendje = -1; jashtëV = maxOutV/5.0; fillimi = millis (); pranuar = false; } else if (commandString == "vazhdo") {clearAndHome (); gjendje = -1; jashtëV = maxOutV/5.0; pranuar = false; } else {bool ok = parse_param (commandString); nëse (! ok) {clearAndHome (); ndihmë (); pranuar = false; Serial.println ("Comando desconhecido: '" + commandString + "'"); }} commandString = ""; nëse (pranohet) {clearAndHome (); ndihmë (); Serial.println ("Ok!"); }} else {commandString+= v; if (gjendja ==-10) {Serial.print (v); }}}}

Hapi 4: Personalizimi i Uma UI

Uma UI Personalizada
Uma UI Personalizada

Për sa i përket shoqërimit dhe përdorimit, përdorni një PuTTY ferramenta, dhe nuk përcaktoni ndonjë themel:

stuko = e vërtetë

Rekomandimet për përcaktimet:

  • Dritare

    • 61 Colunas e 20 Linhas
    • Shfaq shiritin e rrotullimit të dëshiruar
  • Dritarja> Pamja

    Fonte: Paneli Lucida, 28px

Hapi 5: Dúvidas?

Para abrir a 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, funksion tDCS

Recommended: