Мазмуну:

Arduino TDCS Super Simples. Transcranial Direct Current Stimulator (tDCS) DIY: 5 кадам
Arduino TDCS Super Simples. Transcranial Direct Current Stimulator (tDCS) DIY: 5 кадам

Video: Arduino TDCS Super Simples. Transcranial Direct Current Stimulator (tDCS) DIY: 5 кадам

Video: Arduino TDCS Super Simples. Transcranial Direct Current Stimulator (tDCS) DIY: 5 кадам
Video: Transcranial Direct Current Stimulation (tDCS) explained | Neuroscience Methods 101 2024, Июль
Anonim
Arduino TDCS Super Simples. Transcranial түз ток стимулятору (tDCS) DIY
Arduino TDCS Super Simples. Transcranial түз ток стимулятору (tDCS) DIY

TDCS параметрлери ар кандай абалда, резистордо жана конденсаторлордо иштейт

  1. Arduino

    • P13 DW коммутировать PWM (pode ser alterado).
    • Pino A0 como entrada analógica (кайтарым байланыш үчүн кайтарым байланыш).
    • PND GND үчүн GND.
  2. Резистор (~ 470 Ω, 300-1000 Ω чейин иштейт)
  3. Конденсатор (220 μF). PWM жасоо үчүн кызмат кылыңыз.
  4. Eletrodos de Esponja (Use água salina para molhá-lo).

Como funciona

O Arduino калкуляторуңузду оңдоп -түзөө (эсепке алуу) үчүн сиз өзүңүздүн оюңузду оңдоп койсоңуз болот. Колдонуу_чындыгынын мааниси, ал CLI (Console) үчүн serial_mA сериясында.

1 -кадам: Сайба Маис

Saiba Mais
Saiba Mais

TDCS Primeiro программасын иштеп чыгыңыз. Жоопсуздукту коргоо боюнча FDA электрондук почта коду кандайдыр бир себептерден улам пайда болот, бул жерде эч кандай көйгөй жок болот, бул жерде алдын ала эскертүү…

2 -кадам: Monte O Circuito Abaixo

Monte O Circuito Abaixo
Monte O Circuito Abaixo

Эч кандай чектөөлөр жок!

3 -кадам: Орнотуу O Codigo No Seu Arduino

Параметрлерди конфигурациялоо параметрлери na área de Hardware PARAMS e CONFIGURABLE PARAMS.

Төмөнкү жаңылыктар Сериалдык баада: 115200 аккаунтка чейин.

Пара аткаруучу командалар, Carriage Return үчүн No Line Ending.

O código fonte + үйрөткүчтүн эч кандай репозиторийи жок:

Кодиго:

const String ver = "2.0m"; // HARDWARE PARAMS const int analogInPin = A0; // AnalOgico const int analogOutPin = 13 кирүү; // Saida D13 padrão float maxOutV = 5.0; // Arduino үчүн PWM орнотууларынын кубаттуулугу [V] maxRefInV = 1.1; // Referencia à voltagem analógica [V] float R = 470.0; // Каршылык көрсөтүүлөр [Ом]

// ТУЗУЛГОН ПАРАМДАР

бол плоттер = жалган; // Defina: true, caso esteja usando o Serial plotter bool putty = false; // Аныктоо: туура, PuTTT колдонмосу (CLI коду жок) int maxmin = 30; // Tempo (minutos) милдеттүү түрдө [Min] float target_mA = 2.73; // Эсепти оңдоп -түзөө !!! [mA] float epsilon_mA = 0.03; // Diferença máxima to add a Corente real e o target_mA (Não altere caso não saiba o que está fazendo!)

// INL GLOBALS

int state = 1; /* -1 - Туура эмес аныктоо 0 - Ачкычтуу сүйлөм боюнча маалымат жок кылуу 1 - Тудо сертификаты. Түшүндүрмө берилгенде -10 - Voltagem desligada */ float outV = maxOutV; // Voltagem int debounced_state = 0; int zeros_len = 0; float smoothed_mA = 0;

String commandString = ""; // CLI үчүн

// КАЙРА ЖАРДАМКЕРЛЕР

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? maxOutV кайтаруу; // maxOutV/5.0 кайтаруу; // para segurança} state = 0; 0.1*new_V+0.9*V кайтаруу; // return new_V; }

int convertVtoOutputValue (калкып V) {

кайтаруу чектөөсү (int (V/maxOutV*255), 0, 255); }

сүзүүчү сенсорValue2mA (int sensorValue) {

float sensorVoltage = sensorValue/1023.0*maxRefInV; float sensor_mA = sensorVoltage/R*1000.0; return sensor_mA; }

int debounced_state_compute (абал) {

if (5 -штат) 0 кайтаруу; } return 1; }

кол коюлбаган узак баштоо, бүтүрүү;

жараксыз process_feedback () {int sensorValue = analogRead (analogInPin); float new_mA = sensorValue2mA (sensorValue); тегизделген_мА = 0,2*жаңы_мА+0,8*тегизделген_ма; float V = outV; outV = computeOutVoltage (V, new_mA); analogWrite (analogOutPin, convertVtoOutputValue (outV)); debounced_state = debounced_state_cute (абал); // Exibir маалымат жок CLI endc = (millis ()-баштоо)/1000; String tv = "[", ttm = "mA/", tsm = "V,", ts = "mA] | Эстадо:", h = "| Темпо:", s = ":", leadM = "", leadS = "", plotT = "Максат:", plotmA = "\ tТегизделген MA:", plotMin = "\ tMin:", темп; белгисиз узун тмин = endc/60-((endc/60)%1); // Formatação if (endc%60 <10) leadS = "0"; if (tmin = 0) ts = ts + " +"; // Parar автоматтык түрдө if (tmin> maxmin) stop_device (); String txt; if (plotter) txt = plotT + target_mA + plotMin + "0" + plotmA + smoothed_mA; else txt = tv + V + tsm + smarahed_mA + ttm + target_mA + ts + мамлекетти + ч + темп; if (putty) Serial.print ("\ r / e [? 25l" + txt); else Serial.println (txt);

// кийинки циклге чейин 2 миллисекунд күтө туруңуз

// аналогдук-санариптик которгучтун чечилиши үчүн // акыркы окуудан кийин: кечигүү (5); }

void stop_device () {

абал = -10; analogWrite (analogOutPin, 0); clearAndHome (); Serial.println ("Sessão tDCS interrompida"); Serial.println ("------------------------"); жардам (); }

// 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 (""); }

жараксыз жардам () {

Serial.println ("tDSC arduino, ver"+ver); Serial.println ("'?' - ajuda"); Serial.println " Serial.println ("'target_mA' - максаттуу (мА)"); Serial.println ("'epsilon_mA' - atualiza o epsilon_mA (mA)"); Serial.println ("'R' - жабдууларга каршылык көрсөтүү (Ом)"); Serial.println ("'putty' - PuTTY форматындагы файлдарды чыгаруу)"; Serial.println ("'токтоо" - акча үчүн "); Serial.println ("'restart' - inicia/reinicia & a timulação & o timer"); Serial.println ("'улантуу' - continua a tahmin etmek"); 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 ("Ом"); }

bool parse_param (String & cmdString) {

int spacePos = cmdString.indexOf (''); if (spacePos <= 0) false кайтаруу; String командасы = cmdString.substring (0, spacePos); String fval = cmdString.substring (spacePos+1); if (command == "putty") if (fval == "true") {putty = true; чындыкка кайтуу; } if if (fval == "false") {putty = false; чындыкка кайтуу; } float val = fval.toFloat (); if (command == "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 (command == "R") {R = val; clearAndHome (); жардам (); } else if (command == "max_time") {maxmin = val; clearAndHome (); жардам (); } else {return false; } true true; }

// ЖӨНДӨӨ ЖАНА НЕГИЗГИ ЛУП

void setup () {Serial.begin (115200); analogReference (ИЧКИ); //1.1 V Serial.print ("Sessão iniciada!"); баштоо = миллис (); } void loop () {if (state! =-10) {process_feedback (); } if (Serial.available ()> 0) {char v = Serial.read (); if (byte (v) == 13) {// Carriage return bool кабыл алынган = true; if (commandString == "?" || commandString == "stop") {stop_device (); } else if (commandString == "restart") {clearAndHome (); мамлекет = -1; outV = maxOutV/5.0; баштоо = миллис (); кабыл алынган = жалган; } else if (commandString == "улантуу") {clearAndHome (); мамлекет = -1; outV = maxOutV/5.0; кабыл алынган = жалган; } else {bool ok = parse_param (commandString); if (! ok) {clearAndHome (); жардам (); кабыл алынган = жалган; Serial.println ("Comando desconhecido: '" + commandString + "'"); }} commandString = ""; if (кабыл алынган) {clearAndHome (); жардам (); Serial.println ("Ok!"); }} else {commandString+= v; if (state ==-10) {Serial.print (v); }}}}

4 -кадам: Uma UI Personalizada

Uma UI Personalizada
Uma UI Personalizada

Эсепке алуу үчүн, PuTTY ферраментасын колдонуңуз, жана эч кандай жазуу жок:

шыбак = чындык

Recomendações de definições:

  • Терезе

    • 61 Colunas e 20 Linhas
    • Жылдыруу тилкесин көрсөтүү
  • Терезе> Көрүнүш

    Арип: Люсида Консолу, 28 пиксел

5 -кадам: Dúvidas?

Жөнөкөй сөз менен айтканда:

?

e pressione [ENTER]

OBS: Caso o Estado seja:

-1 -> Cérebro não identificado (оңдоп -түзөө) +0 -> Аустрандо вольтегем+1 -> Tudo certo, tDCS funcionando

Сунушталууда: