Mundarija:

Arduino TDCS super oddiy. Transkranial to'g'ridan -to'g'ri oqim stimulyatori (tDCS) DIY: 5 qadam
Arduino TDCS super oddiy. Transkranial to'g'ridan -to'g'ri oqim stimulyatori (tDCS) DIY: 5 qadam

Video: Arduino TDCS super oddiy. Transkranial to'g'ridan -to'g'ri oqim stimulyatori (tDCS) DIY: 5 qadam

Video: Arduino TDCS super oddiy. Transkranial to'g'ridan -to'g'ri oqim stimulyatori (tDCS) DIY: 5 qadam
Video: Преобразователь 12 220 на сердечнике ТДКС 2024, Noyabr
Anonim
Arduino TDCS super oddiy. Transkranial to'g'ridan -to'g'ri oqim stimulyatori (tDCS) DIY
Arduino TDCS super oddiy. Transkranial to'g'ridan -to'g'ri oqim stimulyatori (tDCS) DIY

TDCS parametrlari, shuningdek, rezistorlar, kondansatkichlar va kabellar uchun mo'ljallangan.

  1. Arduino

    • P13 Dino PWM (boshqa turdagi xizmatlar).
    • P0 A0 - analogika (fikr -mulohazalar uchun).
    • PND GND uchun GND.
  2. Rezistor (~ 470 Ω, 300-1000 Ω masofani bosib o'tish mumkin emas)
  3. Kondensator (220 mF). PWM -ni o'rnatish uchun xizmat qiling.
  4. "Eletrodos de Esponja" ("Mágua salina para molhá-lo" dan foydalaning).

Komo funciona

Arduino kalkulyatori hisob -kitoblarni amalga oshirishga yordam beradi. Maqsadli maqsadli_mA ketma -ket CLI (Console) ni tanlang.

1 -qadam: Saiba Mais

Saiba Mais
Saiba Mais

TDCS boshlang'ich versiyasini tanlang. Noma'lum sabablarga ko'ra, FDA elektron pochta xabarlarini noto'g'ri talqin qiladi, bu sizning savolingizga javob bermaydi, shuning uchun …

2 -qadam: Monte O Circuito Abaixo

Monte O Circuito Abaixo
Monte O Circuito Abaixo

Nimani eslab, bizni hammasini o'ylab ko'ring!

3 -qadam: O Codigo No Seu Arduino -ni o'rnating

Boshqa parametrlar-bu HARBATARLIK PARAMLARI va SIFATLANGAN PARAMLAR.

Ommaviy axborot almashinuvining tezligi seriyali: 115200 ta natija uchun.

Boshqaruv buyruqlari bajarilgan bo'lsa, aravani qaytarish uchun hech qanday chiziq tugamaydi.

Ovozli + o'quv qo'llanmalari hech qanday ma'lumot saqlamaydi:

Kodigo:

const String ver = "2,0 m"; // HARDWARE PARAMS const int analogInPin = A0; // Analogico const int analogOutPin = 13 ga kiring; // Saida D13 padrão float maxOutV = 5.0; // Arduino uchun PWM -ni ishga tushirish tezligi maxRefInV = 1.1; // Referencia à voltagem analógica [V] float R = 470.0; // Qarshilikka qarshilik [Ohm]

// Sozlanadigan parametrlar

bool plotter = noto'g'ri; // Ta'rif: rost, bu juda katta ketma -ketlik chizgichi = mac; // Ta'rif: haqiqiy, PuTTT (CLI yo'q) int maxmin = 30; // Vaqt (minutos) zarur [min] float target_mA = 2.73; // Mana, siz ham buni bilib olishingiz mumkin !!! [mA] suzuvchi epsilon_mA = 0,03; // Maqsadni aniqlashda aniq maqsadga erishish mumkin (hech qanday sabab yo'q!)

// GLOBALLARNI INIT

int holati = 1; /* -1 - aniq identifikator 0 - Vazifalar 1 -sonli ma'lumotni tasdiqlash uchun javob beradi. Ma'lumotni to'g'rilash -10 - Voltagem desligada */ float outV = maxOutV; // Voltagem int debounced_state = 0; int zeros_len = 0; float smoothed_mA = 0;

String commandString = ""; // CLI uchun

// YANGILARGA YARDIMCHILAR

float computeOutVoltage (float V, float new_mA) {if (abs (new_mA -target_mA) maxOutV) {holat = -1; // qarshilik ko'rsata olmadi -> nima? maxOutV -ni qaytarish; // maxOutV/5.0 qaytarish; // para segurança} holat = 0; qaytarish 0,1*yangi_V+0,9*V; // qaytish new_V; }

int convertVtoOutputValue (float V) {

qaytish cheklovi (int (V/maxOutV*255), 0, 255); }

float sensorValue2mA (int sensorValue) {

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

int debounced_state_compute (int holati) {

agar (5 -holat) 0 qaytarilsa; } qaytarish 1; }

imzosiz uzoq boshlash, tugatish;

void process_feedback () {int sensorValue = analogRead (analogInPin); float new_mA = sensorValue2mA (sensorValue); silliq_mA = 0,2*yangi_mA+0,8*tekislangan_mA; suzuvchi V = chiqishV; outV = computeOutVoltage (V, new_mA); analogWrite (analogOutPin, convertVtoOutputValue (outV)); debounced_state = debounced_state_cute (holat); // Exiber ma'lumotlari CLI yo'q endc = (millis ()-boshlash)/1000; String tv = "[", ttm = "mA/", tsm = "V,", ts = "mA] | Estado:", h = "| Tempo:", s = ":", leadM = "", leadS = "", plotT = "Maqsad:", plotmA = "\ tMa:", plotMin = "\ tMin:", temp; belgisiz uzun tmin = endc/60-((endc/60)%1); // Formatlashtirish if (endc%60 <10) leadS = "0"; agar (tmin = 0) ts = ts + " +"; // Parametrlar avtomatik ravishda if (tmin> maxmin) stop_device (); String txt; if (plotter) txt = plotT + target_mA + plotMin + "0" + plotmA + smoothed_mA; else txt = tv + V + tsm + smoothed_mA + ttm + target_mA + ts + debuted_state + h + temp; if (macun) Serial.print ("\ r / e [? 25l" + txt); else Serial.println (txt);

// keyingi tsikldan oldin 2 millisekund kuting

// analog-raqamli konvertorning joylashishi uchun // oxirgi o'qishdan keyin: kechiktirish (5); }

void stop_device () {

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

// CLI YARDIMCILARI

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

yaroqsiz yordam () {

Serial.println ("tDSC arduino, ver"+ver); Serial.println ("'?' - ajuda"); Serial.println ("'max_time' - tezlikni o'lchash (minutos)"); Serial.println ("'target_mA' - maqsad yoki maqsad (mA)"); Serial.println ("'epsilon_mA' - atualiza yoki epsilon_mA (mA)"); Serial.println ("'R' - asbob -uskunalarga qarshilik ko'rsatish (Ohm)"); Serial.println ("'macun' - PuTTY formatidagi fayllar)"; Serial.println ("to'xtatish" - taxminiy qiymat uchun) "; Serial.println ("" qayta ishga tushirish " - inicia/reinicia va taxminiy taymer"); Serial.println ("" davom ettirish " - Continua a tahminlash"); 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:"); Ketma -ket chop etish (epsilon_mA); Serial.print ("mA / n / r * R:"); Ketma -ket chop etish (R); Serial.println ("Ohm"); }

bool parse_param (String & cmdString) {

int spacePos = cmdString.indexOf (''); if (spacePos <= 0) false qaytadi; String buyrug'i = cmdString.substring (0, spacePos); String fval = cmdString.substring (spacePos+1); if (buyruq == "macun") if (fval == "rost") {macun = rost; haqiqatga qaytish; } if if (fval == "false") {putty = false; haqiqatga qaytish; } float val = fval.toFloat (); if (command == "target_mA") {if (val100.0) {return false; } maqsad_mA = qiymat; clearAndHome (); Yordam(); } if if (command == "epsilon_mA") {if (val0.3) {return false; } epsilon_mA = qiymat; clearAndHome (); Yordam(); } if if (buyruq == "R") {R = val; clearAndHome (); Yordam(); } if if (command == "max_time") {maxmin = val; clearAndHome (); Yordam(); } else {return false; } rost qaytarish; }

// O'rnatish va asosiy halqa

void setup () {Serial.begin (115200); analog ma'lumotnoma (Ichki); //1.1 V Serial.print ("Sessão iniciada!"); boshlash = millis (); } void loop () {if (state! =-10) {process_feedback (); } agar (Serial.available ()> 0) {char v = Serial.read (); if (bayt (v) == 13) {// Aravani qaytarish bool qabul qilingan = rost; if (commandString == "?" || commandString == "stop") {stop_device (); } if if (commandString == "restart") {clearAndHome (); holat = -1; chiqishV = maxOutV/5.0; boshlash = millis (); qabul qilingan = noto'g'ri; } else if (commandString == "davom ettirish") {clearAndHome (); holat = -1; chiqishV = maxOutV/5.0; qabul qilingan = noto'g'ri; } else {bool ok = parse_param (commandString); if (! ok) {clearAndHome (); Yordam(); qabul qilingan = noto'g'ri; Serial.println ("Comando desconhecido: '" + commandString + "'"); }} commandString = ""; agar (qabul qilingan) {clearAndHome (); Yordam(); Serial.println ("OK!"); }} boshqa {commandString+= v; if (holat ==-10) {Serial.print (v); }}}}

4 -qadam: Uma UI Personalizada

Uma UI Personalizada
Uma UI Personalizada

Bir vaqtning o'zida bir qatorda PuTTY va boshqa harflar bilan yozib oling:

macun = rost

Ta'rif ta'riflari:

  • Oyna
    • 61 Kolunalar va 20 Linxalar
    • O'tkazish panelini ko'rsatish
  • Oyna> Tashqi ko'rinish

    Shrift: Lucida Console, 28 piksel

5 -qadam: Duvidas?

Abrid a guia de ajuda, digite:

?

bosing [ENTER]

OBS: Caso yoki Estado:

-1 -> Cérebro não identifikado (tuzatish) +0 -> Ajustando voltagem+1 -> Tudo sertifikati, tDCS funktsiyalari

Tavsiya: