Orodha ya maudhui:

Arduino TDCS Super Simples. Transcranial Direct Stimulator (tDCS) DIY: Hatua 5
Arduino TDCS Super Simples. Transcranial Direct Stimulator (tDCS) DIY: Hatua 5

Video: Arduino TDCS Super Simples. Transcranial Direct Stimulator (tDCS) DIY: Hatua 5

Video: Arduino TDCS Super Simples. Transcranial Direct Stimulator (tDCS) DIY: Hatua 5
Video: Easily build a tDCS machine - How to DIY 2024, Julai
Anonim
Arduino TDCS Super Rahisi. Kichocheo cha moja kwa moja cha Transcranial Direct (TDCS) DIY
Arduino TDCS Super Rahisi. Kichocheo cha moja kwa moja cha Transcranial Direct (TDCS) DIY

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

  1. Arduino

    • Pino D13 como saída PWM (pode ser alterado).
    • Pino A0 como entada analógica (para maoni de corrente).
    • Pino GND apenas para GND.
  2. Resistor (~ 470 Ω, mas provavelmente entre 300-1000 Ω funciona, você precisará alterar no código fonte)
  3. Msimamizi (220 μF). Kutumikia kwa msingi wa pulsos kufanya PWM.
  4. Eletrodos de Esponja (Tumia água salina para molhá-lo).

Como funciona

O Arduino calcula a corrente padrão (pode ser alterado) ikiwa ni pamoja na maoni yako kwa sababu ya maoni na maoni ya nguvu ya umeme. Você também pode alterar o valor do target_mA pelo serial CLI (Dashibodi).

Hatua ya 1: Saiba Mais

Saiba Mais
Saiba Mais

Você deve ler mais sobre tDCS primeiro. Ni kwa sababu tu FDA FDA ilikuwa na maoni ya haki juu ya sheria, msingi wa habari ni kwamba unaweza kupata habari zaidi kwa sababu ya maoni yako, kabla ya kutafakari…

Hatua ya 2: Monte O Circuito Abaixo

Monte O Circuito Abaixo
Monte O Circuito Abaixo

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

Hatua ya 3: Funga O Código Hakuna Seu Arduino

Lembre-se de alterar as configurações e parameter na área de HARDWARE PARAMS na PARAMU ZA USANAMISHO.

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

Para comutos comandos, troque o No Line Ending for Carriage Return.

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

Código:

String ver = "2.0m"; // HARDWARE PARAMS const int analogInPin = A0; // Entrada kufanya Analógico const int analogOutPin = 13; // Saida D13 padrão kuelea maxOutV = 5.0; // A voltagem de saída PWM padrão do Arduino [V] kuelea maxRefInV = 1.1; // Referencia à voltagem analógica [V] kuelea R = 470.0; // Resistencia da corrente [Ohm]

// PARAMU ZA KUFANIKIWA

mpangaji bool = uwongo; // Defina: kweli, caso esteja usando o Serial plotter bool putty = false; // Defina: kweli, caso esteja usando o PuTTT (pode ser alterado no CLI) int maxmin = 30; // Tempo (em minutos) needário para desligar [Min] kuelea target_mA = 2.73; // Essa ni corrente que passará pelo seu cérebro !!! [mA] kuelea epsilon_mA = 0.03; // Diferença máxima entre a corrente real e o target_mA (Je! Unapenda kituo hiki?)

// INIT GLOBALS

hali ya ndani = 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 * / kuelea njeV = maxOutV; // Voltagem int debuted_state = 0; int zeros_len = 0; kuelea laini_mA = 0;

Kamba ya amriString = ""; // kwa CLI

// WASAIDIZI WA MAONI

kuelea computeOutVoltage (kuelea V, kuelea new_mA) {if (abs (new_mA-target_mA) maxOutV) {state = -1; // resistência muito alta -> cérebro não encontrado? kurudi maxOutV; // kurudi maxOutV / 5.0; // para segurança} hali = 0; kurudi 0.1 * new_V + 0.9 * V; // kurudi new_V; }

int convertVtoOutputValue (kuelea V) {

kurudi kizuizi (int (V / maxOutV * 255), 0, 255); }

sensor ya kueleaValue2mA (int sensorValue) {

sensor ya kuelea Voltage = sensorValue / 1023.0 * maxRefInV; kuelea sensor_mA = sensorVoltage / R * 1000.0; sensor_mA ya kurudi; }

int debuted_state_compute (int state) {

ikiwa (hali 5) kurudi 0; } kurudi 1; }

mwanzo usiosainiwa, endc;

mchakato batili_feedback () {int sensorValue = analogRead (analogInPin); kuelea new_mA = sensorValue2mA (sensorValue); laini_mA = 0.2 * mpya_mA + 0.8 * laini_mA; kuelea V = outV; outV = computeOutVoltage (V, new_mA); AnalogWrite (analogOutPin, convertVtoOutputValue (outV)); debuted_state = debuted_state_compute (hali); // Exibir informações no CLI endc = (millis () - kuanza) / 1000; Kamba tv = "[", ttm = "mA /", tsm = "V,", ts = "mA] | Estado:", h = "| Tempo:", s = ":", leadM = "", leadS = "", plotT = "Lengo:", plotmA = "\ tSmoothed MA:", plotMin = "\ tMin:", tempo; muda mrefu uliotiwa saini tmin = endc / 60 - ((endc / 60)% 1); // Formatação ikiwa (endc% 60 <10) leadS = "0"; ikiwa (tmin = 0) ts = ts + "+"; // Parar automaticamente ikiwa (tmin> maxmin) stop_device (); Kamba txt; ikiwa (mpangaji) txt = njamaT + lengo_mA + njamaMin + "0" + plotmA + smoothed_mA; mwingine txt = tv + V + tsm + laini_mA + ttm + target_mA + ts + debuted_state + h + temp +; ikiwa (putty) Serial.print ("\ r / e [? 25l" + txt); mwingine Serial.println (txt);

// subiri 2 milliseconds kabla ya kitanzi kijacho

// kwa kibadilishaji cha analog-to-digital kukaa // baada ya kusoma mwisho: kuchelewesha (5); }

batili stop_device () {

hali = -10; AnalogWrite (AnalogOutPin, 0); waziNaNyumbani (); Serial.println ("Sessão tDCS interrompida"); Serial.println ("------------------------"); msaada (); }

// WASAIDIZI WA CLI

batili waziAndHome () {Serial.write (27); Printa ya serial ("[2J"); // limpa a tela Serial.write (27); // ESC Serial.print ("[H"); // / r ikiwa (! putty) ya (int i = 0; i <= 30; i ++) Serial.println (""); }

msaada batili () {

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 lengo (mA)"); Serial.println ("'epsilon_mA' - atualiza o epsilon_mA (mA)"); Serial.println ("'R' - atualiza a resistência fanya vifaa (Ohm)"); Serial.println ("'putty' - muda a formatação de saída pro PuTTY"); Serial.println ("'stop' - para a estimulação"); Serial.println ("'kuanzisha upya' - inicia / reinicia a estimulação & o timer"); Serial.println ("'endelea' - endelea kukadiria"); Serial.print ("\ n / rEstado: / n / r * max_time:"); Serial.print (maxmin); Serial.print ("minutos / n / r * target_mA:"); Serial.print (lengo_mA); Serial.print ("mA / n / r * epsilon_mA:"); Printa ya serial (epsilon_mA); Serial.print ("mA / n / r * R:"); Printa ya serial (R); Serial.println ("Ohms"); }

bool parse_param (Kamba & cmdString) {

nafasi ya ndaniPos = cmdString.indexOf (''); ikiwa (spacePos <= 0) inarudi uwongo; Kamba ya amri = cmdString.substring (0, spacePos); Kamba fval = cmdString.substring (nafasiPos + 1); ikiwa (amri == "putty") ikiwa (fval == "kweli") {putty = kweli; kurudi kweli; } mwingine ikiwa (fval == "uongo") {putty = uongo; kurudi kweli; } kuelea val = fval.toFloat (); ikiwa (command == "target_mA") {if (val100.0) {Return false; } lengo_mA = thamani; waziNaNyumbani (); msaada (); } kingine ikiwa (command == "epsilon_mA") {if (val0.3) {return false; } epsilon_mA = val; waziNaNyumbani (); msaada (); } vingine ikiwa (amri == "R") {R = val; waziNaNyumbani (); msaada (); } kingine ikiwa (command == "max_time") {maxmin = val; waziNaNyumbani (); msaada (); } vingine {kurudi uwongo; } kurudi kweli; }

// KUWEKA NA KITENGO KIKUU

kuanzisha batili () {Serial.begin (115200); Rejea ya Analog (YA NDANI); //1.1 V Serial.print ("Sessão iniciada!"); Anza = millis (); } kitanzi batili () {if (state! = - 10) {process_feedback (); } ikiwa (Serial.available ()> 0) {char v = Serial.read (); ikiwa (byte (v) == 13) {// Bool ya kurudi kwa gari inakubaliwa = kweli; ikiwa (commandString == "?" || commandString == "stop") {stop_device (); } kingine ikiwa (commandString == "restart") {clearAndHome (); hali = -1; njeV = maxOutV / 5.0; Anza = millis (); kukubalika = uongo; } mwingine ikiwa (commandString == "endelea") {clearAndHome (); hali = -1; njeV = maxOutV / 5.0; kukubalika = uongo; } mwingine {bool ok = parse_param (commandString); ikiwa (! sawa) {clearAndHome (); msaada (); kukubalika = uongo; Serial.println ("Comando desconhecido: '" + commandString + "" "); }} commandString = ""; ikiwa (imekubaliwa) {clearAndHome (); msaada (); Serial.println ("Ok!"); }} mwingine {commandString + = v; ikiwa (hali == - 10) {Serial.print (v); }}}}

Hatua ya 4: Uma UI Ubinafsishaji

Uma UI Ubinafsishaji
Uma UI Ubinafsishaji

Para melhor acompanhamento e segurança, tumia ferramenta PuTTY, na ufafanuzi hakuna fomu ya código:

putty = kweli

Recomendações de definições:

  • Dirisha
    • 61 Colunas na 20 Linhas
    • Onyesha scrollbar desativado
  • Dirisha> Mwonekano

    Fonti: Lucida Console, 28px

Hatua ya 5: Dúvidas?

Para abrir a guia de ajuda, jibu:

?

e pressione [ENTER]

OBS: Caso o Estado seja:

-1 -> Cérebro não kitambulisho (corrente aberta) +0 -> Ajustando voltagem + 1 -> Tudo certo, tDCS funcionando

Ilipendekeza: