فهرست مطالب:

آردوینو TDCS فوق العاده ساده DIY تحریک کننده جریان مستقیم جمجمه (tDCS) DIY: 5 مرحله
آردوینو TDCS فوق العاده ساده DIY تحریک کننده جریان مستقیم جمجمه (tDCS) DIY: 5 مرحله

تصویری: آردوینو TDCS فوق العاده ساده DIY تحریک کننده جریان مستقیم جمجمه (tDCS) DIY: 5 مرحله

تصویری: آردوینو TDCS فوق العاده ساده DIY تحریک کننده جریان مستقیم جمجمه (tDCS) DIY: 5 مرحله
تصویری: Arduino Cranial Stimulator Bio BrainTuner 2024, جولای
Anonim
آردوینو TDCS فوق العاده ساده DIY تحریک کننده جریان مستقیم جمجمه (tDCS) DIY
آردوینو TDCS فوق العاده ساده DIY تحریک کننده جریان مستقیم جمجمه (tDCS) DIY

Para fazer este tDCS você precisará apenas de um arduino، resistor، capacitor e alguns cabos مonلفه ها

  1. آردوینو

    • Pino D13 como saída PWM (pode ser alterado).
    • Pino A0 como entrada analógica (برای بازخورد de corrente).
    • Pino GND apenas para GND.
  2. Resistor (70 470 Ω، mas provavelmente entre 300-1000 Ω funciona، você precisará alterar no código fonte)
  3. خازن (220 μF). قبل از PWM برای استقرار و پالس سرو کنید.
  4. Eletrodos de Esponja (از água salina para molhá-lo استفاده کنید).

Como funciona

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: سایبا میس

سایبا میس
سایبا میس

Você deve ler mais sobre tDCS primeiro. Não aprovado pelo FDA e pode ser biududicial a suade ، اصول اصطلاحات خود را در مورد اصول پیشگیرانه ، پیشگیری و پیشگیری از…

مرحله 2: Monte O Circuito Abaixo

مونته O Circuito Abaixo
مونته 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 and CONFIGURABLE PARAMS.

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

Para ekzar comandos ، troque o No Line Ending برای Carriage Return.

O código fonte + آموزش também podem ser encontrados no repositório:

Código:

const String 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 [اهم]

// پارامترهای قابل تنظیم

bool plotter = false؛ // Defina: true، caso esteja usando o Serial plotter bool putty = false؛ // Defina: true، caso esteja usando o PuTTT (pode ser alterado no CLI) int maxmin = 30؛ // Tempo (em minutos) needário para desligar [Min] float target_mA = 2.73؛ // Essa é a corrente que passará pelo seu cérebro !!! [mA] شناور 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 debounced_state = 0؛ int zeros_len = 0؛ شناور smoothed_mA = 0 ؛

string stringString = ""؛ // برای 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) {

float sensorVoltage = sensorValue/1023.0*maxRefInV؛ float sensor_mA = sensorVoltage/R*1000.0 ؛ sensor_mA بازگشت ؛ }

int debounced_state_compute (int state) {

if (حالت 5) بازگشت 0 ؛ } بازگشت 1؛ }

شروع طولانی بدون علامت ، پایان؛

void process_feedback () {int sensorValue = analogRead (analogInPin) ؛ float 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)) ؛ debounced_state = debounced_state_compute (state)؛ // Exibir informações no CLI endc = (millis ()-start)/1000؛ رشته تلویزیونی = "[" ، ttm = "mA/" ، tsm = "V" ، ts = "mA] | Estado:" ، h = "| Tempo:" ، s = ":" ، leadM = "" ، leadS = "" ، plotT = "هدف:" ، plotmA = "\ tSmoothed MA:" ، plotMin = "\ t حداقل:" ، سرعت ؛ 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 ؛ if (plotter) txt = plotT + target_mA + plotMin + "0" + plotmA + smoothed_mA ؛ else txt = tv + V + tsm + smoothed_mA + ttm + target_mA + ts + debounced_state + h + tempo؛ 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 اگر (! بتونه) برای (int i = 0؛ i <= 30؛ i ++) Serial.println ("")؛ }

void help () {

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 ("'putty' - muda a formatação de saída pro PuTTY") ؛ Serial.println ("'stop' - para a estulação") ؛ Serial.println ("'راه اندازی مجدد' - inicia/reinicia a estulaula & o timer")؛ Serial.println ("'ادامه" - Continua a estmulaçã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؛ بازگشت واقعی ؛ } 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 ()؛ کمک()؛ } else {return false؛ } true true؛ }

// SETUP و MAIN LOOP

void setup () {Serial.begin (115200)؛ مرجع analog (داخلی) ؛ //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 (byte (v) == 13) {// حمل و نقل بار bool پذیرفته شده = true؛ if (commandString == "؟" || commandString == "stop") {stop_device ()؛ } else if (commandString == "راه اندازی مجدد") {clearAndHome ()؛ حالت = -1 ؛ outV = maxOutV/5.0 ؛ شروع = millis ()؛ پذیرفته شده = غلط ؛ } else if (commandString == "ادامه") {clearAndHome ()؛ حالت = -1 ؛ outV = maxOutV/5.0 ؛ پذیرفته شده = غلط ؛ } else {bool ok = parse_param (commandString) ؛ اگر (! خوب) {clearAndHome ()؛ کمک()؛ پذیرفته شده = غلط ؛ Serial.println ("Comando desconhecido: '" + commandString + "'")؛ }} commandString = ""؛ اگر (پذیرفته شده) {clearAndHome ()؛ کمک()؛ Serial.println ("خوب!") ؛ }} else {commandString+= v؛ if (state ==-10) {Serial.print (v)؛ }}}}

مرحله 4: Uma UI Personalizada

Uma UI Personalizada
Uma UI Personalizada

Para melhor acompanhamento e segurança، use a ferramenta PuTTY، e defina no código fonte:

بتونه = درست

Recomandações de definições:

  • پنجره

    • 61 Colunas e 20 Linhas
    • نمایش نوار پیمایش مطلوب
  • پنجره> ظاهر

    فونت: کنسول Lucida ، 28 پیکسل

مرحله 5: داویداس؟

Para abrir a guia de ajuda، digite:

?

e pressione [ENTER]

OBS: Caso o Estado seja:

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

توصیه شده: