ዝርዝር ሁኔታ:

አርዱዲኖ ቲዲሲኤስ ሱፐር ሲምፕልስ። ተሻጋሪ ቀጥተኛ የአሁኑ አነቃቂ (tDCS) DIY: 5 ደረጃዎች
አርዱዲኖ ቲዲሲኤስ ሱፐር ሲምፕልስ። ተሻጋሪ ቀጥተኛ የአሁኑ አነቃቂ (tDCS) DIY: 5 ደረጃዎች

ቪዲዮ: አርዱዲኖ ቲዲሲኤስ ሱፐር ሲምፕልስ። ተሻጋሪ ቀጥተኛ የአሁኑ አነቃቂ (tDCS) DIY: 5 ደረጃዎች

ቪዲዮ: አርዱዲኖ ቲዲሲኤስ ሱፐር ሲምፕልስ። ተሻጋሪ ቀጥተኛ የአሁኑ አነቃቂ (tDCS) DIY: 5 ደረጃዎች
ቪዲዮ: የአርዱብሎክ መተግበሪያን በመጫን ላይ 2024, ሀምሌ
Anonim
አርዱዲኖ ቲዲሲኤስ ሱፐር ሲምፕልስ። ተሻጋሪ ቀጥተኛ የአሁኑ አነቃቂ (tDCS) DIY
አርዱዲኖ ቲዲሲኤስ ሱፐር ሲምፕልስ። ተሻጋሪ ቀጥተኛ የአሁኑ አነቃቂ (tDCS) DIY

Para fazer este tDCS você precisará apenas de um arduino, resistor, capacitor e alguns cabos

  1. አርዱinoኖ

    • ፒኖ ዲ 13 como saída PWM (pode ser alterado)።
    • Pino A0 como entrada analógica (para feedback de corrente)።
    • ፒኖ GND apenas para GND።
  2. ተከላካይ (~ 470 Ω ፣ mas provavelmente entre 300-1000 Ω funciona ፣ você precisará alterar no código fonte)
  3. አቅም (220 μF)። PWM ን ለ para estabilizar os pulsos ያድርጉ።
  4. Eletrodos de Esponja (አጉዋ ሳሊና ለሞልሃ-ሎ ይጠቀሙ)።

Como funciona

ኦ አርዱinoኖ አንድ ኮርሬንቴ ፓድራኦ (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 - ሳይባ ማይስ

ሳይባ ማይስ
ሳይባ ማይስ

Você deve ler mais sobre tDCS primeiro. የኤፍዲኤ እና የኤፍዲኤ አድሎአዊ ፍርድ ቤት በአስተያየት ሰጭው ፣ በዋናነት በስራ ላይ የዋለው ሳኦ ናዳ ሶሬ ኦስ ኤፌቲቶስ ኮላራይዝስ ፣ ቅድመ ጥንቃቄዎች…

ደረጃ 2: - በሞንቴ ኦ ሰርኩቶ Abaixo

ሞንቴ ኦ Circuito Abaixo
ሞንቴ ኦ Circuito Abaixo

Não se esqueça das esponjas com água salina!

ደረጃ 3: Instale O Código No Seu Arduino

ሌምበር-ሴ ደ አልተራር እንደ parametros እና área de HARDWARE PARAMS እና CONFIGURABLE PARAMS።

Você também deve alterar o boud rate do Serial para: 115200 para poder ver o resultado.

Para executar comandos, troque o የኋላ መጓጓዣን የሚያቆም መስመር የለም።

ኦ código fonte + tutorial também podem ser encontrados no repositório:

ኮዲጎ ፦

const String ver = "2.0m"; // የሃርድዌር ፓርሞች const int analogInPin = A0; // Entrada do Analógico const int analogOutPin = 13; // ሳይዳ D13 padrão ተንሳፈፈ maxOutV = 5.0; // አንድ 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 [ኦም]

// ሊስተካከሉ የሚችሉ ፓራማዎች

bool plotter = ሐሰት; // ዲፊና: እውነት ፣ caso esteja usando o ሴራ ሴረተር bool putty = ሐሰት; // ዲፊና: እውነት ፣ 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] ተንሳፋፊ epsilon_mA = 0.03; // Diferença máxima entre a corrente real e o target_mA (Não altere caso não saiba o que está fazendo!)

// INIT ግሎባልስ

int state = 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; // Voltagem int debounced_state = 0; int zeros_len = 0; ተንሳፋፊ smoothed_mA = 0;

ሕብረቁምፊ ትዕዛዝ String = ""; // ለ CLI

// ግብረመልስ ረዳቶች

float computeOutVoltage (float V ፣ float new_mA) {ከሆነ (abs (new_mA -target_mA) maxOutV) {state = -1; // resistência muito alta -> cérebro não encontrado? maxOutV ን መመለስ; // መመለስ maxOutV/5.0; // para segurança} ግዛት = 0; መመለስ 0.1*new_V+0.9*V; // አዲስ_ቪ መመለስ; }

int convertVtoOutputValue (ተንሳፋፊ ቪ) {

የመመለስ እገዳ (int (V/maxOutV*255) ፣ 0 ፣ 255); }

ተንሳፋፊ ዳሳሽValue2mA (int sensorValue) {

ተንሳፋፊ ዳሳሽ Voltage = sensorValue/1023.0*maxRefInV; ተንሳፋፊ sensor_mA = sensorVoltage/R*1000.0; ተመለስ sensor_mA; }

int debounced_state_compute (int state) {

(ግዛት 5) ከሆነ 0; } መመለስ 1; }

ያልተፈረመ ረጅም ጅምር ፣ መጨረሻ;

ባዶ ሂደት_መልሰህ () {int sensorValue = analogRead (analogInPin); ተንሳፋፊ new_mA = sensorValue2mA (sensorValue); smoothed_mA = 0.2*new_mA+0.8*smoothed_mA; ተንሳፋፊ V = outV; outV = computeOutVoltage (V, new_mA); analogWrite (analogOutPin ፣ convertVtoOutputValue (outV)); debounced_state = debounced_state_compute (ግዛት); // Exibir መረጃ የለም CLI endc = (ሚሊስ ()-ጅምር)/1000; ሕብረቁምፊ ቲቪ = "[", ttm = "mA/", tsm = "V,", ts = "mA] | Estado:", h = "| Tempo:", s = ":", leadM = "", leadS = "", plotT = "Target:", plotmA = "\ tSmoothed MA:", plotMin = "\ tMin:", ቴምፕ; ያልተፈረመ ረጅም tmin = endc/60-((endc/60)%1); // Formatação if (endc%60 <10) leadS = "0"; ከሆነ (tmin = 0) ts = ts + " +"; // ፓራር አውቶማቲክ (tmin> maxmin) stop_device () ከሆነ () ሕብረቁምፊ txt; (plotter) txt = plotT + target_mA + plotMin + "0" + plotmA + smohhed_mA; ሌላ txt = tv + V + tsm + smoothed_mA + ttm + target_mA + ts + debounced_state + h + tempo; ከሆነ (putty) Serial.print ("\ r / e [? 25l" + txt); ሌላ Serial.println (txt);

// ከሚቀጥለው ዙር በፊት 2 ሚሊሰከንዶች ይጠብቁ

// ለአናሎግ-ወደ-ዲጂታል መቀየሪያ ለመደርደር // ካለፈው ንባብ በኋላ-መዘግየት (5); }

ባዶነት stop_device () {

ግዛት = -10; analogWrite (analogOutPin ፣ 0); clearAndHome (); Serial.println ("Sessão tDCS interrompida"); Serial.println ("------------------------"); እገዛ (); }

// CLI ረዳቶች

ባዶነት ግልጽAndHome () {Serial.write (27); Serial.print ("[2J"); // limpa a tela Serial.write (27); // ESC Serial.print ("[H"); // / r ከሆነ (! putty) ለ (int i = 0; i <= 30; i ++) Serial.println (""); }

ባዶ እገዛ () {

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 ("'ዳግም አስጀምር' - inicia/reinicia a estimulação & o timer"); Serial.println ("'ቀጥል' - ቀጣይነት ያለው ግምት"); 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 (ሕብረቁምፊ እና cmdString) {

int spacePos = cmdString.indexOf (''); (spacePos <= 0) ሐሰት ከተመለሰ; ሕብረቁምፊ ትዕዛዝ = cmdString.substring (0 ፣ spacePos); ሕብረቁምፊ fval = cmdString.substring (spacePos+1); ከሆነ (ትዕዛዝ == "putty") ከሆነ (fval == "እውነተኛ") {putty = true; እውነት ተመለስ; } ሌላ ከሆነ (fval == "ሐሰተኛ") {putty = false; እውነት ተመለስ; } ተንሳፋፊ ቫል = fval.toFloat (); ከሆነ (ትዕዛዝ == "target_mA") {ከሆነ (val100.0) {ሐሰት መመለስ ፤ } target_mA = ቫል; clearAndHome (); እገዛ (); } ሌላ ከሆነ (ትዕዛዝ == "epsilon_mA") {ከሆነ (val0.3) {ሐሰት መመለስ ፤ } epsilon_mA = ቫል; clearAndHome (); እገዛ (); } ሌላ ከሆነ (ትዕዛዝ == "R") {R = val; clearAndHome (); እገዛ (); } ሌላ ከሆነ (ትዕዛዝ == "max_time") {maxmin = val; clearAndHome (); እገዛ (); } ሌላ {ሐሰት መመለስ ፤ } እውነት መመለስ; }

// ማዋቀር እና ዋና መዝለል

ባዶነት ማዋቀር () {Serial.begin (115200); analogReference (ውስጣዊ); //1.1 V Serial.print ("Sessão iniciada!"); ጅምር = ሚሊስ (); } ባዶነት loop () {ከሆነ (ሁኔታ! =-10) {process_feedback (); } ከሆነ (Serial.available ()> 0) {char v = Serial.read (); ከሆነ (ባይት (v) == 13) {// የትራንስፖርት መመለሻ ገንዳ ተቀባይነት = እውነተኛ; ከሆነ (commandString == "?" || commandString == "stop") {stop_device (); } ሌላ ከሆነ (commandString == "ዳግም አስጀምር") {clearAndHome (); ግዛት = -1; outV = maxOutV/5.0; ጅምር = ሚሊስ (); ተቀባይነት ያለው = ሐሰት; } ሌላ ከሆነ (commandString == "ቀጥል") {clearAndHome (); ግዛት = -1; outV = maxOutV/5.0; ተቀባይነት ያለው = ሐሰት; } ሌላ {bool ok = parse_param (commandString); ከሆነ (! እሺ) {clearAndHome (); እገዛ (); ተቀባይነት ያለው = ሐሰት; Serial.println ("Comando desconhecido: '" + commandString + "'"); }} commandString = ""; (ተቀባይነት ካገኘ) {clearAndHome (); እገዛ (); Serial.println ("እሺ!"); }} ሌላ {commandString+= v; ከሆነ (ግዛት ==-10) {Serial.print (v); }}}}

ደረጃ 4 - ኡማ በይነገጽ ግለሰባዊ

ኡማ ዩአይ Personalizada
ኡማ ዩአይ Personalizada

ፓራ ሜልሆር acompanhamento e segurança ፣ አንድ ferramenta PuTTY ን ይጠቀሙ ፣ እና ምንም ፊደል የለም -

putty = እውነት

የትርጓሜ መግለጫዎች-

  • መስኮት

    • 61 ኮሎናስ ኢ 20 ሊንሃስ
    • የማሸብለያ አሞሌ desativado
  • መስኮት> መልክ

    ፎንቴ ሉሲዳ ኮንሶል ፣ 28 ፒክስል

ደረጃ 5 - ዱቪዳስ?

ፓራ አብሪር ጉያ ደ አጁዳ ፣ ዲጂት

?

e pressione [ENTER]

OBS: Caso o Estado seja:

-1 -> Cérebro não identificado (corrente aberta) +0 -> Ajustando voltagem+1 -> Tudo certo, tDCS funcionando

የሚመከር: