Daftar Isi:
- Langkah 1: Saiba Mais
- Langkah 2: Sirkuit Monte O Abaixo
- Langkah 3: Instal O Código No Seu Arduino
- Langkah 4: Personalisasi Uma UI
- Langkah 5: Devidas?
Video: Arduino TDCS Super Sederhana. Stimulator Arus Langsung Transkranial (tDCS) DIY: 5 Langkah
2024 Pengarang: John Day | [email protected]. Terakhir diubah: 2024-01-30 09:56
Para fazer este tDCS você precisará apenas de um arduino, resistor, kapasitor dan alguns cabosKomponen
-
Arduino
- Pino D13 como saída PWM (pode ser alterado).
- Pino A0 como entrada analógica (para feedback de corrente).
- Pino GND apenas untuk GND.
- Resistor (~470, mas provavelmente entre 300-1000 funciona, você precisará alterar no código fonte)
- Kapasitor (220 F). Melayani para estabilizar os pulsos melakukan PWM.
- Eletrodos de Esponja (Gunakan água salina para molhá-lo).
Fungsi como
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 (Konsol).
Langkah 1: Saiba Mais
Voca deve ler mais sobre tDCS primeiro. 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…
Langkah 2: Sirkuit Monte O Abaixo
Tidak ada esqueça das esponjas com água salina!
Langkah 3: Instal O Código No Seu Arduino
Lembre-se de alterar as configuraes e parametros na área de HARDWARE PARAMS e PARAMS CONFIGURABLE.
Você também deve alterar o boud rate do Serial para: 115200 para poder ver o resultado.
Para executar comandos, troque o No Line Ending para Carriage Return.
O código fonte + tutorial também podem ser encontrados no repositório:
Kodigo:
const String ver = "2.0m"; // PARAMS PERANGKAT KERAS const int analogInPin = A0; // Masuk ke Analogi const int analogOutPin = 13; // Saida D13 padrão float maxOutV = 5.0; // Tegangan untuk PWM padrão Arduino [V] float maxRefInV = 1.1; // Referensi voltagem analógica [V] float R = 470.0; // Resistencia da corrente [Ohm]
//PARAM YANG DAPAT DIKONFIGURASI
plotter bool = salah; // 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) necessário para desligar [Min] float target_mA = 2.73; // Essa é a corrente que passará pelo seu cérebro!!! [mA] float epsilon_mA = 0,03; // Diferença máxima entre a corrente real e o target_mA (No altere caso não saiba o que está fazendo!)
//INIT GLOBAL
keadaan 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; // Tegangan int debounced_state = 0; int nol_len = 0; mengapung dihaluskan_mA=0;
String perintahString = ""; //untuk CLI
//UMPAN BALIK PEMBANTU
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? kembali maxOutV; //mengembalikan maxOutV/5.0; // para segurança } status = 0; kembalikan 0.1*new_V+0.9*V; //kembalikan new_V; }
int convertVtoOutputValue(float V){
kembali kendala(int(V/maxOutV*255), 0, 255); }
float sensorValue2mA(int sensorValue){
float sensorVoltage = sensorValue/1023.0*maxRefInV; float sensor_mA = sensorVoltage/R*1000.0; kembalikan sensor_mA; }
int debounced_state_compute(status int){
jika (status 5) mengembalikan 0; } kembali 1; }
unsigned long start, endc;
void process_feedback(){ int sensorValue = analogRead(analogInPin); float new_mA = sensorValue2mA(sensorValue); dihaluskan_mA = 0,2*mA_baru+0,8*dihaluskan_mA; mengapung V = keluarV; outV = computeOutVoltage(V, new_mA); analogWrite(analogOutPin, convertVtoOutputValue(outV)); debounced_state = debounced_state_compute(state); // Exibir menginformasikan tidak ada CLI endc = (millis()-start)/1000; String tv = "[", ttm = "mA/", tsm = "V, ", ts = "mA] | Estado: ", h = " | Tempo: ", s = ":", leadM = "", leadS = "", plotT = "Target: ", plotmA = "\tSmoothed MA: ", plotMin = "\tMin: ", tempo; tmin panjang yang tidak ditandatangani = endc/60-((endc/60)%1); // Formatação if (endc%60<10) leadS = "0"; jika (tmin=0) ts = ts + "+"; // Parar automaticamente if (tmin>maxmin) stop_device(); String.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 (dempul) Serial.print("\r\e[?25l" + txt); lain Serial.println(txt);
// tunggu 2 milidetik sebelum loop berikutnya
// agar konverter analog-ke-digital menyelesaikan // setelah pembacaan terakhir: delay(5); }
batalkan stop_device(){
keadaan = -10; analogWrite(analogOutPin, 0); clearAndHome(); Serial.println("Seso tDCS interrompida"); Serial.println("------------------------"); Tolong(); }
//CLI BANTUAN
void clearAndHome() { Serial.write(27); Serial.print("[2J"); // limpa a tele Serial.write(27); // ESC Serial.print("[H"); // \r if (!putty) for (int i = 0; i<=30; i++) Serial.println(""); }
batalkan bantuan(){
Serial.println("arduino tDSC, ver "+ver); Serial.println("'?' - ajuda"); Serial.println("'max_time ' - aktualisasi tempo máximo (em minutos)"); Serial.println("'target_mA' - realisasi target (mA)"); Serial.println("'epsilon_mA ' - aktualisasi epsilon_mA (mA)"); Serial.println("'R ' - sebenarnya resistncia do hardware (Ohm)"); Serial.println("'putty ' - muda a formatação de saída pro Putty"); Serial.println("'stop' - para a estimulação"); Serial.println("'restart' - inicia/reinicia a estimulação & o timer"); Serial.println("'lanjutkan' - lanjutkan estimulação"); Serial.print("\n\rEstado:\n\r * max_time: "); Serial.print(maksimum); 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("Ohm"); }
bool parse_param(String &cmdString){
int spacePos = cmdString.indexOf(' '); if(spacePos<=0) mengembalikan false; Perintah string = cmdString.substring(0, spacePos); String fval = cmdString.substring(spasiPos+1); if(command=="putty") if (fval=="true"){ putty = true; kembali benar; }else if (fval=="false"){ putty = false; kembali benar; } float val = fval.toFloat(); if(command=="target_mA"){ if(val100.0){ return false; } target_mA = nilai; clearAndHome(); Tolong(); }else if(command=="epsilon_mA"){ if(val0.3){ return false; } epsilon_mA = val; clearAndHome(); Tolong(); }else if(perintah=="R"){ R = val; clearAndHome(); Tolong(); }else if(command=="max_time"){ maxmin = val; clearAndHome(); Tolong(); }else{ mengembalikan salah; } kembali benar; }
//SETUP DAN LOOP UTAMA
void setup() { Serial.begin(115200); analogReferensi(INTERNAL); //1.1 V Serial.print("Seso iniciada!"); mulai = mili(); } void loop(){ if(state!=-10){ process_feedback(); } if (Serial.available() > 0){ char v = Serial.read(); if (byte(v) == 13){ // Carriage return bool diterima = true; if (commandString == "?" || commandString == "stop"){ stop_device(); }else if (commandString == "restart"){ clearAndHome(); keadaan = -1; outV = maxOutV/5.0; mulai = mili(); diterima = salah; }else if (commandString == "lanjutkan"){ clearAndHome(); keadaan = -1; outV = maxOutV/5.0; diterima = salah; }else{ bool ok = parse_param(commandString); if(!ok){ clearAndHome(); Tolong(); diterima = salah; Serial.println("Perintah desconhecido: '" + commandString + "'"); } } commandString = ""; if (diterima){ clearAndHome(); Tolong(); Serial.println("Oke!"); } }else{ commandString+=v; if(state==-10){ Serial.print(v); } } } }
Langkah 4: Personalisasi Uma UI
Para melhor acompanhamento e segurança, gunakan ferramenta Putty, e defina no código fonte:
dempul = benar
Direkomendasikan de definies:
- Jendela
- 61 Coluna dan 20 Linhas
- Tampilkan bilah gulir desativado
-
Jendela > Penampilan
Fonte: Lucida Console, 28px
Langkah 5: Devidas?
Para abrir a guia de ajuda, angka:
?
epresi [ENTER]
OBS:Caso o Estado seja:
-1 -> Cérebro não identificado (corrente aberta)+0 -> Ajustando voltagem+1 -> Tudo certo, tDCS funcionando
Direkomendasikan:
Regulator Arus Linier LED Daya Sederhana, Direvisi & Diklarifikasi: 3 Langkah
Pengatur Arus Linier LED Daya Sederhana, Revisi & Klarifikasi: Instruksi ini pada dasarnya adalah pengulangan dari rangkaian pengatur arus linier Dan. Versinya sangat bagus, tentu saja, tetapi kurang jelas. Ini adalah upaya saya untuk mengatasinya. Jika Anda mengerti dan dapat membangun versi Dan
Perlindungan Sirkuit Pendek DIY (Arus Lebih): 4 Langkah (dengan Gambar)
Proteksi Sirkuit Pendek (Arus Lebih) DIY: Dalam proyek ini saya akan menunjukkan kepada Anda cara membuat rangkaian sederhana yang dapat mengganggu aliran arus ke beban ketika batas arus yang disesuaikan tercapai. Itu berarti rangkaian dapat bertindak sebagai proteksi arus lebih atau hubung singkat. Mari kita mulai
Tangan Terkendali Sederhana Arduino Sederhana: 5 Langkah
Arduino Simple Low-Cost Controllable Hand: Ada banyak lengan robotik berbasis 3D yang dicetak dan sensor fleksibel di seluruh internet yang luas. Namun, sebagai mahasiswa saya tidak memiliki banyak akses ke hal-hal seperti, CNC, printer 3D, dan alat-alat listrik. Saya punya solusi, kita akan membangun l
Sensor Arus DIY untuk Arduino: 6 Langkah
Sensor Arus DIY untuk Arduino: Halo, semoga Anda baik-baik saja dan dalam tutorial ini saya akan menunjukkan kepada Anda bagaimana saya membuat sensor arus untuk Arduino menggunakan beberapa komponen elektronik yang sangat dasar dan shunt buatan sendiri. Shunt ini dapat dengan mudah menangani arus yang besar, sekitar
LED Daya - Lampu Paling Sederhana Dengan Sirkuit Arus Konstan: 9 Langkah (dengan Gambar)
LED Daya - Lampu Paling Sederhana Dengan Sirkuit Arus Konstan: Berikut adalah rangkaian driver LED yang sangat sederhana dan murah ($ 1). Rangkaian ini adalah "sumber arus konstan", yang berarti bahwa ia menjaga kecerahan LED konstan tidak peduli catu daya apa yang Anda gunakan atau kondisi lingkungan sekitar y