תוכן עניינים:
- שלב 1: סייבה מייס
- שלב 2: Monte O Circuito Abaixo
- שלב 3: Instale O Código No Seu Arduino
- שלב 4: Uiz UI Personalizada
- שלב 5: Dúvidas?
וִידֵאוֹ: Arduino TDCS Super Simples. גירוי זרם ישיר גולגולתי (tDCS) DIY: 5 שלבים
2024 מְחַבֵּר: John Day | [email protected]. שונה לאחרונה: 2024-01-30 09:15
Para fazer este tDCS você precisará apenas de um arduino, resist, capacitor e alguns cabos Componentes
-
ארדואינו
- פינו D13 כמו PWM (pode ser alterado).
- Pino A0 como entrada analógica (עבור משוב מהקורנט).
- פינו GND apenas para GND.
- נגד (~ 470 Ω, mas provavelmente entre 300-1000 Ω funciona, você precisará alterar no código fonte)
- קבלים (220 μF). מגישים לאפשרויות הפעלה של PWM.
- 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
על מנת להבחין ולהשתמש, השתמשו ב- 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
מוּמלָץ:
ההבדל בין (זרם אלטרנטיבי וזרם ישיר): 13 שלבים
ההבדל בין (זרם אלטרנטיבי וזרם ישיר): כולם יודעים שחשמל הוא בעיקר DC, אבל מה דעתך על סוג אחר של חשמל? מכירים את Ac? למה מייצג AC? האם זה שמיש אז DC? במחקר זה נדע את ההבדל בין סוגי החשמל, מקורות, יישומים
עומס זרם קבוע DIY: 4 שלבים (עם תמונות)
עומס זרם קבוע DIY: בפרויקט קטן זה אראה לך כיצד לבצע עומס זרם קבוע פשוט מתכוונן. גאדג'ט כזה שימושי אם אתה רוצה למדוד את הקיבולת של סוללות לי-יון סיניות. או שתוכל לבדוק עד כמה ספק הכוח שלך יציב עם עומס מסוים
חיישן זרם DIY עבור Arduino: 6 שלבים
חיישן זרם DIY עבור Arduino: שלום לך, מקווה שאתה עושה טוב ובמדריך זה אראה לך כיצד הכנתי חיישן זרם עבור Arduino באמצעות כמה רכיבים אלקטרוניים בסיסיים ביותר ושאנט תוצרת בית. Shunt זה יכול להתמודד בקלות בעוצמה גדולה של זרם, התעוררות
זרם נתוני ניטור זרם AC: 9 שלבים (עם תמונות)
לוגר נתוני ניטור זרם AC: שלום לכולם, ברוכים הבאים להוראה הראשונה שלי! ביום אני מהנדס מבחן בחברה המספקת ציוד לחימום תעשייתי, בלילה אני חובב טכנולוגי מושבע ועושה דברים בעבודה. חלק מעבודתי כולל בדיקת הביצועים של תנורי חימום
עריסת טלפון סלולרי ישיר: 10 שלבים
עריסת טלפון סלולרי קלט ישיר: אני יודע. העולם צריך עוד מחזיק טלפון סלולרי בערך כמו שאני צריך חור בראש. באופן מזעזע, לא הצלחתי למצוא מחזיק טלפון סלולרי למשאית שלי המתאים לצרכים שלי. לא חשבתי שהצרכים שלי כל כך אקזוטיים, אבל לא הצלחתי למצוא