جدول المحتويات:

اردوينو TDCS سوبر سيمبلز. محفز التيار المباشر عبر الجمجمة (tDCS) DIY: 5 خطوات
اردوينو TDCS سوبر سيمبلز. محفز التيار المباشر عبر الجمجمة (tDCS) DIY: 5 خطوات

فيديو: اردوينو TDCS سوبر سيمبلز. محفز التيار المباشر عبر الجمجمة (tDCS) DIY: 5 خطوات

فيديو: اردوينو TDCS سوبر سيمبلز. محفز التيار المباشر عبر الجمجمة (tDCS) DIY: 5 خطوات
فيديو: Simple DIY TENS and TDCS Example 2024, شهر نوفمبر
Anonim
اردوينو TDCS سوبر سيمبلز. محفز التيار المباشر عبر الجمجمة (tDCS) DIY
اردوينو TDCS سوبر سيمبلز. محفز التيار المباشر عبر الجمجمة (tDCS) DIY

Para fazer este tDCS você precisará apenas de um arduino، resistor، capacitor e alguns cabos المكونات

  1. اردوينو

    • Pino D13 como saída PWM (pode ser alterado).
    • Pino A0 como entrada analógica (الفقرة feedback de corrente).
    • Pino GND apenas الفقرة GND.
  2. المقاوم (~ 470 Ω، mas provavelmente entre 300-1000 funciona، você precisará alterar no código fonte)
  3. مكثف (220 μF). تخدم الفقرة estabilizar os pulsos do PWM.
  4. Eletrodos de Esponja (استخدم água salina para molhá-lo).

وظيفة كومو

O Arduino calcula a corrente padrão (pode ser alterado) que passará pelo seu cérebro apenas por mudar a voltagem de saída. Você também pode alterar o valor do target_mA pelo serial CLI (Console).

الخطوة 1: Saiba Mais

صيبا ميس
صيبا ميس

Você deve ler mais sobre tDCS Primeiro. Não é aprovado pelo FDA e pode serjud a sua saúde، mainmente se você não sabe nada sobre os efeitos colaterais، precauções e dentre outros…

الخطوة 2: Monte O Circuito Abaixo

مونتي أو سيركيتو أبايكسو
مونتي أو سيركيتو أبايكسو

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

الخطوة 3: تثبيت O Código No Seu Arduino

Lembre-se de alterar as configurações e parametros na área de HARDWARE PARAMS e PARAMS القابلة للتهيئة.

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

قواعد تنفيذية ، توك ، لا خط ينتهي لعودة النقل.

O código fonte + تعليمي também podem ser encontrados no repositório:

كوديغو:

سلسلة نصية ver = "2.0m" ؛ // HARDWARE PARAMS const int analogInPin = A0 ؛ // Entrada do Analógico const int analogOutPin = 13 ؛ // Saida D13 padrão float maxOutV = 5.0 ؛ // A voltagem de saída PWM padrão do Arduino [V] float maxRefInV = 1.1 ؛ // Referencia à voltagem analógica [V] float R = 470.0 ؛ // Resistencia da corrente [أوم]

// المعلمات القابلة للتهيئة

الراسمة المنطقية = خطأ ؛ // Defina: true ، caso esteja usando o معجون منطقي للرسام التسلسلي = خطأ ؛ // Defina: true، caso esteja usando o PuTTT (pode ser alterado no CLI) int maxmin = 30 ؛ // الإيقاع (em minutos) ضروري للفقرة desligar [Min] float target_mA = 2.73 ؛ // Essa é a corrente que passará pelo seu cérebro !!! [مللي أمبير] عائم epsilon_mA = 0.03 ؛ // Diferença máxima entre a corrente real e o target_mA (Não altere caso não saiba o que está fazendo!)

// INIT GLOBALS

الدولة int = 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 * / float outV = maxOutV؛ // Voltagem int debuted_state = 0 ؛ int zeros_len = 0 ؛ تعويم Smoothed_mA = 0 ؛

سلسلة 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 ؛ // إرجاع new_V ؛ }

int convertVtoOutputValue (float V) {

تقييد العودة (int (V / maxOutV * 255) ، 0 ، 255) ؛ }

تعويم الاستشعارValue2mA (int sensorValue) {

مستشعر تعويم الجهد = sensorValue / 1023.0 * maxRefInV ؛ تعويم sensor_mA = sensorVoltage / R * 1000.0 ؛ عودة sensor_mA ؛ }

int debuted_state_compute (حالة int) {

إذا (الحالة 5) إرجاع 0 ؛ } العودة 1؛ }

بداية طويلة بدون توقيع ، endc ؛

void process_feedback () {int sensorValue = analogRead (analogInPin) ؛ تعويم new_mA = sensorValue2mA (sensorValue) ؛ Smoothed_mA = 0.2 * new_mA + 0.8 * smoothed_mA ؛ تعويم V = outV ؛ outV = computeOutVoltage (V ، new_mA) ؛ analogWrite (analogOutPin ، convertVtoOutputValue (outV)) ؛ debuted_state = debuted_state_compute (حالة) ؛ // Exibir informações no CLI endc = (millis () - start) / 1000 ؛ String tv = "["، ttm = "mA /"، tsm = "V،"، ts = "mA] | Estado:"، h = "| Tempo:"، s = ":"، leadM = ""، LeadS = ""، plotT = "الهدف:"، plotmA = "\ t MA Smoothed:"، plotMin = "\ t Min:"، tempo؛ tmin طويل بدون توقيع = endc / 60 - ((endc / 60)٪ 1) ؛ // Formatação if (endc٪ 60 <10) leadS = "0" ؛ إذا (tmin = 0) ts = ts + "+" ؛ // Parar automaticamente if (tmin> maxmin) stop_device () ؛ سلسلة نصية ؛ إذا (الراسمة) txt = plotT + target_mA + plotMin + "0" + plotmA + smoothed_mA ؛ else txt = tv + V + tsm + smoothed_mA + ttm + target_mA + ts + debuted_state + h + tempo ؛ إذا (معجون) Serial.print ("\ r / e [؟ 25l" + txt) ؛ آخر Serial.println (txt) ؛

// انتظر ملي ثانية قبل الحلقة التالية

// للمحول التناظري إلى الرقمي لتسوية // بعد القراءة الأخيرة: تأخير (5) ؛ }

stop_device باطل () {

الدولة = -10 ؛ analogWrite (analogOutPin ، 0) ؛ clearAndHome () ، Serial.println ("Sessão tDCS interrompida") ؛ Serial.println ("------------------------") ؛ يساعد()؛ }

// مساعدو CLI

void clearAndHome () {Serial.write (27) ؛ Serial.print ("[2J") ؛ // limpa a tela Serial.write (27) ؛ // ESC Serial.print ("[H") ؛ // / r إذا (! المعجون) لـ (int i = 0 ؛ i <= 30 ؛ i ++) Serial.println ("") ؛ }

مساعدة باطلة () {

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 target (mA)")؛ Serial.println ("'epsilon_mA' - atualiza o epsilon_mA (mA)")؛ Serial.println ("'R' - atualiza a resistência do Hardware (أوم)")؛ Serial.println ("معجون" - muda a formatação de saída pro PuTTY ")؛ Serial.println ("'stop' - para a Estimulação")؛ Serial.println ("إعادة تشغيل" - inicia / reinicia a Estimulação & o timer ")؛ Serial.println ("'متابعة' - استمر في التقدير '')؛ 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 ('') ؛ إذا كانت (spacePos <= 0) ترجع خطأ ؛ أمر السلسلة = cmdString.substring (0، spacePos) ؛ String fval = cmdString.substring (spacePos + 1) ؛ إذا (الأمر == "المعجون") إذا (fval == "صحيح") {المعجون = صحيح ؛ العودة صحيح } else 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 () ، يساعد()؛ } آخر {إرجاع خطأ؛ } عودة صحيحة؛ }

// الإعداد والحلقة الرئيسية

إعداد باطل () {Serial.begin (115200) ؛ تمثيلي المرجع (داخلي) ؛ //1.1 V Serial.print ("Sessão iniciada!") ؛ البداية = ميلي () ؛ } حلقة فارغة () {if (state! = - 10) {process_feedback ()؛ } if (Serial.available ()> 0) {char v = Serial.read ()؛ if (byte (v) == 13) {// Carriage return bool Accept = true ؛ if (commandString == "؟" || commandString == "stop") {stop_device ()؛ } else if (commandString == "reset") {clearAndHome () ؛ الدولة = -1 ؛ outV = maxOutV / 5.0 ؛ البداية = ميلي () ؛ مقبول = خطأ ؛ } else if (commandString == "continue") {clearAndHome ()؛ الدولة = -1 ؛ outV = maxOutV / 5.0 ؛ مقبول = خطأ ؛ } else {bool ok = parse_param (commandString) ؛ إذا (! ok) {clearAndHome () ، يساعد()؛ مقبول = خطأ ؛ Serial.println ("Comando desconhecido: '" + commandString + "" ")؛ }} commandString = ""؛ إذا (تم قبوله) {clearAndHome () ؛ يساعد()؛ Serial.println ("حسنًا!") ؛ }} else {commandString + = v؛ إذا (الحالة == - 10) {Serial.print (v) ؛ }}}}

الخطوة 4: Uma UI Personalizada

Uma UI Personalizada
Uma UI Personalizada

Para melhor acompanhamento e segurança ، استخدم ferramenta PuTTY ، e defina no código fonte:

المعجون = صحيح

Recomendações de definições:

  • نافذة او شباك

    • 61 Colunas e 20 Linhas
    • عرض شريط التمرير desativado
  • نافذة> المظهر

    فونتي: Lucida Console ، 28 بكسل

الخطوة 5: Dúvidas؟

Para abrir a guia de ajuda، digite:

?

الصحافة الإلكترونية [ENTER]

OBS: Caso o Estado seja:

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

موصى به: