Mündəricat:

Arduino TDCS Super Simples. Transcranial Birbaşa Cərəyan Stimulyatoru (tDCS) DIY: 5 addım
Arduino TDCS Super Simples. Transcranial Birbaşa Cərəyan Stimulyatoru (tDCS) DIY: 5 addım

Video: Arduino TDCS Super Simples. Transcranial Birbaşa Cərəyan Stimulyatoru (tDCS) DIY: 5 addım

Video: Arduino TDCS Super Simples. Transcranial Birbaşa Cərəyan Stimulyatoru (tDCS) DIY: 5 addım
Video: Transcranial Direct Current Stimulation (tDCS) explained | Neuroscience Methods 101 2024, Noyabr
Anonim
Arduino TDCS Super Simples. Transcranial Birbaşa Cərəyan Stimulyatoru (tDCS) DIY
Arduino TDCS Super Simples. Transcranial Birbaşa Cərəyan Stimulyatoru (tDCS) DIY

TDCS -in əvvəlcədən müəyyən edilmiş parametrləri, rezistor, kondansatör və elektrik qurğuları Komponentlər

  1. Arduino

    • P13 DW, PWM ilə birlikdə işləyir.
    • P0 A0 analitik analizi (düzəliş üçün rəy).
    • GND üçün GND məlumatları.
  2. Rezistor (~ 470 Ω, 300-1000 Ω funksiyası, əvvəlcədən yazılmış heç bir yazı yoxdur)
  3. Kondansatör (220 μF). PWM qurmaq üçün xidmət edin.
  4. Eletrodos de Esponja (Mülhá-lo água salina istifadə edin).

Como funciona

Arduino hesablamaları düzgün hesablamaq üçün bir hesablama aparmaq lazımdır. Hədəf_mA üçün CLI (Console) serialının dəyərini dəyişdirin.

Addım 1: Saiba Mais

Saiba Mais
Saiba Mais

TDCS -in ilk versiyasını hazırlayın. Nəzərə almaq lazımdır ki, FDA e -poçt xidməti heç bir problem yaratmayacaq, əsas səbəblər heç bir problem yaratmayacaq …

Addım 2: Monte O Circuito Abaixo

Monte O Circuito Abaixo
Monte O Circuito Abaixo

Növbəti məqalədə qeyd oluna bilər!

Addım 3: O Código No Seu Arduino quraşdırın

ƏDƏVİYYAT PARAMLARI və YAPILANDIRILABİLİR PARAMLAR üçün parametrləri konfiqurasiya etmək üçün seçim edin.

Serialın yüksək sürətini dəyişdirin: 115200 nəticə üçün.

İcraçı komanda, Carriage Return üçün Xəttin sonu yoxdur.

Yazı yazıları + heç bir məlumat mənbəyi olmayan təlimatlar:

Codigo:

const String ver = "2.0m"; // HARDWARE PARAMS const int analogInPin = A0; // Analogiko daxil edin analOutPin = 13 daxil edin; // Saida D13 padrão float maxOutV = 5.0; // Arduino üçün bir PWM proqramı hazırlamaq [V] maxRefInV = 1.1; // Referencia à voltagem analógica [V] float R = 470.0; // Resistencia da corrente [Ohm]

// YAPILANDIRILABİLİR PARAMLAR

bool plotter = yalan; // Defina: doğrudur, o, Serial plotter bool putty = false; // Defina: doğru, PuTTT istifadə etmək üçün (heç bir CLI yoxdur) int maxmin = 30; // Müddət (dəqiqələr) [min] float target_mA = 2.73; // Müvəqqəti məlumat əldə etmək üçün bir şey yazın !!! [mA] float epsilon_mA = 0.03; // Fərqli bir hədəfə çatdıqda, hədəfi dəyişdirə bilərsiniz (heç bir problem yoxdur!)

// GLOBALS İNIT

int vəziyyəti = 1; /* -1 - Şəxsi məlumat 0 - Şəxsi məlumat 1 -dən etibarən məlumatların dəyişdirilməsi ilə bağlı məlumatlar. Düzgün müəyyən etmək üçün -10 - Voltagem desligada */ float outV = maxOutV; // Voltagem int debounced_state = 0; int zeros_len = 0; float smoothed_mA = 0;

String commandString = ""; // CLI üçün

// ƏLAQƏ YARDIMCILARI

float computeOutVoltage (float V, float new_mA) {if (abs (new_mA -target_mA) maxOutV) {vəziyyət = -1; // resistência muito alta -> cérebro não encontrado? maxOutV qaytar; // maxOutV/5.0 qaytar; // para segurança} dövlət = 0; 0.1*yeni_V+0.9*V qaytar; // new_V qaytar; }

int convertVtoOutputValue (float V) {

qaytarma məhdudiyyəti (int (V/maxOutV*255), 0, 255); }

float sensorValue2mA (int sensorValue) {

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

int debounced_state_compute (int vəziyyəti) {

əgər (dövlət 5) 0 qaytarırsa; } qaytar 1; }

imzasız uzun başlanğıc, son;

void process_feedback () {int sensorValue = analogRead (analogInPin); float new_mA = sensorValue2mA (sensorValue); hamarlaşdırılmış_mA = 0,2*yeni_mA+0,8*hamarlanmış_mA; float V = outV; outV = computeOutVoltage (V, new_mA); analogWrite (analogOutPin, convertVtoOutputValue (outV)); debounced_state = debounced_state_cute (dövlət); // Exiber məlumatı yoxdur CLI endc = (millis ()-başlanğıc)/1000; String tv = "[", ttm = "mA/", tsm = "V,", ts = "mA] | Estado:", h = "| Tempo:", s = ":", leadM = "", leadS = "", plotT = "Hədəf:", plotmA = "\ tMa:", plotMin = "\ tMin:", temp; işarəsiz uzun tmin = endc/60-((endc/60)%1); // Formatação if (endc%60 <10) leadS = "0"; əgər (tmin = 0) ts = ts + " +"; // Parametrlər avtomatik olaraq if (tmin> maxmin) stop_device (); Simli txt; if (plotter) txt = plotT + target_mA + plotMin + "0" + plotmA + smoothed_mA; başqa txt = tv + V + tsm + hamarlaşdırılmış_mA + ttm + hədəf_mA + ts + dövlət + h + tempi; if (macun) Serial.print ("\ r / e [? 25l" + txt); başqa Serial.println (txt);

// növbəti döngədən əvvəl 2 milisaniyə gözləyin

// analoq-rəqəmsal çeviricinin yerləşməsi üçün // son oxunuşdan sonra: gecikmə (5); }

void stop_device () {

vəziyyət = -10; analogWrite (analogOutPin, 0); clearAndHome (); Serial.println ("Sessão tDCS interrompida"); Serial.println ("------------------------"); kömək (); }

// CLI YARDIMCILARI

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

etibarsız yardım () {

Serial.println ("tDSC arduino, ver"+ver); Serial.println ("'?' - ajuda"); Serial.println ("'max_time' - sürətləndirmək və ya sürətləndirmək (dəqiqələr)"); Serial.println ("'target_mA' - hədəf və ya hədəf (mA)"); Serial.println ("'epsilon_mA' - atualiza o epsilon_mA (mA)"); Serial.println ("'R' - avadanlıqların müqavimətini təmin etmək (Ohm)"); Serial.println ("'macun' - PuTTY formatında və ya formatında)"; Serial.println ("'dayan' - pul üçün hesablama"); Serial.println ("'yenidən başlat' - inicia/reinicia bir qiymətləndirmə və ya taymer"); Serial.println ("'davam et" - Continua a tahmin etmək "); Serial.print ("\ n / rEstado: / n / r * max_time:"); Serial. çap (maxmin); Serial.print ("minutos / n / r * target_mA:"); Serial.print (target_mA); Serial.print ("mA / n / r * epsilon_mA:"); Serial. çap (epsilon_mA); Serial.print ("mA / n / r * R:"); Serial. çap (R); Serial.println ("Ohms"); }

bool parse_param (String & cmdString) {

int spacePos = cmdString.indexOf (''); if (spacePos <= 0) false qaytar; String əmri = cmdString.substring (0, spacePos); String fval = cmdString.substring (spacePos+1); if (command == "macun") if (fval == "doğru") {macun = doğru; doğru qayıtmaq; } if if (fval == "false") {macun = false; doğru qayıtmaq; } float val = fval.toFloat (); if (command == "target_mA") {if (val100.0) {false false; } hədəf_mA = dəyər; clearAndHome (); kömək (); } if if (command == "epsilon_mA") {if (val0.3) {return false; } epsilon_mA = dəyər; clearAndHome (); kömək (); } if if (command == "R") {R = val; clearAndHome (); kömək (); } if if (command == "max_time") {maxmin = val; clearAndHome (); kömək (); } else {false false; } doğru qayıt; }

// AYARLAMA VƏ ƏSAS İLK

void setup () {Serial.begin (115200); analoq İstinad (Daxili); //1.1 V Serial.print ("Sessão iniciada!"); start = millis (); } void loop () {if (state! =-10) {process_feedback (); } əgər (Serial.available ()> 0) {char v = Serial.read (); if (bayt (v) == 13) {// Daşınma qaytarılması bool qəbul edildi = doğru; if (commandString == "?" || commandString == "stop") {stop_device (); } if if (commandString == "restart") {clearAndHome (); vəziyyət = -1; outV = maxOutV/5.0; start = millis (); qəbul edildi = yalan; } else if (commandString == "davam") {clearAndHome (); vəziyyət = -1; outV = maxOutV/5.0; qəbul edildi = yalan; } başqa {bool ok = parse_param (commandString); if (! tamam) {clearAndHome (); kömək (); qəbul edildi = yalan; Serial.println ("Comando desconhecido: '" + commandString + "'"); }} commandString = ""; əgər (qəbul olunarsa) {clearAndHome (); kömək (); Serial.println ("Ok!"); }} başqa {commandString+= v; if (vəziyyət ==-10) {Serial.print (v); }}}}

Addım 4: Uma UI Personalizada

UI UI Personalizada
UI UI Personalizada

Axtarış zamanı bir Ferramenta PuTTY istifadə edin və heç bir yazı tipini yazmayın:

macun = doğrudur

Təyinat qaydaları:

  • Pəncərə

    • 61 Colunas və 20 Linhas
    • Kaydırma çubuğunu göstərin
  • Pəncərə> Görünüş

    Yazı Tipi: Lucida Konsolu, 28 piksel

Addım 5: Duvidas?

Başlanğıcda bir rəqəm yazın:

?

basın [ENTER]

OBS: Caso və ya Estado:

-1 -> Cérebro não identificado (düzəlişlər) +0 -> Ajustando voltagem+1 -> Tudo sertifikatı, tDCS funksiyası

Tövsiyə: