Arduino TDCS Super Simples. Транскраниальды тұрақты ток стимуляторы (tDCS) DIY: 5 қадам
Arduino TDCS Super Simples. Транскраниальды тұрақты ток стимуляторы (tDCS) DIY: 5 қадам
Anonim
Arduino TDCS Super Simples. Транскраниальды тұрақты ток стимуляторы (tDCS) DIY
Arduino TDCS Super Simples. Транскраниальды тұрақты ток стимуляторы (tDCS) DIY

TDCS параметрлері алдын -ала анықталады, резистор, конденсатор және электронды компоненттер

  1. Ардуино

    • PWM D13 комбинациясы PWM (pode ser alterado).
    • P0 A0 como entrada analógica (кері байланыс бойынша пікір).
    • GND үшін GND көрсеткіштері.
  2. Резистор (~ 470 Ω, 300-1000 Ω функциялары, функционалдылық, алфавитке ешқандай айырмашылық жоқ)
  3. Конденсатор (220 мкФ). PWM жасайтын пульсацияларды орнатыңыз.
  4. Eletrodos de Esponja (Use água salina para molhá-lo).

Комо фунциона

O Arduino калькуляторы сіздің есептік жазбаңызды жаңартуға мүмкіндік береді. CLI (Console) сериялы target_mA мәнін өзгертуге болады.

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

Сайба Маис
Сайба Маис

TDCS Primeiro бағдарламасын шығарыңыз. FDA электрондық поштаға зиян келтіретіні белгілі бір уақытқа созылады, бұл сіздің жеке меншігіңізде, сонымен қатар алдын -ала …

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

Monte O Circuito Abaixo
Monte O Circuito Abaixo

Еске алу қажет емес!

3 -қадам: O Codigo No Seu Arduino орнатыңыз

Параметрлерді конфигурациялау параметрлері ретінде HARDWARE PARAMS e CONFIGURABLE PARAMS.

Дауыс беру жылдамдығының сериялық мәні: 115200 үшін нәтиже.

Командалар мен командирлер, «Тасымалдауды қайтару» жолында шектеу жоқ.

Қарап шығу + репозиторийлері жоқ оқулықтар:

Кодиго:

const String ver = «2,0 м»; // HARDWARE PARAMS const int analogInPin = A0; // Analoggico 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; // Resistencia da Corente [Ом]

// конфигурацияланатын парам

bool плоттер = жалған; // Дефинация: шындық, сериялық плоттер боль замаска = жалған; // Анықтама: рас, PuTTT (CLI жоқ альтернативті код) int maxmin = 30; // Tempo (em minutos) міндеттері [Min] float target_mA = 2.73; // Есептік жазбаңызды жасаңыз !!! [mA] қалқыма epsilon_mA = 0,03; // Diferença máxima to add a corente a e e target_mA (Não altere caso não saiba o que está fazendo!)

// INL GLOBALS

ішкі күй = 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) {күй = -1; // resistência muito alta -> cérebro não encontrado? maxOutV қайтару; // maxOutV/5.0 қайтару; // параграфтық} күй = 0; қайтару 0,1*жаңа_В+0,9*В; // new_V қайтару; }

int convertVtoOutputValue (өзгермелі V) {

қайтару шектеуі (int (V/maxOutV*255), 0, 255); }

өзгермелі сенсорValue2mA (int sensorValue) {

өзгермелі сенсорVoltage = sensorValue/1023.0*maxRefInV; float sensor_mA = sensorVoltage/R*1000.0; sensor_mA қайтару; }

int debounced_state_compute (күй күйі) {

егер (5 -күй) 0 қайтарады; } қайтару 1; }

қол қойылмаған ұзақ бастау, аяқтау;

void process_feedback () {int sensorValue = analogRead (analogInPin); float new_mA = sensorValue2mA (sensorValue); тегістелген_мА = 0,2*жаңа_мА+0,8*тегістелген_мА; өзгермелі V = шығысV; outV = computeOutVoltage (V, new_mA); analogWrite (analogOutPin, convertVtoOutputValue (outV)); debounced_state = debounced_state_cute (күй); // ExII ақпарат жоқ CLI endc = (millis ()-бастау)/1000; Тізім tv = «[», ttm = «mA/», tsm = «V,», ts = «mA] | Эстадо:», h = «| Tempo:», s = «:», leadM = «», leadS = «», plotT = «Мақсат:», plotmA = «\ tТегістелген MA:», plotMin = «\ tMin:», темп; белгісіз ұзын tmin = endc/60-((endc/60)%1); // Форматтау if (endc%60 <10) leadS = «0»; егер (tmin = 0) ts = ts + « +»; // Параметрлер автоматты түрде if (tmin> maxmin) stop_device (); Жол мәтіні; егер (плоттер) txt = plotT + target_mA + plotMin + «0» + plotmA + тегістелген_mA; else txt = tv + V + tsm + тегістелген_мА + ttm + target_mA + ts + күйден шығарылған_стат + h + temp; if (macun) 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 («'max_time' - жылдамдық немесе жылдамдық (минут)»); Serial.println («'target_mA' - мақсатты пайдалану (mA)»); Serial.println («'epsilon_mA' - atualiza o epsilon_mA (mA)»); Serial.println («'R' - аппараттық құралдардың төзімділігі (Ом)»); Serial.println («'macun' - PuTTY форматындағы файлдарды өңдеу)»; Serial.println («тоқтату» - бағалау үшін «); Serial.println («'restart' - inicia/reinicia & a timulação & o timer»); Serial.println («'жалғастыру' - continua a smesulação»); 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 қайтарады; Жол командасы = cmdString.substring (0, spacePos); Жол 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) {false false; } target_mA = val; clearAndHome (); Көмектесіңдер(); } if if (command == «epsilon_mA») {if (val0.3) {return false; } epsilon_mA = вал; clearAndHome (); Көмектесіңдер(); } if if (command == «R») {R = val; clearAndHome (); Көмектесіңдер(); } if if (command == «max_time») {maxmin = val; clearAndHome (); Көмектесіңдер(); } else {return false; } шындықты қайтару; }

// ОРНАТУ ЖӘНЕ НЕГІЗГІ Цикл

void setup () {Serial.begin (115200); аналогтық сілтеме (ІШКІ); //1.1 V Serial.print («Sessão iniciada!»); бастау = millis (); } void loop () {if (state! =-10) {process_feedback (); } if (Serial.available ()> 0) {char v = Serial.read (); if (байт (v) == 13) {// Carriage return bool қабылданды = true; if (commandString == «?» || commandString == «stop») {stop_device (); } else if (commandString == «restart») {clearAndHome (); күй = -1; outV = maxOutV/5.0; бастау = millis (); қабылданды = жалған; } else if (commandString == «жалғастыру») {clearAndHome (); күй = -1; outV = maxOutV/5.0; қабылданды = жалған; } else {bool ok = parse_param (commandString); if (! жарайды) {clearAndHome (); Көмектесіңдер(); қабылданды = жалған; Serial.println («Comando desconhecido: '» + commandString + «'»); }} commandString = «»; if (қабылданған) {clearAndHome (); Көмектесіңдер(); Serial.println («Жарайды!»); }} басқа {commandString+= v; if (state ==-10) {Serial.print (v); }}}}

4 -қадам: Uma UI Personalizada

UI UI Personalizada
UI UI Personalizada

Портативті байланыс үшін PuTTY ферраментасын қолданыңыз, сандар жоқ:

замазка = ақиқат

Анықтамалар:

  • Терезе

    • 61 Colunas e 20 Linhas
    • Айналдыру жолағын көрсетіңіз
  • Терезе> Сыртқы түрі

    Қаріп: Lucida Console, 28 пиксель

5 -қадам: Дувидас?

Абру -джуа -аудада, цифр:

?

басу [ENTER]

OBS: Caso немесе Estado сайты:

-1 -> Cérebro não identificado (түзету) +0 -> Ajustando voltagem+1 -> Тудо сертификаты, tDCS функциясы

Ұсынылған: