विषयसूची:

Arduino TDCS सुपर सिंपल। ट्रांसक्रानियल डायरेक्ट करंट स्टिमुलेटर (tDCS) DIY: 5 स्टेप्स
Arduino TDCS सुपर सिंपल। ट्रांसक्रानियल डायरेक्ट करंट स्टिमुलेटर (tDCS) DIY: 5 स्टेप्स

वीडियो: Arduino TDCS सुपर सिंपल। ट्रांसक्रानियल डायरेक्ट करंट स्टिमुलेटर (tDCS) DIY: 5 स्टेप्स

वीडियो: Arduino TDCS सुपर सिंपल। ट्रांसक्रानियल डायरेक्ट करंट स्टिमुलेटर (tDCS) DIY: 5 स्टेप्स
वीडियो: Simple DIY TENS and TDCS Example 2024, जुलाई
Anonim
Arduino TDCS सुपर सिंपल। ट्रांसक्रानियल डायरेक्ट करंट स्टिमुलेटर (tDCS) DIY
Arduino TDCS सुपर सिंपल। ट्रांसक्रानियल डायरेक्ट करंट स्टिमुलेटर (tDCS) DIY

पैरा फेजर एस्टे टीडीसीएस वोक प्रीसिसारा एपेनस डी उम आर्डिनो, रेसिस्टर, कैपेसिटर और एल्गन्स कैबोसकंपोनेंट्स

  1. अरुडिनो

    • पिनो डी13 कोमो सैदा पीडब्लूएम (पोड सेर अल्टरैडो)।
    • पिनो ए0 कोमो एंटरडा एनालोजिका (प्रति फीडबैक डी कोररेंटे)।
    • जीएनडी के लिए पिनो जीएनडी एपनेस।
  2. रोकनेवाला (~ 470, मास प्रोवेलमेंट एंट्रे 300-1000 funciona, você precisará Alterar no código fonte)
  3. संधारित्र (220 μF)। पैरा एस्टाबिलाइज़र के साथ पीडब्लूएम परोसें।
  4. एलेट्रोडोस डी एस्पोंजा (अगुआ सलीना पैरा मोलहा-लो का प्रयोग करें)।

कोमो फंकियोना

ओ अरुडिनो कैलकुला ए कोरेंटे पैड्राओ (पोड सेर अल्टरैडो) क्यू पासारा पेलो सेउ सेरेब्रो एपेनस पोर मुद्रा ए वोल्टेजम डे सैदा। वोक टैम्बेम पोडे अल्टरर या वेलोर डू टारगेट_एमए पेलो सीरियल सीएलआई (कंसोल)।

चरण 1: साईबा मैस

साईबा माईसो
साईबा माईसो

वोक देवे लेर मैस सोब्रे टीडीसीएस प्राइमिरो। इस पर ध्यान दें एफडीए ई पोड सेर प्रेजुडिशियल ए सुआ साडे, प्रिंसिपलमेंट से वोक नाओ सबे नाडा सोबरे ओएस एफिटोस कोलाटेरिस, प्रीक्यूकोस ई डेंट्रे आउट्रोस…

चरण 2: मोंटे ओ सर्किटो अबाइक्सो

मोंटे ओ सर्किटो अबाइक्सो
मोंटे ओ सर्किटो अबाइक्सो

अब इस पर चर्चा करें कॉम अगुआ सलीना!

चरण 3: इंस्टाल ओ कोडिगो नो सेउ अरुडिनो

configurações e parametros na área de HARDWARE PARAMS e CONFIGURABLE PARAMS के रूप में लेम्ब्रे-से डे अल्टरर।

वोक टैम्बेम देवे अल्टरर ओ बॉड रेट डू सीरियल पैरा: 115200 पैरा पोडर वर् ओ रिजल्टडो।

पैरा एक्जीक्यूटर कमांडो, ट्रोक ओ नो लाइन एंडिंग पैरा कैरिज रिटर्न।

ओ कोडिगो फोंटे + ट्यूटोरियल टैम्बेम पोडेम सेर एनकंट्राडोस नो रिपॉजिटरी:

कोडिगो:

कॉन्स्ट स्ट्रिंग वर् = "2.0 मी"; // हार्डवेयर पैरामीटर कॉन्स्ट इंट एनालॉगइनपिन = ए0; // एंट्राडा डू एनालोजिको कॉन्स्ट इंट एनालॉगऑटपिन = 13; // सैदा डी१३ पैड्रो फ्लोट मैक्सऑउटवी = ५.०; // एक वोल्टेजम डी सैदा पीडब्लूएम पैड्रो डू अरुडिनो [वी] फ्लोट मैक्सरफइनवी = १.१; // रेफरेंसिया वोल्टेजम एनालोजिका [वी] फ्लोट आर = ४७०.०; // रेसिस्टेंसिया दा कोरेंटे [ओम]

// कॉन्फ़िगर करने योग्य पैराम्स

बूल प्लॉटर = झूठा; // डेफिना: सच, कैसो एस्टेजा उसंडो ओ सीरियल प्लॉटर बूल पुट्टी = झूठा; // डेफिना: ट्रू, कैसो एस्टेजा यूएसंडो या पुटीटी (पॉड सेर अल्टरैडो नो सीएलआई) इंट मैक्समिन = 30; // टेम्पो (एम मिनटोस) आवश्यक पैरा डेस्लीगर [न्यूनतम] फ्लोट टारगेट_एमए = २.७३; // Essa é a corrente que passará pelo seu cérebro!!! [एमए] फ्लोट एप्सिलॉन_एमए = ०.०३; // डिफरेंका मैक्सिमा ने एक वास्तविक वास्तविक ई ओ टारगेट_एमए (नाओ अल्टेरे कासो नो साईबा ओ क्यू एस्टा फेजेंडो!)

// इनिट ग्लोबल्स

इंट स्टेट = 1; /* -1 - सेरेब्रो नो आइडेंटिफाडो 0 - वोल्टेज सेंडो अल्टरडा पैरा डेफिनिर ए कोरेंटे पैड्रो 1 - टूडो सर्टो। Você esta na corrente definida -10 - Voltagem desligada */ float outV = maxOutV; // वोल्टेजम int debounced_state = 0; इंट ज़ीरोस_लेन = 0; फ्लोट चिकना_एमए = 0;

स्ट्रिंग कमांडस्ट्रिंग = ""; // सीएलआई के लिए

// फीडबैक हेल्पर्स

फ्लोट कंप्यूटऑटवोल्टेज (फ्लोट वी, फ्लोट न्यू_एमए) {अगर (एब्स (न्यू_एमए-टारगेट_एमए) मैक्सऑटवी) {स्टेट = -1; // रेसिस्टेंसिया म्यूइटो अल्टा -> सेरेब्रो नो एनकॉन्ट्रैडो? वापसी maxOutV; // रिटर्न मैक्सऑटवी/5.0; // पैरा सेगुरांका} राज्य = 0; वापसी 0.1*new_V+0.9*V; // नया_वी लौटें; }

int कन्वर्टVtoOutputValue (फ्लोट वी) {

वापसी बाधा (int(V/maxOutV*255), 0, 255); }

फ्लोट सेंसरValue2mA (इंट सेंसरवैल्यू) {

फ्लोट सेंसरवोल्टेज = सेंसरवैल्यू/1023.0*maxRefInV; फ्लोट सेंसर_एमए = सेंसर वोल्टेज / आर * 1000.0; वापसी सेंसर_एमए; }

int debounced_state_compute(int State){

अगर (राज्य 5) वापसी 0; } वापसी १; }

अहस्ताक्षरित लंबी शुरुआत, अंत;

शून्य प्रक्रिया_फीडबैक () {इंट सेंसरवैल्यू = एनालॉग रीड (एनालॉगइनपिन); फ्लोट new_mA = sensorValue2mA (सेंसरवैल्यू); चिकना_एमए = 0.2*new_mA+0.8*चिकना_mA; फ्लोट वी = आउटवी; आउटवी = कंप्यूटऑटवोल्टेज (वी, न्यू_एमए); एनालॉगवर्इट (एनालॉगऑटपिन, कन्वर्ट वीटोऑटपुटवैल्यू (आउटवी)); debounced_state = debounced_state_compute (राज्य); // Exibir सूचना कोई CLI endc = (मिलिस () - प्रारंभ)/1000; स्ट्रिंग टीवी = "[", ttm = "mA/", tsm = "V,", ts = "mA] | एस्टाडो: ", h =" | टेम्पो: ", s = ":", लीडएम = "", लीडएस = "", प्लॉट टी = "लक्ष्य:", प्लॉटमा = "\ tSmoothed MA:", प्लॉटमिन = "\ tMin:", टेम्पो; अहस्ताक्षरित लंबा tmin = endc/६०-((endc/६०)% १); // फ़ॉर्मैटाकाओ अगर (endc%60<10) लीडएस = "0"; अगर (टीमिन = 0) टीएस = टीएस + "+"; // Parar autoamente if (tmin>maxmin) stop_device (); स्ट्रिंग txt; अगर (प्लॉटर) txt = प्लॉटटी + टारगेट_एमए + प्लॉटमिन + "0" + प्लॉटमा + स्मूथ_एमए; और txt = tv + V + tsm + smoothed_mA + ttm + target_mA + ts + debounced_state + h + गति; अगर (पोटीन) सीरियल.प्रिंट ("\r\e[?25l" + txt); और सीरियल.प्रिंट्लन (txt);

// अगले लूप से पहले 2 मिलीसेकंड प्रतीक्षा करें

// एनालॉग-टू-डिजिटल कनवर्टर के लिए व्यवस्थित करने के लिए // अंतिम पढ़ने के बाद: देरी (5); }

शून्य स्टॉप_डिवाइस () {

राज्य = -10; एनालॉगवर्इट (एनालॉगऑटपिन, 0); स्पष्ट एंडहोम (); Serial.println ("Sessão tDCS इंटररोम्पिडा"); सीरियल.प्रिंट्लन ("--------------------------"); मदद(); }

// सीएलआई हेल्पर्स

शून्य स्पष्ट और होम () {Serial.write (27); सीरियल.प्रिंट ("[2 जे"); // लिंपा ए टेली सीरियल.राइट (27); // ईएससी सीरियल.प्रिंट ("[एच"); // \r if (! putty) for (int i = 0; i<=30; i++) Serial.println(""); }

शून्य सहायता () {

Serial.println ("tDSC arduino, ver" + ver); Serial.println ("'?' - अजुडा"); Serial.println("'max_time' - atualiza o tempo máximo (em minutos)"); Serial.println ("'target_mA' - लक्ष्य या लक्ष्य (mA)"); Serial.println ("'epsilon_mA' - विशेष रूप से epsilon_mA (mA)"); Serial.println("'R' - atualiza aresistência do हार्डवेयर (ओम)"); Serial.println ("'पोटी' - मुदा ए फॉर्मेटाकाओ डे सैदा प्रो पुट्टी"); Serial.println("'stop' - para a estimulação"); Serial.println("'restart' - inicia/reinicia a estimulação & o टाइमर"); Serial.println ("'जारी रखें' - continua a estimulação"); सीरियल.प्रिंट ("\ n / r एस्टाडो: / n / r * max_time: "); सीरियल.प्रिंट (अधिकतम); Serial.print("minutos\n\r * target_mA:"); सीरियल.प्रिंट (target_mA); सीरियल.प्रिंट ("एमए / n / r * epsilon_mA:"); सीरियल.प्रिंट (ईपीएसलॉन_एमए); सीरियल.प्रिंट ("एमए / n / r * आर:"); सीरियल.प्रिंट (आर); Serial.println ("ओम"); }

बूल पार्स_परम (स्ट्रिंग और cmdString) {

int spacePos = cmdString.indexOf (''); अगर (स्पेसपोस <=0) झूठी वापसी; स्ट्रिंग कमांड = cmdString.substring(0, spacePos); स्ट्रिंग fval = cmdString.substring(spacePos+1); if(command=="putty") if (fval=="true"){ putty = true; सच लौटना; }else if (fval=="false"){ putty = false; सच लौटना; } फ्लोट वैल = fval.toFloat (); अगर (कमांड == "target_mA") {अगर (val100.0) {वापसी झूठी; } target_mA = वैल; स्पष्ट एंडहोम (); मदद(); }else if(command=="epsilon_mA"){ if(val0.3){ return false; } epsilon_mA = वैल; स्पष्ट एंडहोम (); मदद(); }else if(command=="R"){ R = val; स्पष्ट और होम (); मदद(); }else if(command=="max_time"){ maxmin = val; स्पष्ट और होम (); मदद(); } और { झूठी वापसी; } सच लौटें; }

// सेटअप और मुख्य लूप

शून्य सेटअप () {Serial.begin(११५२००); एनालॉग रेफरेंस (आंतरिक); // 1.1 वी सीरियल.प्रिंट ("सेसाओ इनिसियाडा!"); प्रारंभ = मिली (); } शून्य लूप () { अगर (राज्य! = -10) {प्रक्रिया_फीडबैक (); } अगर (सीरियल.उपलब्ध ()> 0){ चार वी = सीरियल.रीड (); अगर (बाइट (v) == 13) {// कैरिज रिटर्न बूल स्वीकृत = सत्य; अगर (कमांडस्ट्रिंग == "?" || कमांडस्ट्रिंग == "स्टॉप") {stop_device (); } और अगर (कमांडस्ट्रिंग == "पुनरारंभ करें") { clearAndHome (); राज्य = -1; आउटवी = मैक्सऑटवी/5.0; प्रारंभ = मिली (); स्वीकृत = झूठा; } और अगर (कमांडस्ट्रिंग == "जारी रखें") {clearAndHome (); राज्य = -1; आउटवी = मैक्सऑटवी/5.0; स्वीकृत = झूठा; } और { बूल ओके = parse_param (कमांडस्ट्रिंग); अगर (! ठीक) { clearAndHome (); मदद(); स्वीकृत = झूठा; Serial.println ("कोमांडो डिस्कोनहेसिडो: '" + कमांडस्ट्रिंग + "'"); } } कमांडस्ट्रिंग = ""; अगर (स्वीकृत) {clearAndHome (); मदद(); Serial.println ("ठीक है!"); }} और {कमांडस्ट्रिंग+=v; अगर (राज्य == -10) {सीरियल प्रिंट (वी); } } } }

चरण 4: उमा यूआई पर्सनालिज़ादा

उमा यूआई वैयक्तिकृत
उमा यूआई वैयक्तिकृत

पैरा मेलोर के साथ-साथ ई सेगुरांका, फेरामेंटा पुटी का उपयोग करें, ई डिफिना नो कोडिगो फोंटे:

पोटीन = सच

निश्चित रूप से सिफारिश करें:

  • खिड़की

    • ६१ कोलुनास और २० लिन्हास
    • स्क्रॉलबार प्रदर्शित करें
  • विंडो > प्रकटन

    फोन्टे: लुसीडा कंसोल, 28px

चरण 5: द्विदास?

पैरा अबिर ए गुआ डे अजुडा, डिजिटे:

?

ई प्रेसिजन [ENTER]

OBS: Caso o Estado सेजा:

-1 -> सेरेब्रो não identificado (corrente aberta)+0 -> Ajustando voltagem+1 -> Tudo certo, tDCS funcionando

सिफारिश की: