Isi kandungan:
- Langkah 1: Saiba Mais
- Langkah 2: Monte O Circuito Abaixo
- Langkah 3: Instale O Código No Seu Arduino
- Langkah 4: Uma UI Personalizada
- Langkah 5: Dúvidas?
Video: Arduino TDCS Super Simples. Transkranial Arus Arus Terangsang (tDCS) DIY: 5 Langkah
2024 Pengarang: John Day | [email protected]. Diubah suai terakhir: 2024-01-30 11:09
Para fazer este tDCS você precisará apenas de um arduino, perintang, kapasitor dan alguns cabosComponentes
-
Arduino
- Pino D13 como saída PWM (pode ser alterado).
- Pino A0 como entrada analógica (untuk maklum balas de corente).
- Pino GND apenas para GND.
- Perintang (~ 470 Ω, mas provavelmente entre 300-1000 Ω funciona, você precisará alterar no código fonte)
- Kapasitor (220 μF). Layan para estabilizar os pulsos lakukan PWM.
- Eletrodos de Esponja (Gunakan água salina para molhá-lo).
Como funciona
O Arduino calcula a corente padrão (pode ser alterado) que passará pelo seu cérebro apenas por mudar sebuah voltagem de saída. Você também pode alterar o valor do target_mA pelo bersiri CLI (Konsol).
Langkah 1: Saiba Mais
Você deve ler mais sobre tDCS primeiro. Não é aprovado pelo FDA e pode ser prejudious a sua saúde, Principmente se vocênão sabe nada sobre os efeitos colaterais, tindakan awal dan pendedahan…
Langkah 2: Monte O Circuito Abaixo
Não se esqueça das esponjas com água salina!
Langkah 3: Instale O Código No Seu Arduino
Lembre-se de alterar sebagai configurações e parametros na área de PARAM HARDWARE dan PARAM KONFIGURABEL.
Você também deve alterar o boud rate do Serial para: 115200 para poder ver o resultado.
Para komando pelaksana, pasukan o No Line Ending untuk Carriage Return.
O código fonte + tutorial também podem ser encontrados no repositório:
Código:
const String ver = "2.0m"; // PARAM HARDWARE const int analogInPin = A0; // Entrada do Analógico const int analogOutPin = 13; // Saida D13 padrão float maxOutV = 5.0; // Sebuah 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 [Ohm]
// PARAM YANG SESUAI
bool plotter = palsu; // 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 adalah corente que passará pelo seu cérebro !!! [mA] apungan epsilon_mA = 0.03; // Diferença máxima mengemukakan bukti yang betul dan tepat (Não 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 corente 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; terapung lancar_mA = 0;
String commandString = ""; // untuk CLI
// PEMBANTU MAKLUM BALAS
float computeOutVoltage (float V, float new_mA) {if (abs (new_mA-target_mA) maxOutV) {keadaan = -1; // resistência muito alta -> cérebro não encontrado? pulangkan maxOutV; // pulangan maxOutV / 5.0; // para segurança} keadaan = 0; pulangkan 0.1 * baru_V + 0.9 * V; // kembali baru_V; }
int convertVtoOutputValue (apungan V) {
kekangan pulangan (int (V / maxOutV * 255), 0, 255); }
sensor apunganValue2mA (int sensorValue) {
float sensorVoltage = sensorValue / 1023.0 * maxRefInV; float sensor_mA = sensorVoltage / R * 1000.0; kembali sensor_mA; }
int debounced_state_compute (keadaan int) {
jika (nyatakan 5) pulangkan 0; } kembali 1; }
permulaan panjang yang tidak ditandatangani, endc;
void process_feedback () {int sensorValue = analogRead (analogInPin); float new_mA = sensorValue2mA (sensorValue); smoothed_mA = 0.2 * new_mA + 0.8 * smoothed_mA; terapung V = outV; outV = computeOutVoltage (V, new_mA); analogWrite (analogOutPin, convertVtoOutputValue (outV)); debounced_state = debounced_state_compute (keadaan); // Exibir informações no CLI endc = (milis () - mula) / 1000; Rentetan 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 automatik sekiranya (tmin> maxmin) stop_device (); Rentetan txt; jika (plotter) txt = plotT + target_mA + plotMin + "0" + plotmA + smoothed_mA; lain txt = tv + V + tsm + lancar_mA + ttm + target_mA + ts + debounced_state + h + tempo; jika (putty) Serial.print ("\ r / e [? 25l" + txt); lain Serial.println (txt);
// tunggu 2 milisaat sebelum gelung seterusnya
// agar penukar analog-ke-digital dapat diselesaikan // selepas bacaan terakhir: kelewatan (5); }
batal stop_device () {
nyatakan = -10; analogWrite (analogOutPin, 0); clearAndHome (); Serial.println ("Sessão tDCS interrompida"); Serial.println ("------------------------"); pertolongan (); }
// PEMBANTU CLI
kosongkanAndHome () {Serial.write (27); Cetakan bersiri ("[2J"); // limpa a tela Serial.write (27); // ESC Serial.print ("[H"); // / r jika (! putty) untuk (int i = 0; i <= 30; i ++) Serial.println (""); }
membatalkan pertolongan () {
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 (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 ("'sambung' - Continua a estimulação"); Serial.print ("\ n / rEstado: / n / r * max_time:"); Cetakan bersiri (maks.); 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:"); Cetakan bersiri (R); Serial.println ("Ohms"); }
bool parse_param (Rentetan & cmdString) {
int spacePos = cmdString.indexOf (''); jika (spacePos <= 0) kembali palsu; Perintah rentetan = cmdString.substring (0, spacePos); String fval = cmdString.substring (spacePos + 1); if (command == "putty") if (fval == "true") {putty = benar; kembali benar; } lain jika (fval == "false") {putty = false; kembali benar; } float val = fval.toFloat (); if (perintah == "target_mA") {if (val100.0) {return false; } target_mA = val; clearAndHome (); pertolongan (); } lain jika (perintah == "epsilon_mA") {if (val0.3) {return false; } epsilon_mA = val; clearAndHome (); pertolongan (); } lain jika (perintah == "R") {R = val; clearAndHome (); pertolongan (); } lain jika (perintah == "max_time") {maxmin = val; clearAndHome (); pertolongan (); } lain {kembali palsu; } kembali benar; }
// PENYEDIAAN DAN LOOP UTAMA
persediaan tidak sah () {Serial.begin (115200); analogReference (DALAMAN); //1.1 V Serial.print ("Sessão iniciada!"); permulaan = milis (); } gelung void () {if (state! = - 10) {process_feedback (); } if (Serial.available ()> 0) {char v = Serial.read (); if (byte (v) == 13) {// Bool pengembalian kereta diterima = benar; jika (commandString == "?" || commandString == "stop") {stop_device (); } lain jika (commandString == "restart") {clearAndHome (); nyatakan = -1; outV = maxOutV / 5.0; permulaan = milis (); diterima = palsu; } lain jika (commandString == "teruskan") {clearAndHome (); nyatakan = -1; outV = maxOutV / 5.0; diterima = palsu; } lain {bool ok = parse_param (commandString); jika (! ok) {clearAndHome (); pertolongan (); diterima = palsu; Serial.println ("Comando desconhecido: '" + commandString + "'"); }} commandString = ""; jika (diterima) {clearAndHome (); pertolongan (); Serial.println ("Ok!"); }} lain {commandString + = v; jika (nyatakan == - 10) {Serial.print (v); }}}}
Langkah 4: Uma UI Personalizada
Para melhor acompanhamento e segurança, menggunakan ferramenta PuTTY, e defina no código fonte:
dempul = benar
Recomendações de definições:
-
Tingkap
- 61 Colunas e 20 Linhas
- Paparkan scrollbar desativado
- Tetingkap> Rupa
Fonte: Lucida Console, 28 piksel
Langkah 5: Dúvidas?
Para abrir a guia de ajuda, digit:
?
e pressione [ENTER]
OBS: Caso o Estado seja:
-1 -> Cérebro não identificado (corrente aberta) +0 -> Ajustando voltagem + 1 -> Tudo certo, tDCS funcionando
Disyorkan:
Pengatur Arus Linear Arus LED Daya Mudah, Disemak & Dijelaskan: 3 Langkah
Pengatur Arus Linear Arus LED Daya Sederhana, Disemak & Dijelaskan: Instruktif ini pada asasnya merupakan pengulangan litar pengatur arus linier Dan. Versinya sangat bagus, tentu saja, tetapi tidak mempunyai sesuatu yang jelas. Ini adalah percubaan saya untuk mengatasinya. Sekiranya anda faham dan boleh membina versi Dan
Perbezaan Antara (Arus Alternatif & Arus Langsung): 13 Langkah
Perbezaan Antara (Arus Alternatif & Arus Langsung): Semua orang tahu bahawa elektrik kebanyakannya Dc, tetapi bagaimana dengan jenis elektrik yang lain? Adakah anda kenal Ac? Apa maksud AC? Adakah ia boleh digunakan kemudian DC? Dalam kajian ini kita akan mengetahui perbezaan antara jenis elektrik, sumber, aplikasi
Pemacu Diod Laser DIY -- Sumber Arus Tetap: 6 Langkah (dengan Gambar)
Pemacu Diod Laser DIY || Sumber Arus Tetap: Dalam projek ini saya akan menunjukkan kepada anda bagaimana saya mengeluarkan dioda laser dari DVD Burner yang seharusnya mempunyai kekuatan untuk menyalakan pertandingan. Untuk menghidupkan diod dengan betul, saya juga akan menunjukkan bagaimana saya membina sumber arus tetap yang memberikan
Arduino Wattmeter - Penggunaan Voltan, Arus dan Kuasa: 3 Langkah
Arduino Wattmeter - Penggunaan Voltan, Arus dan Daya: Peranti boleh digunakan untuk mengukur daya yang habis. Litar ini juga boleh bertindak sebagai Voltmeter dan Ammeter untuk mengukur voltan dan arus
Pemacu Motor Arus Tinggi DIY (h-bridge): 5 Langkah
Pemacu Motor Arus Tinggi DIY (h-bridge): Projek ini adalah untuk menaik taraf motor dan elektronik dalam basikal quad kanak-kanak Power Wheels ini. Dikagumi dengan prestasi mini-quad 12V ini. kami merancang untuk menaik taraf ke sistem 24v dengan 2 motor brax traxxis 775 baru setelah meneliti komersial