Berechnung des Batterieprozentsatzes mit einem Arduino

Ich mache ein kleines Projekt mit einem Lipoly-Ladegerät und einem 2500-mAh-3,7-V-Akku, beide von Adafruit. Ich versuche, den Prozentsatz anzuzeigen, der auf der Batterie verbleibt. Dafür verwende ich diese kleine Skizze:

long readVcc() {
  long result;
  // Read 1.1V reference against AVcc
  ADMUX = _BV(REFS0) | _BV(MUX3) | _BV(MUX2) | _BV(MUX1);
  delay(2); // Wait for Vref to settle
  ADCSRA |= _BV(ADSC); // Convert
  while (bit_is_set(ADCSRA,ADSC));
  result = ADCL;
  result |= ADCH<<8;
  result = 1126400L / result; // Back-calculate AVcc in mV
  return result;
}

Ich habe auf dieser Seite gesehen , dass die Mindestspannung 3,0 V beträgt, also verwende ich das, um meine Werte zu erhalten:

  float volt = (float)readVcc()/1000;
  float percent = ((volt-3)/0.7)*100;

Wenn ich meine Werte anzeige, wird mir angezeigt, dass der verbleibende Prozentsatz -4 % beträgt. Muss ich mir Sorgen machen oder mache ich beim Rechnen etwas falsch?

Wenn Ihre Berechnung ((Volt-3) / 0,7) * 100 eine negative Zahl ergibt, bedeutet dies, dass Ihre "Volt" -Variable weniger als 3 V beträgt.
Warten Sie, warten Sie ... Sie messen eine konstante 1,1-V-Referenz, die an den ADC-Eingang angeschlossen ist, und berechnen Avcc? ADC rückwärts, interessant!
Kamil, kannst du erklären, was du gerade gesagt hast? Da die Funktion readVCC nicht von mir stammt, habe ich sie auf dieser Seite: code.google.com/p/tinkerit/wiki/SecretVoltmeter
erklärte ich als Antwort.

Antworten (1)

Ich finde deine Rechnung ok.

Nachweisen:

Wenn Ihre ADC-Konvertierungsergebnisse 1024 (10-Bit-Vollausschlag) sind - wenn AVcc = Referenz

result = 1126400L / 1024 = 1100;

Wenn Ihre ADC-Konvertierungsergebnisse 512 (halbe Skala 10 Bit) sind - wenn AVcc = Referenz / 2

result = 1126400L / 512 = 2200;

Ihr prozentuales Ergebnis beträgt -4 %, da die Spannung unter 3 V liegt.

percent = ((volt-3)/0.7)*100
-4 = ((volt-3)/0.7)*100
-4/100 = (volt-3)/0.7
-0.04*0.7 = volt - 3
-0.28 + 3 = volt
 2.972 = volt
Und ist es sicher, mit einer 3,7-V-Batterie eine Spannung unter 3 V zu haben?
Nein. Es ist nicht gut für Li-Ion-Akkus. Es wird ziemlich schnell an Kapazität verlieren. Sie sollten die Batterie abklemmen, wenn dies passiert, oder den Strom auf Mikroampere reduzieren (Mikrocontroller im Schlafmodus, LEDs aus, alles aus), bis die Batterie wieder aufgeladen ist.
OK danke :). Haben Sie eine Idee, wie Sie den Arduino ausschalten können, wenn die Batterie unter 3 V liegt? Ich habe gesehen, dass es im Arduino einen Schlafmodus gibt, sollte das reichen?
Es hängt davon ab, was Sie an diese Batterie angeschlossen haben. Und wie lange dieser Stromkreis ohne Aufladung bleibt. Wenn Sie es einige Wochen lang im Schlafmodus bei 3 V belassen, wird die Batterie sowieso zerstört. Es ist wirklich schwer zu sagen. Ich bin kein Arduino-Typ, ich weiß nicht, wie der Schlafmodus funktioniert. Wenn es den Power-Down-Modus einschaltet: (0,1 µA in Atmega328P) - sollte es ausreichen, aber es ist ohne Schaltplan schwer zu sagen. Wenn Sie I2C mit Pullups haben, können sie die Batterie töten, unabhängig davon, ob Sie den Power-Down-Modus aktiviert haben.
Alles klar, danke für alle Antworten! Ich werde das überprüfen!
* Hallo zusammen, ich versuche mich der Frage tomatediabolik anzuschließen und Kamil zu beantworten und Fehlerquellcode zu generieren, ich würde gerne wissen wie seriös der vollständige Code ist, da ich eine tolle Idee finde und an einem ähnlichen Projekt arbeite. Vielen Dank im Voraus.