תוכן עניינים:

Arduino TDCS Super Simples. גירוי זרם ישיר גולגולתי (tDCS) DIY: 5 שלבים
Arduino TDCS Super Simples. גירוי זרם ישיר גולגולתי (tDCS) DIY: 5 שלבים

וִידֵאוֹ: Arduino TDCS Super Simples. גירוי זרם ישיר גולגולתי (tDCS) DIY: 5 שלבים

וִידֵאוֹ: Arduino TDCS Super Simples. גירוי זרם ישיר גולגולתי (tDCS) DIY: 5 שלבים
וִידֵאוֹ: working of dc capacitor after rectifier #shorts #capacitor 2024, נוֹבֶמבֶּר
Anonim
Arduino TDCS Super Simples. ממריץ זרם ישיר (tDCS) עשה זאת בעצמך
Arduino TDCS Super Simples. ממריץ זרם ישיר (tDCS) עשה זאת בעצמך

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

  1. ארדואינו

    • פינו D13 כמו PWM (pode ser alterado).
    • Pino A0 como entrada analógica (עבור משוב מהקורנט).
    • פינו GND apenas para GND.
  2. נגד (~ 470 Ω, mas provavelmente entre 300-1000 Ω funciona, você precisará alterar no código fonte)
  3. קבלים (220 μF). מגישים לאפשרויות הפעלה של PWM.
  4. Eletrodos de Esponja (השתמש á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 a voltagem de saída. Você também pode alterar o valor do target_mA pelo CLI serial (Console).

שלב 1: סייבה מייס

סייבה מייס
סייבה מייס

Você deve ler mais sobre tDCS primeiro. Não é aprovado pelo FDA e pode ser prejudicial a sua saud, principalmente se você não sabe nada sobre os efeitos colaterais, precauções and dentre outros …

שלב 2: Monte O Circuito Abaixo

מונטה או סירקיטו אבייקסו
מונטה או סירקיטו אבייקסו

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

שלב 3: Instale O Código No Seu Arduino

Lembre-se de alterar כמגדרות ופרמטרים של חלונות HARDWARE ו- PARAMS CONFIGURABLE.

אפשר לשנות את התעריף או את שיעור הבודדים לפי סדרה: 115200 פודר לאתר.

Para executor comandos, troque o No Line Ending for Carriage Return.

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

קודיגו:

const String ver = "2.0m"; // HARDWARE PARAMS const int analogInPin = A0; // Entrada do Analógico const int analogOutPin = 13; // Saida D13 padrão float maxOutV = 5.0; // A 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 [אוהם]

// פארמים ניתנים להגדרה

בורר פלוטר = שקר; // Defina: true, caso esteja usando o plotter boutt putty = false; // Defina: true, caso esteja usando o PuTTT (pode ser alterado no CLI) int maxmin = 30; // Tempo (em minutos) nødvendário para desligar [Min] float target_mA = 2.73; // Essa é a corrente que passará pelo seu cérebro !!! [mA] epsilon_mA float = 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 GLOBALS

int int = 1; /* -1 - זיהוי נגינה 0 - ניתן לשלוח שינויים בשורה אחת לתקן 1 - Tudo certo. Você esta na corrente definida -10 - Voltagem desligada */ float outV = maxOutV; // Voltagem int debounced_state = 0; int zeros_len = 0; float smoothed_mA = 0;

String commandString = ""; // עבור CLI

// עוזרי פידבקים

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? החזר maxOutV; // החזר maxOutV/5.0; // para segurança} state = 0; החזר 0.1*new_V+0.9*V; // החזר new_V; }

int convertVtoOutputValue (float V) {

אילוץ החזרה (int (V/maxOutV*255), 0, 255); }

sensor floatValue2mA (int sensorValue) {

float sensorVoltage = sensorValue/1023.0*maxRefInV; float sensor_mA = sensorVoltage/R*1000.0; החזר sensor_mA; }

int debounced_state_compute (int int) {

אם (מדינה 5) החזר 0; } החזר 1; }

התחלה ארוכה ללא סימן, סיום;

void process_feedback () {int sensorValue = analogRead (analogInPin); float 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 informações no CLI endc = (millis ()-start)/1000; מחרוזת tv = "[", 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 + " +"; // Parar automaticamente if (tmin> maxmin) stop_device (); Txt מחרוזת; אם (plotter) txt = plotT + target_mA + plotMin + "0" + plotmA + smoothed_mA; אחרת txt = tv + V + tsm + smoothed_mA + ttm + target_mA + ts + debounced_state + h + tempo; אם (מרק) Serial.print ("\ r / e [? 25l" + txt); אחרת Serial.println (txt);

// המתן 2 אלפיות השנייה לפני הלולאה הבאה

// לממיר האנלוגי לדיגיטלי להתיישב // לאחר הקריאה האחרונה: עיכוב (5); }

void stop_device () {

מצב = -10; analogWrite (analogOutPin, 0); clearAndHome (); Serial.println ("Sessão tDCS interrompida"); Serial.println ("------------------------"); עֶזרָה(); }

// עוזרי CLI

void clearAndHome () {Serial.write (27); Serial.print ("[2J"); // limpa a tela Serial.write (27); // ESC Serial.print ("[H"); // / r if (! מרק) עבור (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' - אטואליזה o יעד (mA)"); Serial.println ("'epsilon_mA' - atualiza o epsilon_mA (mA)"); Serial.println ("'R' - atualiza a resistência do hardware (Ohm)"); Serial.println ("'מרק' - 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 ("'המשך' - continua a estimulação"); Serial.print ("\ n / rEstado: / n / r * max_time:"); Serial.print (maxmin); Serial.print ("דקות / 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 ("אוהם"); }

bool parse_param (String & cmdString) {

int spacePos = cmdString.indexOf (''); אם (spacePos <= 0) החזר false; פקודת מחרוזת = cmdString.substring (0, spacePos); מחרוזת fval = cmdString.substring (spacePos+1); if (command == "מרק") if (fval == "true") {מרק = נכון; להחזיר נכון; } אחרת אם (fval == "false") {putty = false; להחזיר נכון; } float val = fval.toFloat (); if (command == "target_mA") {if (val100.0) {return false; } target_mA = val; clearAndHome (); עֶזרָה(); } אחרת אם (command == "epsilon_mA") {if (val0.3) {return false; } epsilon_mA = val; clearAndHome (); עֶזרָה(); } אחרת אם (command == "R") {R = val; clearAndHome (); עֶזרָה(); } אחרת אם (command == "max_time") {maxmin = val; clearAndHome (); עֶזרָה(); } else {return false; } להחזיר נכון; }

// הגדרה ולולאה עיקרית

הגדרת חלל () {Serial.begin (115200); analogReference (INTERNAL); //1.1 V Serial.print ("Sessão iniciada!"); התחל = מילי (); } לולאת חלל () {אם (מצב! =-10) {process_feedback (); } if (Serial.available ()> 0) {char v = Serial.read (); אם (בייט (v) == 13) {// החזרת עגלה בול התקבל = נכון; if (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 ("בסדר!"); }} else {commandString+= v; if (state ==-10) {Serial.print (v); }}}}

שלב 4: Uiz UI Personalizada

UI Personalizada
UI Personalizada

על מנת להבחין ולהשתמש, השתמשו ב- PuTTY פרמנטה, והמשמעות היא:

מרק = נכון

המלצות על הגדרות:

  • חַלוֹן

    • 61 Colunas e 20 Linhas
    • הצג סרגל גלילה desativado
  • חלון> מראה

    מקור: קונסולת Lucida, 28 פיקסלים

שלב 5: Dúvidas?

Para abrir a guia de ajuda, digite:

?

לחץ על [ENTER]

OBS: Caso o Estado seja:

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

מוּמלָץ: