Spannungsmessung und automatische Abschaltung bei leerem Akku

Nein, so eine Schutzschaltung schaltet wirklich erst im letzten Moment ab und ist wirklich nur als reine Notlösung gedacht. Es schadet den Akkus, wenn man die immer bis zur Notabschaltung runter nudelt. Daher würde ich die Schwelle für die Abschaltung gerne etwas höher ansetzen. Bei meinen Taschenlampen fahre ich die LiIon Zellen zwischen 3,5 und 4,1V. Beim Tonuino würde ich wegen den geringen Strömen wohl zwischen 3,3V und 4,0V bleiben wollen. Und für die LiFePO4 Zellen kann man bis 2,5V runter gehen, voll sind die bei 3,6V. Aber auch hier sagt der Hersteller, wenn man die Zellen zwischen 20 und 80% Kapazität verwendet, halten die 5.000 Ladungen durch. Man könnte also jeden Tag laden und die Akkus würden trotzdem >10 Jahre halten - zumindest theoretisch.

Da klemm ich mich mal dazu - das ist nämlich genau das, was mir auch noch fehlt… Jedoch bin ich leider ebenso ratlos und trotz Lesens bislang nur unsicherer geworden… :confused:

Also wenn ich das richtig verstehe, kann man den Lipo direkt an einen analogen Pin anschließen. Hardware brauch man also keine, abgesehen von einem Kabel:

https://42project.net/praezise-analoge-spannungsmessungen-mit-dem-arduino-anhand-einer-referenzspannung-messen/

Da die meisten den Arduino über einen Step-Up (oder Step-Down) mit konstanter Ausgangsspannung betreiben werden, kann dieser als Referenz dienen. Ob das genau genug ist, müsste man testen.

Die Frage ist, wo im Code bauen wir das ein und wie oft soll die Spannung abgefragt werden.

Mir würde beim Einschalten eine Warnung (Audiofile) bei unter 25% reichen, wenn im Code die Spannung eingetragen werden könnte, wäre das super.

Und bei der Abschaltung halt vorher den Text abspielen den ich schon irgendwo gelesen habe: “Oh, mein Akku ist leer. Bitte Mama oder Papa das die mich wieder aufladen” oder so ähnlich :wink:
Hier auch die Spannung im Code einstellen und dann automatisch abschalten - wie schon beim Timer implementiert.

Im Prinzip ist das eigentlich kein großes Problem. Die relevanten Suchbegriffe sind „Arduino Spannung Messen“ und „Spannungsteiler“. Damit findet man sowohl benötigte Hardware (worst case paar Widerstände aus der Bastelkiste) und auch Beispielcode.

Ich habe das oben im main loop(). Ist natürlich jetzt etwas anders als ihr es machen würdet (analogread() usw.) und nicht die Library die ich da verwende für die interne Spannung. Wenn die kritische Spannung erreicht wird, kommt noch ne Ansage (genau wie @papa oben schreibt) und die Box geht aus.

2 „Gefällt mir“

Da habe ich wiederum gelesen, dass im ausgeschalteten Zustand keine Spannung an den analogen Pins anliegen sollte bspw.: Batteriespannung vor Step-Up-Wandler messen - #2 by nix_mehr_frei - Deutsch - Arduino Forum

Soweit war ich auch schon, aber wie man den Spannungsteiler in dem speziellen Fall dimensionieren sollte, ohne nachher ggf. zu hohe Verluste zu haben übersteigt mein elektronisches Verständnis, weshalb ich auf die Erfahrung von Euch hoffe…

Also ich würde einfach den Ausgang vom Polulu an den analog Pin legen, dann liegt auch keine Spannung an, wenn der Arduino abgeschaltet ist.

Spannungsteiler benötigt man ebenfalls keinen, da wir bei einem LiPo/LiFePo4 immer unter den maximalen 5V bleiben.

Theoretisch braucht es dann nur zwei Zeilen Code um die Spannung auszulesen:

int v=analogRead(analogPin);
voltage=v/1023*5.0;

Ja gute Idee. Hängt halt vom Setup ab wie man es am dümmsten macht.

Ich hatte das mit dem Spannungsteiler erwähnt damit es etwas allgemein gültiger ist. Und nicht jemand hier auf die Idee kommt 12V (oder mehr) an arme, kleine, analog Pins anzulegen. So hast du natürlich Recht.

Genau, und abhängig davon dann eben Ansage, abschalten etc.pp.

OK, ich werde mich an einen Testaufbau wagen. Welcher Pin wäre denn auf unserer Platine dafür geeignet und noch frei? Und was tragen wir dann hier ein?

int analogPin=1;

Ach so, und wie kann ich den aktuellen Wert zum überprüfen ausgeben?

Einzeiler zum Test:

Serial.println(analogRead(A6));

Aber nicht wundern wenn da dann eine Zahl zwischen 0 und 1024 raus kommt das ist der roh wert des 8 bit adc.

Klaro. Deswegen meinte ich ja zum Test. Muss man dann natürlich entsprechend umrechnen oder ggf. mit map() arbeiten (wobei das mit integern arbeitet, für Spannungen in dem Bereich eher unvorteilhaft).

Hallo zusammen,

ich setze ebenfalls gerade die Spannungsmessung für zwei Tonuino’s um.
Bei einem funktioniert es tadellos, bei dem anderen erhalte ich immer den Wert 1023, egal welche Spannung anliegt.

Überprüft habe ich folgendes:

  • Spannung (Lifepo4 Akku) mit dem Multimeter überprüft, es liegen 3.45 V an.
  • ich habe es an den Analogen Pins A3-A5 getestet (auf die anderen habe ich auf Grund meines Setups leider keinen Zugriff)
  • Test mit verschiedenen Kabeln

Hat vielleicht noch jemand Ideen was ich testen kann, oder ist mein Arduino hinüber?

Viele Grüße

Also wenn es bei einem Arduino funktioniert, und der gleiche Sketch auf einem anderen nicht, muss es ja am Aufbau bzw. an der Hardware liegen?!

Hast du ma einen kleinen Testsketch geschrieben, mit dem du den ADC testen kannst? Um jegliche andere Auswirkungen auszuschließen.

Das Sketch-Beispiel ReadAnalogVoltage funktioniert tadellos. Allerdings bin ich jetzt überfragt.
Was genau sollte ich jetzt prüfen?

Mein Aufbau basiert auf der Schaltung des folgenden Beitrags: Tutorial - Bau dir deine eigene Powerbank

Mit dem Multimeter habe ich alles nachgemessen und kontrolliert.
Der einzige mir bekannte Unterschied zwischen den beiden Aufbauten ist, dass der eine einen Lipo und der andere (der nicht funktioniert) einen LiFePo4 verwendet. Auf dem TP5000 ist die Brücke für den LiFePo 4 gesetzt. Der Rest im Aufbau ist identisch.

Hmm, hast du mal den Arduino hin und her getauscht? Wandert der Fehler mit? Du könntest auch die Akkus tauschen (natürlich umstellen Lipo<->Fepo nicht vergessen!) und schauen ob der Fehler mitwandert.

Ich hatte noch einen Ersatz-Arduino. Ich habe ihn getauscht (entlöten/löten)und jetzt geht es. Dafür hat es jetzt den RFID-Reader zerschossen. :roll_eyes:

Wir empfehlen ja aus dem Grund immer Buchsenleisten. Da ist das tauschen dann ein Kinderspiel. Aber schön das du da scheinbar den Fehler gefunden hast.

Hi

Wenn Du fertig bist, kannst Du dann deinen Aufbau kurz vorstellen und deine Codeschnipsel zur Verfügung stellen? Ich bin an meinem Vorhaben bisher leider gescheitert. Was ich unbedingt brauche um den Tonuino sicher mit meinen LiFePO4 Akkus zu betreiben, ist eine Spannungsmessung, Ansage bei fast leerem Akku, Ansage und Abschaltung bei leerem Akku mittels Pololu…

Danke!
Gruß
Papa

Ich habe mich mal mit der Hardwareseite dieses Problems befasst. Der Arduino soll ja im ausgeschalteten Zustand möglichst keine Spannung an den Eingängen anliegen haben. Meine Idee ist nun, daß man die direkte Akkuspannung zum Eingangspin des Arduino über einen p-MosFet schaltet. Dieser wird so angesteuert, dass er die Spannung nur bei eingeschaltetem Arduino bzw Tonuino zum Eingangspin durchschaltet.

Es können natürlich auch andere Mosfets als im Schaltbild angegeben verwendet werden.

Die Funktion ist so:
Wenn über die Einschaltelektronik oder Schalter ect der Tonuino eingeschaltet ist, bekommt der N-Fet positives Potential am Gate und steuert durch. Dadurch wird das Gate des P-Fet gegen Ground gezogen und er schaltet durch. Die Spannung des Akkus gelangt jetzt zum Eingangspin des Arduino . Über die Software muss diese nun ausgewertet werden und die gewünschte Reaktion ausgelöst werden. Heißt im Klartext, wenn die Spannung einen festgelegten Sollwert unterschreitet, wird zum Beispiel eine Warnung ausgegeben. Wird ein weiterer niedrigerer Sollwert unterschritten, schaltet der Arduino über eine Powerdownschaltung den Tonuino aus. Nun liegen die +5V nicht mehr am Arduino an, der NFET sperrt und damit auch der PFET. Die Akkuspannung ist wieder vom Eingangspin des Arduino getrennt.
Wichtig ist hier, dass die Spannung die am Gate des NFET anliegt hinter der PowerOn/Off Schaltung abgenommen wird. Also an den +5V des Arduino.

Wer es ganz einfach haben will kann auch ein Miniaturrelais verwenden, dass Bei eingeschaltetem Tonuino anzieht und dann die Akkuspannung direkt über den Kontakt zum Auswerteeingang des Arduino durchschaltet.

2 „Gefällt mir“