สารบัญ:

Arduino TDCS Super Simples Transcranial Direct Current Stimulator (tDCS) DIY: 5 ขั้นตอน
Arduino TDCS Super Simples Transcranial Direct Current Stimulator (tDCS) DIY: 5 ขั้นตอน

วีดีโอ: Arduino TDCS Super Simples Transcranial Direct Current Stimulator (tDCS) DIY: 5 ขั้นตอน

วีดีโอ: Arduino TDCS Super Simples Transcranial Direct Current Stimulator (tDCS) DIY: 5 ขั้นตอน
วีดีโอ: Transcranial Direct Current Stimulation (tDCS) explained | Neuroscience Methods 101 2024, พฤศจิกายน
Anonim
Arduino TDCS Super Simples เครื่องกระตุ้นกระแสไฟตรง Transcranial (tDCS) DIY
Arduino TDCS Super Simples เครื่องกระตุ้นกระแสไฟตรง Transcranial (tDCS) DIY

Para fazer este tDCS ที่ใช้กับ Arduino, ตัวต้านทาน, ตัวเก็บประจุและอัลกัน cabosส่วนประกอบ

  1. Arduino

    • Pino D13 como saída PWM (pode ser alterado).
    • Pino A0 como entrada analógica (สำหรับข้อเสนอแนะของ corrente)
    • Pino GND apenas สำหรับ GND
  2. ตัวต้านทาน (~470 Ω, มากกว่า 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).

โคโม funciona

O Arduino แคลคูลา 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 (คอนโซล)

ขั้นตอนที่ 1: Saiba Mais

สายบะ ไมส
สายบะ ไมส

Você deve ler mais sobre tDCS ไพรม์โร Não é aprovado pelo FDA e pode ser prejudicial a sua saúde, principalmente se você não sabe nada sobre os efeitos colaterais, precauções e dentre outros…

ขั้นตอนที่ 2: Monte O Circuito Abaixo

Monte O Circuito Abaixo
Monte O Circuito Abaixo

มากกว่า se esqueça das esponjas com água salina!

ขั้นตอนที่ 3: ติดตั้ง O Código No Seu Arduino

Lembre-se de alterar เป็น configurações e parametros na área de HARDWARE PARAMS และ CONFIGURABLE PARAMS

Você também deve alterar o boud rate do Serial para: 115200 สำหรับ poder ver o resultado

Para executar comandos, troque o No Line Ending สำหรับ Carriage Return

O código fonte + บทช่วยสอน também podem ser encontrados no repositório:

คอร์ดิโก:

const สตริง ver = "2.0m"; //พารามิเตอร์ฮาร์ดแวร์ const int analogInPin = A0; // Entrada do Analógico const int analogOutPin = 13; // Saida D13 padrão float maxOutV = 5.0; // แรงดันไฟฟ้าที่ใช้ PWM สำหรับ Arduino [V] float maxRefInV = 1.1; // อ้างอิง à voltagem analógica [V] float R = 470.0; // Resistencia da corrente [โอห์ม]

//พารามิเตอร์ที่กำหนดได้

บูลล็อตเตอร์ = เท็จ; // Defina: true, caso esteja usando o ตัวพล็อตเตอร์แบบอนุกรม bool putty = false; // Defina: จริง, caso esteja usando o PuTTT (pode ser alterado no CLI) int maxmin = 30; // Tempo (em minutos) จำเป็นสำหรับ 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 จริง 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. คำศัพท์ esta na corrente definida -10 - Voltagem desligada */ float outV = maxOutV; // Voltagem int debounced_state = 0; int zeros_len = 0; ลอยเรียบ_mA=0;

สตริง commandString = ""; // สำหรับ CLI

// ตัวช่วยตอบกลับ

float computeOutVoltage(float V, float new_mA){ if(abs(new_mA-target_mA)maxOutV){ state = -1; // ต้านทาน muito alta -> cérebro não encontrado? ส่งคืน maxOutV; // ส่งคืน maxOutV/5.0; // para segurança } state = 0; คืนค่า 0.1*new_V+0.9*V; // return new_V; }

int convertVtoOutputValue (โฟลต V){

ข้อจำกัดผลตอบแทน (int(V/maxOutV*255), 0, 255); }

เซ็นเซอร์ลอยค่า 2mA (ค่าเซ็นเซอร์ int) {

เซ็นเซอร์ลอยแรงดัน = sensorValue/1023.0*maxRefInV; float sensor_mA = เซ็นเซอร์แรงดัน/R*1000.0; ส่งคืน sensor_mA; }

int debounced_state_compute (สถานะ int){

ถ้า (สถานะ 5) คืนค่า 0; } ส่งคืน 1; }

การเริ่มต้นระยะยาวที่ไม่ได้ลงนาม endc;

เป็นโมฆะ process_feedback () { int sensorValue = analogRead (analogInPin); float new_mA = sensorValue2mA (ค่าเซ็นเซอร์); เรียบ_mA = 0.2*ใหม่_mA+0.8*เรียบ_mA; ลอย V = outV; outV = computeOutVoltage(V, new_mA); analogWrite (analogOutPin, convertVtoOutputValue (outV)); debounced_state = debounced_state_compute (รัฐ); // Exibir Informações no CLI endc = (มิลลิวินาที ()-start)/1000; สตริงทีวี = "[", ttm = "mA/", tsm = "V, ", ts = "mA] | Estado: ", h = " | Tempo: ", s = ":", leadM = "", leadS = "", plotT = "เป้าหมาย: ", plotmA = "\tSmoothed MA: ", plotMin = "\tMin: ", จังหวะ; unsigned long tmin = endc/60-((endc/60)%1); // Formatação ถ้า (endc%60<10) leadS = "0"; ถ้า (tmin=0) ts = ts + "+"; // Parar อัตโนมัติถ้า (tmin>maxmin) stop_device(); สตริง txt; ถ้า (พล็อตเตอร์) txt = plotT + target_mA + plotMin + "0" + plotmA + smoothed_mA; อื่น txt = ทีวี + V + tsm + smoothed_mA + ttm + target_mA + ts + debounced_state + h + จังหวะ; ถ้า (ผงสำหรับอุดรู) Serial.print("\r\e[?25l" + txt); อื่น Serial.println(txt);

// รอ 2 มิลลิวินาทีก่อนวนรอบถัดไป

// สำหรับตัวแปลงอนาล็อกเป็นดิจิตอลเพื่อชำระ // หลังจากการอ่านครั้งสุดท้าย: ล่าช้า(5); }

เป็นโมฆะ stop_device(){

รัฐ = -10; analogWrite (analogOutPin, 0); clearAndHome(); Serial.println("เซสชัน tDCS interrompida"); Serial.println("-----------------------"); ช่วย(); }

//ผู้ช่วย CLI

เป็นโมฆะ clearAndHome () { Serial.write (27); Serial.print("[2J"); // limpa a tela Serial.write (27); // ESC Serial.print("[H"); // \r if (!putty) สำหรับ (int i = 0; i<=30; i++) Serial.println(""); }

โมฆะช่วย (){

Serial.println("tDSC arduino, เวอร์ชั่น "+ver); Serial.println("'?' - อาจดา"); Serial.println("'max_time' - atualiza o tempo máximo (em minutos)"); Serial.println("'target_mA' - atualiza o เป้าหมาย (mA)"); Serial.println("'epsilon_mA' - atualiza o epsilon_mA (mA)"); Serial.println("'R ' - atualiza a resistência do hardware (Ohm)"); Serial.println("'putty ' - muda a formatação de saída pro PuTTY"); Serial.println("'stop' - สำหรับค่าประมาณการ"); Serial.println("'เริ่มต้นใหม่' - inicia/reinicia a estimulação & o timer"); Serial.println("'continue' - ดำเนินการต่อ a estimulação"); Serial.print("\n\rEstado:\n\r * max_time: "); Serial.print(maxmin); Serial.print(" นาที\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 (สตริง & cmdString){

int spacePos = cmdString.indexOf(' '); if(spacePos<=0) คืนค่าเท็จ คำสั่งสตริง = cmdString.substring(0, spacePos); สตริง fval = cmdString.substring (spacePos+1); if(command=="putty") if (fval=="true"){ putty = true; คืนค่าจริง; } else if (fval=="false"){ ฉาบ = เท็จ; คืนค่าจริง; } float val = fval.toFloat(); if(command=="target_mA"){ if(val100.0){ คืนค่าเท็จ } target_mA = วาล; clearAndHome(); ช่วย(); } else if(command=="epsilon_mA"){ if(val0.3){ คืนค่าเท็จ } epsilon_mA = วาล; clearAndHome(); ช่วย(); }อื่น if(command=="R"){ R = val; clearAndHome(); ช่วย(); }อื่น if(command=="max_time"){ maxmin = val; clearAndHome(); ช่วย(); }อื่น{ คืนค่าเท็จ; } คืนค่าจริง; }

//การตั้งค่าและลูปหลัก

การตั้งค่าเป็นโมฆะ () { Serial.begin (115200); analogReference (ภายใน); //1.1 V Serial.print("Sessão iniciada!"); เริ่มต้น = มิลลิวินาที (); } วงเป็นโมฆะ (){ if(state!=-10){ process_feedback(); } if (Serial.available() > 0){ ถ่าน v = Serial.read(); if (byte (v) == 13) { // Carriage return bool ยอมรับ = true; if (commandString == "?" || commandString == "stop"){ stop_device(); } else if (commandString == "รีสตาร์ท"){ clearAndHome(); รัฐ = -1; outV = maxOutV/5.0; เริ่มต้น = มิลลิวินาที (); ยอมรับ = เท็จ; } else if (commandString == "ดำเนินการต่อ"){ clearAndHome(); รัฐ = -1; outV = maxOutV/5.0; ยอมรับ = เท็จ; }อื่น{ bool ok = parse_param(commandString); ถ้า(!ok){ clearAndHome(); ช่วย(); ยอมรับ = เท็จ; Serial.println("Commando desconhecido: '" + commandString + "'"); } } commandString = ""; ถ้า (ยอมรับ){ clearAndHome(); ช่วย(); Serial.println("ตกลง!"); } }อื่น{ 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:

ผงสำหรับอุดรู = true

Recomendações de คำนิยาม:

  • หน้าต่าง

    • 61 Colunas และ 20 Linhas
    • แสดงแถบเลื่อน desativado
  • หน้าต่าง > ลักษณะที่ปรากฏ

    แบบอักษร: Lucida Console, 28px

ขั้นตอนที่ 5: ดูวิดาส?

Para abrir a guia de ajuda, ตัวเลข:

?

เอสเพรสโซ่ [ENTER]

OBS:Caso หรือ Estado seja:

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

แนะนำ: