اردوينو: تعريف البطارية وإخراج المعلومات إلى وحدة التحكم

ربما أراد الجميع إنشاء الروبوت المستقل الخاص بهم ، لتحديد مستوى البطارية وعرضها على الشاشة أو في وحدة التحكم. هذه الوظيفة ضرورية بشكل أساسي لتصحيح الأخطاء ، ولكن في بعض الحالات ، يعد تحديد الرسوم جزءًا مهمًا من وظائف الروبوت. تتمثل صعوبة تنفيذ هذه المهمة في الحد من أقصى جهد دخل في المحول التناظري إلى الرقمي (5 فولت ) ، بالإضافة إلى القفزات الضخمة في القيمة التي تم الحصول عليها. في هذا المنشور ، أود أن أظهر طريقي لقراءة الجهد من البطاريات وتحديد الشحنة.

1 Ω :

الصورة

, 10, 5, , - .

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);
}

, voltage :

  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 ، لأنه يدعم أي ترميز ، على عكس "مراقب المنفذ" المعتاد في Arduino IDE.

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


All Articles