Arduino: Batteriedefinition und Informationsausgabe an die Konsole

Wahrscheinlich wollte jeder, der seinen eigenen autonomen Roboter entwickelte, den Ladezustand der Batterie bestimmen und sie auf dem Display oder in der Konsole anzeigen. Diese Funktion ist hauptsächlich für das Debuggen erforderlich. In einigen Fällen ist die Ermittlung der Ladung jedoch ein wichtiger Bestandteil der Funktionalität des Roboters. Die Schwierigkeit bei der Ausführung dieser Aufgabe besteht in der Begrenzung der maximalen Eingangsspannung am Analog-Digital-Wandler ( 5 V ) sowie in den großen Sprüngen des erhaltenen Wertes. In diesem Beitrag möchte ich zeigen, wie ich die Spannung von Batterien ablesen und die Ladung bestimmen kann.

Zunächst müssen zwei Widerstände von 1 kΩ an den Netzstecker dieser Spannungsteilerschaltung gelötet werden:

Bild

Wenn also die Ausgangsspannung voll geladener Batterien 10 V nicht überschreitet , beträgt die Spannung nach dem Teiler weniger als 5 V, was bedeutet, dass sie von einem Analog-Digital-Wandler angemessen erkannt wird .

Jetzt müssen Sie den Ausgang des Teilers mit einem beliebigen Analogeingang des Arduino verbinden. In meinem Fall ist dies das A5-Bein. Versuchen Sie dann, die Spannung von den Batterien abzulesen:

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

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

Es stellt sich heraus, dass dies nicht klar ist, da wir vergessen haben, den Wert in ein Dezimalzahlensystem umzuwandeln. Teilen Sie dazu alles durch 1024:

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

Nun wählen wir mit Hilfe eines Voltmeters einen Koeffizienten aus, bei dem die Spannung ungefähr der tatsächlichen Spannung entspricht:

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

Wir haben eine starke Auf- und Absprungspannung, die oft nicht den Anforderungen entspricht. Um diesen Fehler zu beheben, fügen Sie eine Tiefpassfilterung mit dem für Ihr Projekt am besten geeigneten Glättungsfaktor hinzu:


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

Jetzt bleibt die Spannung an voll aufgeladenen und vollständig entladenen Batterien zu messen. In meinem Fall beträgt der Unterschied genau 1V.

Danach müssen Sie die Batterieladung in Prozent ermitteln:

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

Wir müssen dies nur in das Batteriesymbol (oder in die Kästchen wie meines) übersetzen und an die Konsole ausgeben:


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

Um das Ergebnis anzuzeigen, empfehle ich die Verwendung von PuTTY, da es im Gegensatz zum üblichen „Port-Monitor“ in der Arduino-IDE jede Codierung unterstützt.

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


All Articles