Mục lục:
2025 Tác giả: John Day | [email protected]. Sửa đổi lần cuối: 2025-01-13 06:58
Para fazer este tDCS você Preisará apenas de um arduino, điện trở, tụ điện e alguns cabos
-
Arduino
- Pino D13 como saída PWM (pode ser alterado).
- Pino A0 como entrada analógica (para feedback de Corrente).
- Vượn cáo Pino GND para GND.
- Điện trở (~ 470 Ω, mas provavelmente entre 300-1000 Ω funciona, você Preisará alterar không có fonte)
- Tụ điện (220 μF). Cung cấp para settingilizar os pulsos do PWM.
- Eletrodos de Esponja (Sử dụng á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 atagem de saída. Você também pode alterar o valor do target_mA pelo serial CLI (Console).
Bước 1: Saiba Mais
Você deve ler mais sobre tDCS primeiro. Não é aprovado pelo FDA e pode ser trước tư pháp a sua saúde, majormente se você não sabe nada sobre os efeitos colaterais, đề phòng e dentre outros…
Bước 2: Monte O Circuito Abaixo
Não se esqueça das esponjas com água salina!
Bước 3: Instale O Código No Seu Arduino
Lembre-se de alterar as configurações e parametros na área de HARDWARE PARAMS e CÁC THÔNG SỐ CÓ THỂ CẤU HÌNH.
Você também deve alterar o boud rate do Serial para: 115200 para poder ver o resultado.
Para executive comandos, troque o No Line Ending para Carriage Return.
O código fonte + hướng dẫn também podem ser encontrados no repositório:
Código:
const String ver = "2.0m"; // THÔNG SỐ PHẦN CỨNG const int analogInPin = A0; // Entrada do Analógico const int analogOutPin = 13; // Saida D13 padrão float maxOutV = 5.0; // Atagem de saída PWM padrão do Arduino [V] float maxRefInV = 1.1; // Referencia àtagem analógica [V] float R = 470.0; // Resistencia da Corrente [Ohm]
// CÁC THÔNG SỐ CÓ THỂ CẤU HÌNH
bool plotter = false; // Định nghĩa: true, caso esteja usando o Trình vẽ nối tiếp bool putty = false; // Định nghĩa: 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] float epsilon_mA = 0,03; // Diferença máxima yêu cầu một sự điều chỉnh thực sự ở target_mA (Não altere caso não saiba o que está fazendo!)
// INIT TOÀN CẦU
int state = 1; / * -1 - Cérebro não Idificado 0 - Voltagem sendo alterada para Defr a Corrente padrão 1 - Tudo certo. Você esta na Corrente Defda -10 - Voltagem desligada * / float outV = maxOutV; // Voltagem int debounced_state = 0; int zeros_len = 0; float smoothed_mA = 0;
Chuỗi lệnhString = ""; // cho CLI
// PHẢN HỒI TRỢ GIÚP
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? trả về maxOutV; // trả về maxOutV / 5.0; // para segurança} bang = 0; trả về 0,1 * new_V + 0,9 * V; // trả về new_V; }
int convertVtoOutputValue (float V) {
return ràng buộc (int (V / maxOutV * 255), 0, 255); }
float sensorValue2mA (int sensorValue) {
float sensorVoltage = sensorValue / 1023.0 * maxRefInV; float sensor_mA = sensorVoltage / R * 1000.0; cảm_phục hồi_mA; }
int debounced_state_compute (int state) {
if (trạng thái 5) trả về 0; } trả về 1; }
đầu dài không dấu, endc;
void process_feedback () {int sensorValue = analogRead (analogInPin); float new_mA = sensorValue2mA (sensorValue); làm mịn_mA = 0,2 * new_mA + 0,8 * làm mịn_mA; float V = outV; outV = computeOutVoltage (V, new_mA); analogWrite (analogOutPin, convertVtoOutputValue (outV)); debounced_state = debounced_state_compute (trạng thái); // Exibir Informações no CLI endc = (millis () - start) / 1000; Chuỗi tv = "[", ttm = "mA /", tsm = "V,", ts = "mA] | Estado:", h = "| Tempo:", s = ":", leadM = "", leadS = "", plotT = "Mục tiêu:", plotmA = "\ tSmoothed MA:", plotMin = "\ tMin:", tempo; không dấu dài tmin = endc / 60 - ((endc / 60)% 1); // Formatação if (endc% 60 <10) leadS = "0"; if (tmin = 0) ts = ts + "+"; // Parar automaticamente if (tmin> maxmin) stop_device (); Chuỗi txt; if (máy vẽ) 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);
// đợi 2 mili giây trước vòng lặp tiếp theo
// để bộ chuyển đổi tương tự sang kỹ thuật số giải quyết // sau lần đọc cuối cùng: delay (5); }
void stop_device () {
trạng thái = -10; analogWrite (analogOutPin, 0); clearAndHome (); Serial.println ("Sessão tDCS interrompida"); Serial.println ("------------------------"); Cứu giúp(); }
// NGƯỜI TRỢ GIÚP CỦA CLI
void clearAndHome () {Serial.write (27); Serial.print ("[2J"); // limpa a tela Serial.write (27); // ESC Serial.print ("[H"); // / r if (! putty) for (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 Phần cứng (Ohm)"); Serial.println ("'putty' - muda a formatação de saída pro PuTTY"); Serial.println ("'dừng' - para a ước tính"); Serial.println ("'khởi động lại' - inicia / reinicia a ước tính & o bộ đếm thời gian"); Serial.println ("'tiếp tục' - liên tục một ước tính"); 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 ("Ohms"); }
bool parse_param (Chuỗi & cmdString) {
int spacePos = cmdString.indexOf (''); if (spacePos <= 0) trả về false; Lệnh chuỗi = cmdString.substring (0, spacePos); String fval = cmdString.substring (spacePos + 1); if (lệnh == "putty") if (fval == "true") {putty = true; trả về true; } else if (fval == "false") {putty = false; trả về true; } float val = fval.toFloat (); if (lệnh == "target_mA") {if (val100.0) {return false; } target_mA = val; clearAndHome (); Cứu giúp(); } else if (lệnh == "epsilon_mA") {if (val0.3) {return false; } epsilon_mA = val; clearAndHome (); Cứu giúp(); } else if (lệnh == "R") {R = val; clearAndHome (); Cứu giúp(); } else if (lệnh == "max_time") {maxmin = val; clearAndHome (); Cứu giúp(); } else {return false; } trả về true; }
// THIẾT LẬP VÀ ĐĂNG NHẬP CHÍNH
void setup () {Serial.begin (115200); analogReference (NỘI BỘ); //1.1 V Serial.print ("Sessão iniciada!"); start = millis (); } void loop () {if (state! = - 10) {process_feedback (); } if (Serial.available ()> 0) {char v = Serial.read (); if (byte (v) == 13) {// Vận chuyển trả về bool accept = true; if (commandString == "?" || commandString == "stop") {stop_device (); } else if (commandString == "khởi động lại") {clearAndHome (); trạng thái = -1; outV = maxOutV / 5.0; start = millis (); chấp nhận = sai; } else if (commandString == "continue") {clearAndHome (); trạng thái = -1; outV = maxOutV / 5.0; chấp nhận = sai; } else {bool ok = parse_param (commandString); if (! ok) {clearAndHome (); Cứu giúp(); chấp nhận = sai; Serial.println ("Comando desconhecido: '" + commandString + "'"); }} commandString = ""; if (được chấp nhận) {clearAndHome (); Cứu giúp(); Serial.println ("Được!"); }} else {commandString + = v; if (state == - 10) {Serial.print (v); }}}}
Bước 4: Uma UI Personalizada
Para melhor acompanhamento e segurança, sử dụng một PuTTY ferramenta, e định nghĩa không có fonte código:
putty = true
Recomendações de Defções:
-
Cửa sổ
- 61 Colunas e 20 Linhas
- Hiển thị thanh cuộn desativado
-
Window> Appearance
Fonte: Bảng điều khiển Lucida, 28px
Bước 5: Dúvidas?
Para abrir a guia de ajuda, digite:
?
e pressione [ENTER]
OBS: Caso o Estado seja:
-1 -> Cérebro não Idificado (Corrente aberta) +0 -> Ajustando điện ápm + 1 -> Tudo certo, tDCS funcionando