สารบัญ:
- ขั้นตอนที่ 1: Saiba Mais
- ขั้นตอนที่ 2: Monte O Circuito Abaixo
- ขั้นตอนที่ 3: ติดตั้ง O Código No Seu Arduino
- ขั้นตอนที่ 4: Uma UI Personalizada
- ขั้นตอนที่ 5: ดูวิดาส?
วีดีโอ: Arduino TDCS Super Simples Transcranial Direct Current Stimulator (tDCS) DIY: 5 ขั้นตอน
2024 ผู้เขียน: John Day | [email protected]. แก้ไขล่าสุด: 2024-01-30 13:05
Para fazer este tDCS ที่ใช้กับ Arduino, ตัวต้านทาน, ตัวเก็บประจุและอัลกัน cabosส่วนประกอบ
-
Arduino
- Pino D13 como saída PWM (pode ser alterado).
- Pino A0 como entrada analógica (สำหรับข้อเสนอแนะของ corrente)
- Pino GND apenas สำหรับ GND
- ตัวต้านทาน (~470 Ω, มากกว่า 300-1000 Ω funciona, você precisará alterar no código fonte)
- ตัวเก็บประจุ (220 μF) ให้บริการสำหรับ estabilizar os pulsos do PWM
- 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
มากกว่า 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
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
แนะนำ:
สเต็ปเปอร์มอเตอร์ที่ควบคุมโดย MIDI พร้อมชิป Direct Digital Synthesis (DDS) 3 ขั้นตอน
สเต็ปเปอร์มอเตอร์ที่ควบคุมโดย MIDI พร้อมชิป Direct Digital Synthesis (DDS): เคยมีความคิดแย่ๆ บ้างไหมว่าคุณต้องเปลี่ยนเป็นโปรเจ็กต์ขนาดเล็ก ฉันกำลังเล่นสเก็ตช์ที่ฉันสร้างขึ้นสำหรับ Arduino Due โดยมุ่งเป้าไปที่การสร้างเพลงด้วยโมดูล AD9833 Direct Digital Synthesis (DDS) … และเมื่อถึงจุดหนึ่งฉันก็คิดว่า &q
Sinking Vs Sourcing Current ใน Arduino: 3 ขั้นตอน
Sinking Vs Sourcing Current ใน Arduino: ในคำแนะนำนี้ เราจะดูความแตกต่างของการจัดหาและการจมกระแสผ่าน Arduino
DIY Current Sensor สำหรับ Arduino: 6 ขั้นตอน
DIY Current Sensor สำหรับ Arduino: สวัสดี หวังว่าคุณจะทำได้ดี และในบทช่วยสอนนี้ ฉันจะแสดงให้คุณเห็นว่าฉันสร้างเซ็นเซอร์ปัจจุบันสำหรับ Arduino ได้อย่างไร โดยใช้ส่วนประกอบอิเล็กทรอนิกส์ขั้นพื้นฐานและ shunt ที่ทำเองที่บ้าน การแบ่งนี้สามารถจัดการกับกระแสขนาดใหญ่ได้อย่างง่ายดายรอบ
RTL-SDR Direct Sampling Mod: 3 ขั้นตอน
RTL-SDR Direct Sampling Mod: ดองเกิลจำนวนมากไม่สามารถใช้ความถี่ที่ต่ำกว่า 30 เมกะเฮิร์ตซ์ อย่างไรก็ตาม เป็นไปได้ที่จะปรับเปลี่ยนอุปกรณ์บางอย่างโดยใช้วิธีการเรียกการสุ่มตัวอย่างโดยตรง ในการสุ่มตัวอย่างโดยตรง เราใช้สัญญาณโดยตรงกับ 'สมอง' ของดองเกิล โดยจะเลี่ยงผ่านเ
DIY High Current Motor Driver (h-bridge): 5 ขั้นตอน
DIY High Current Motor Driver (h-bridge): โปรเจ็กต์นี้คือการอัพเกรดมอเตอร์และอุปกรณ์อิเล็กทรอนิกส์ในจักรยานสี่ล้อสำหรับเด็ก Power Wheels นี้ เปี่ยมด้วยประสิทธิภาพของ 12V mini-quad เราวางแผนที่จะอัปเกรดเป็นระบบ 24v ด้วยมอเตอร์แบบมีแปรง traxxis 775 ใหม่ 2 ตัว หลังจากค้นคว้าวิจัยเชิงพาณิชย์