Arduino: कंसोल के लिए बैटरी की परिभाषा और सूचना आउटपुट

संभवतः हर कोई अपने स्वयं के स्वायत्त रोबोट का निर्माण कर रहा है, बैटरी चार्ज स्तर निर्धारित करना चाहता था और उन्हें डिस्प्ले या कंसोल में प्रदर्शित करता था। यह फ़ंक्शन डिबगिंग के लिए मुख्य रूप से आवश्यक है, लेकिन कुछ मामलों में, चार्ज का निर्धारण करना रोबोट की कार्यक्षमता का एक महत्वपूर्ण हिस्सा है। इस कार्य को करने में कठिनाई अधिकतम इनपुट वोल्टेज को एनालॉग-टू-डिजिटल कनवर्टर ( 5 वी ) तक सीमित करने के साथ- साथ प्राप्त मूल्य में बड़ी छलांग है । इस पोस्ट में, मैं बैटरी से वोल्टेज को पढ़ने और चार्ज का निर्धारण करने का अपना तरीका दिखाना चाहूंगा।

सबसे पहले, इस वोल्टेज विभक्त सर्किट के पावर प्लग में 1 kΩ के दो प्रतिरोधों को मिलाप करना आवश्यक है :

छवि

इस प्रकार, यदि पूरी तरह से चार्ज की गई बैटरी का आउटपुट वोल्टेज 10V से अधिक नहीं है , तो डिवाइडर के बाद वोल्टेज 5V से कम होगा, जिसका अर्थ है कि यह एनालॉग-टू-डिजिटल कनवर्टर द्वारा पर्याप्त रूप से पहचाना जाएगा। ।

अब आपको Arduino पर किसी भी एनालॉग इनपुट को डिवाइडर के आउटपुट को कनेक्ट करने की आवश्यकता है। मेरे मामले में, यह ए 5 पैर है। फिर बैटरी से वोल्टेज को पढ़ने की कोशिश करें:

void setup() {
  Serial.begin(9600);
  pinMode(A5, INPUT);
}

void loop() {
  float k = 2;
  float voltage = k*analogRead(A5);
}

यह पता चला है कि यह स्पष्ट नहीं है, क्योंकि हम मूल्य को दशमलव संख्या प्रणाली में बदलना भूल गए हैं। ऐसा करने के लिए, 1024 से सब कुछ विभाजित करें:

void loop() {
  float k = 2/1024;
  float voltage = k*analogRead(A5);
}

अब हम एक वाल्टमीटर की मदद से एक गुणांक का चयन करते हैं, जिस पर वोल्टेज वास्तविक वोल्टेज के बराबर होगा:

  float k = 2*1.12;
  float voltage = k*4.5f/1024*analogRead(A5);

हमें एक मजबूत जंपिंग अप और डाउन वोल्टेज मिला, जो अक्सर आवश्यक नहीं था। इस त्रुटि को ठीक करने के लिए, अपनी परियोजना के लिए सबसे उपयुक्त चौरसाई कारक के साथ लो-पास फ़िल्टरिंग जोड़ें:


void loop() {
  float k = 2*1.12;
  float voltage = k*4.5f/1024*analogRead(A5);
  float chargeLevel_procents;
  float chargeLevel;
  float y;
  int z;

  //   

  float A_v = voltage; //
  float A_K = 0.3; // 
  static float A_y; // 
  
  A_y = A_y - A_K * (A_y - A_v);
}

अब यह पूरी तरह चार्ज बैटरी पर वोल्टेज को मापने और पूरी तरह से छुट्टी देने के लिए बनी हुई है। मेरे मामले में, अंतर ठीक 1V है।

उसके बाद, आपको बैटरी चार्ज को प्रतिशत में खोजने की आवश्यकता है:

  y = A_y / 8.4 * 100;
  
  chargeLevel_procents = y;
  chargeLevel = z;

हमें इसे केवल बैटरी आइकन (या वर्गों में, मेरी तरह) में अनुवाद करना होगा और इसे कंसोल में आउटपुट करना होगा:


if(chargeLevel_procents >= 0 && chargeLevel_procents < 33) {
    z = 1; // 1/3 
  }
  
  else if(chargeLevel_procents >= 33 && chargeLevel_procents < 66) {
    z = 2; // 2/3 
  }

  
  else if(chargeLevel_procents >= 66 && chargeLevel_procents <= 100) {
    z = 3; //  
  }

Serial.print("\t Voltage: ");
    Serial.print(A_y);
    Serial.print(" V ");
    Serial.print("\t Charge: ");
    if(z == 1) {
      Serial.print("■");
    }
    else if(z == 2) {
      Serial.print("■■");
    }
    else if(z == 3) {
      Serial.print("■■■");
    }
    else {
      Serial.print("ERROR");
    }
    Serial.print("\r\n");  

परिणाम देखने के लिए, मैं PuTTY का उपयोग करने की सलाह देता हूं, क्योंकि यह किसी भी एन्कोडिंग का समर्थन करता है, जो कि Arduio IDE में सामान्य "पोर्ट मॉनिटर" के विपरीत है।

Source: https://habr.com/ru/post/hi390967/


All Articles