Daftar Isi:

Arduino TDCS Super Sederhana. Stimulator Arus Langsung Transkranial (tDCS) DIY: 5 Langkah
Arduino TDCS Super Sederhana. Stimulator Arus Langsung Transkranial (tDCS) DIY: 5 Langkah

Video: Arduino TDCS Super Sederhana. Stimulator Arus Langsung Transkranial (tDCS) DIY: 5 Langkah

Video: Arduino TDCS Super Sederhana. Stimulator Arus Langsung Transkranial (tDCS) DIY: 5 Langkah
Video: IEEE @ SXSW 2015 — Взлом мозга своими руками: электроцевтика и вы 2024, November
Anonim
Arduino TDCS Super Sederhana. Stimulator Arus Langsung Transkranial (tDCS) DIY
Arduino TDCS Super Sederhana. Stimulator Arus Langsung Transkranial (tDCS) DIY

Para fazer este tDCS você precisará apenas de um arduino, resistor, kapasitor dan alguns cabosKomponen

  1. 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.
  2. Resistor (~470, mas provavelmente entre 300-1000 funciona, você precisará alterar no código fonte)
  3. Kapasitor (220 F). Melayani para estabilizar os pulsos melakukan PWM.
  4. 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

Saiba Mais
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

Sirkuit Monte O Abaixo
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

Personalisasi Uma UI
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: