Hey, Ich möchte auf einem Arduino den aktuellen Batterie zustand ermitteln. 3V... 0%, 4,2V...100% Die Spannungsmessung erfolgt durch einen INA219. Zurzeit versuche ich es mit der Funktion "Map" auf dem Arduino. Wäre cool wenn ihr mir helfen könnt.
:
Verschoben durch Moderator
Beitrag #6608412 wurde vom Autor gelöscht.
Irgendwie kommt die dusslige Frage nach "Batterie Stand in % anzeigen" mindestens alle 7 Tage einmal.
Dann mach dir erst mal eine Tabelle (auf Papier aka "toter Baum") in die du Akkuspannung und Restkapazität einträgst. Wenn du diese Tabelle hast geht es weiter.
Lorenz S. schrieb: > Armin K. schrieb: >> Hattest du in der Schule Mathe? > > Wäre nett wenn du mir das erklären könntest Das wäre dann ein Dreisatz.
Lorenz S. schrieb: > Wäre nett wenn du mir das erklären könntest --> evtl. hilft dir der Suchbegriff "Dreisatz" weiter
Und was tut da nicht? Sonst ist glaube ich das mit dem Scalieren nur bedingt eine gute Idee. Weil die Kurve ja nicht linear ist. Also einfach zu Scalieren wird nur mehr oder weniger den Prozent zu sagen. Sonst ist zwischen 30 und 70 prozent die kurve eher flach, da wird es schwer zu messen.
int sensorValue = analogRead(A0); val = map(sensorValue , 0, 1023, 0, 100);
:
Bearbeitet durch User
Wenn du es eh nur als lineare Funktion annimmst .... y(x) = k*x+d Du hast 2 unbekannte und2 x&y Werte ....
Hallo Forum? -Hier wird geholfen... oder auch nicht :-( Ich würde es erst gar nicht mit einen Mapping machen sonden eine Tabelle (Array) nutzen - eben wegen den alles andere als linearen Zusammenhang zwischen der Kapazität und der Spannung. Wobei über einen weiten Bereich der Zusammenhang Spannung - Kapazität so gering ist das ein verlässlicher Wert eher illusorisch ist. Die Lösung wäre eher eine Art Ladungs- und dann Entladungsmengenzähler wobei du selbst durch Trail and Error herausfinden müsstest wie hoch der Lade- Endladewirkungsgrad ist und das dann als Korrekturfaktor einbringen. Dummerweise hängt die Nutzbare Kapazität auch vom Belastungsprofil ab - auch gibt es eben -nicht- die eine wahre Entladeschlussspannung aka "0%" sondern diese ist davon abhängig was dir wichtig (Maximale Kapazität vs. Lebensdauer, Zuverlässigkeit und vieles mehr)ist und was der jeweilige Akku (Die -genaue- Zellenchemie welche oft nicht bekannt ist Li-Ionen ist nur ein Überbegriff) für Eigenschaften hat. Alles nicht so einfach - daher auch die typische Balkenanzeige mit selten mehr als 4 Balken - genauer ist sehr aufwendig und ein Lernprozess des Kapazitätsmessers den man aber selbst erst mal verstehen muss (das ist nicht trivial) um es dann der Elktronik bzw. den µC des Kapazitätmessers "beizubringen" (Zu Programmieren). Und leicht OT: Wieder mal ein trauiges Beispiel wie typischer Weise nicht geholfen wird: Ansatt zu erklären und vorzumachen wie der Dreisatz, oder die Lineare Funktion jetzt Funktioniert wird das den TO einfach um die Ohren gehauen - das ist keine Hilfe, keine Anleitung auch keine Hilfe für stille Mitleser oder durch eine Suchmaschine hier hin geführte Leute. Das der Ansatz in diesen Fall aus technologischen Gesichtspunkten nicht funktioniert (zumindest wenn die prozentangaben der Realtät wenigstens angenähert entsprechen sollen) hat nicht mit der Kritik zu tun - würde der Ansatz nämlich Funktionieren wäre den TO trotzdem nicht geholfen worden, sondern wieder mal nur "arbeitsaufträge" verteilt worden - das hat(te) er bestimmt schon viel zu oft in der Schule oder am Arbeitsplatz. Wer keine Lust dazu irgendwelche Anfragen wirklich sinnvoll und basierend auf die Frage, den zu vermutenden Wissensstand und Anspruch des jeweiligen TO (nicht nur hier in diesen Fall) hat ja den risenvorteil das er nicht Antworten muss und sich entspannt zurücklehenen kann und den anderen (eventuell auch niemanden) die Arbeit zu überlassen.
> Und leicht OT: > Wieder mal ein trauiges Beispiel wie typischer Weise nicht geholfen > wird: > Ansatt zu erklären und vorzumachen wie der Dreisatz, oder die Lineare > Funktion jetzt Funktioniert wird das den TO einfach um die Ohren gehauen > - das ist keine Hilfe, keine Anleitung auch keine Hilfe für stille > Mitleser oder durch eine Suchmaschine hier hin geführte Leute. Danke
Ich habe Dir Lorenz S. schrieb: > Danke Ich habe Dir einen Lösungsansatz aufgezeigt: int sensorValue = analogRead(A0); val = map(sensorValue , 0, 1023, 0, 100);
Ja, und wenn das Dingens dann 50% anzeigt, ist der Akku im wesentlichen schon leer. Fuer fortgeschrittene Themen braucht man eben auch fortgeschrittene Mathematik und keinen dussligen Dreisatz.
Philipp G. schrieb: > val = map(sensorValue , 0, 1023, 0, 100); Das bildet aber 0 bis 5V auf 0 bis 100 ab, er will ja 3 bis 4,2V auf 0 bis 100 abbilden. Demnach bräuchte er: val = map(sensorValue , 614, 860, 0, 100); Abgesehen davon ist der Zusammenhang zwischen Spannung und Restkapazität gerade im oberen Bereich sehr nichtlinear, erst ab der Nominalspannung wird das einigermaßen und selbst da hängt es stark von Einflüssen wie der Temperatur und dem Strom ab. Ob man langfristig glücklich mit dieser Methode wird ist fraglich. Akkukapazität bestimmen ist eine Kunst für sich, die einfachste und einigermaßen genaueste Methode ist ein coulomb counter der taugt in seiner einfachsten Form auch nur bei einigermaßen konstanten Bedingungen was die Lade- / Entladeströme und Umgebungstemperatur betrifft. Das Bezieht dann auch keine Alterung oder dergleichen mit ein.
Kevin M. schrieb: >> val = map(sensorValue , 0, 1023, 0, 100); > > Das bildet aber 0 bis 5V auf 0 bis 100 ab, er will ja 3 bis 4,2V auf 0 > bis 100 abbilden. Demnach bräuchte er: Ich habe meine Lösung bewusst TO gerecht beantwortet. Denn wenn er nicht mal weiss was ein Dreisatz ist, bezweifle ich ernsthaft, dass er eine Kurve in einem Array unterbringen kann.
Irgendwo habe ich mal eine Tabelle gefunden und in mein ESPHome integriert: Spannung Prozent 4.2 100 4.15 95 4.11 90 4.08 85 4.02 80 3.98 75 3.95 70 3.91 65 3.87 60 3.85 55 3.84 50 3.82 45 3.8 40 3.79 35 3.77 30 3.75 25 3.73 20 3.71 15 3.69 10 3.61 5 3.27 0 ESPHome kann das so verarbeiten und auch Zwischenwerte berechnen. 0% bei rund 3.3 Volt macht auch noch Sinn - dann ist noch nicht ganz tot wenn man es endlich sieht ;-) Map wird da wohl nicht direkt gehen. Vielleicht mit switch(case) wenn Dir 5%-Stufen reichen; geht natürlich auch mit 1%-Stufen - wird halt länger ;-)
1 | Batterie_Kapazitaet = map(Spannung_Solar , 4.2 , 3 , 100 , 0 ); |
Und noch was, der Begriff Kapazität in Bezug auf die Akkuspannung ist falsch. Auch delay solltest du vermeiden wo möglich.
:
Bearbeitet durch User
Lorenz S. schrieb: > Hey, > Ich möchte auf einem Arduino den aktuellen Batterie zustand ermitteln. miss alle Sekunde den entnommmenen Strom, addiere die Ah/mAh auf und du weisst es circa. (wer mag merkt sich auch noch die Spannung oder nimmt die mit auf) Ist zwar kein Ladezustand, aber man weiss ungefähr wieviel noch drin steckt. Angenommen 2000mAh und man entnimmt 10 Stunden 100mA sind 1 Ah weg von 2 Ah.
:
Bearbeitet durch User
Jeder Akkutyp hat für gewöhnlich eine Kennlinie mit Spannung u. Kapazität, die man aus dem Datasheet entnehmen kann. Daraus kannst du dir einen formellen Zuammenhang ableiten und mit dem gemessenen (AD gewandelten) Wert interpolieren.
jungerAlterSack schrieb: > Jeder Akkutyp hat für gewöhnlich eine Kennlinie mit Spannung u. > Kapazität, die man aus dem Datasheet entnehmen kann. Ich glaube nicht. Google mal nach Akku Entladekurve, 18650 Endladekurve, etc. Du wirst feststellen das es da mehr als eine Kurve gibt.
Falls dein "Arduino" ein ESP8266 oder ESp32 ist, bedenke dass nicht nur die Entladekurve des Akkus nicht linear ist, sondern auch der AD Wandler. Das heißt: Benutze nicht Messwerte vom Multimeter als Basis für die Tabelle, sondern Messwerte vom ADC.
Stefan ⛄ F. schrieb: > Falls dein "Arduino" ein ESP8266 oder ESp32 ist, bedenke dass > nicht nur > die Entladekurve des Akkus nicht linear ist, sondern auch der AD > Wandler. --> Lorenz S. schrieb: > Die Spannungsmessung erfolgt durch einen INA219. Der INA219 kann auch gleich noch den Strom messen, wären eigentlich ideale Voraussetzungen für Kevin M. schrieb: > genaueste Methode ist ein coulomb counter
:
Bearbeitet durch User
Ideal wäre gleich einen Battery Monitor oder Battery Gauge IC zu nehmen. Gibts von zig Herstellern https://www.st.com/resource/en/application_note/cd00248578-using-the-stc3100-battery-monitor-for-gas-gauge-applications-stmicroelectronics.pdf
Εrnst B. schrieb: >> Die Spannungsmessung erfolgt durch einen INA219. Ach ja, habe ich nicht bedacht.
Hallo Kevin M. schrieb: > Ich glaube nicht. Google mal nach Akku Entladekurve, 18650 Endladekurve, > etc. Du wirst feststellen das es da mehr als eine Kurve gibt. So ist es - und diese Kurven sind dann noch unter Labor Bedingungen aufgenommen werden - anders geht es gar nicht. Konstantstromentladung mit genau bekannter Historie des vorhergehenden Ladevorgangs und irgendwelchen festen "Lagerzeiten" bis zur Nutzung gibt es in der Praxis aber nun mal nicht. Solange ein Akku nicht nur Selbstzweck ist (eben z.B. zum Aufnehmen der Ladekurven, oder um die optimalen Bedingungen herauszufinden, irgendwie sinnlos die maximale Kapazität zu verheizen etc.) sind diese Entladekurven mehr oder weniger "nur" eine einigermaßen belastbare Vergleichsmöglichkeit zwischen verschiedenen Zellen und ein (sehr) grobe Hilfe zur Abschätzung der Akkulaufzeit bzw. ob der Akku für die vorgesehenen Entladeströme geeignet ist. Wobei die Entladeströme dann bei ein und demselben Gerät sehr oft zwischen einigen µA bis mehre A liegen können - gerade eben bei den Geräten wo Lithium Zellen genutzt werden. Mit viel Erfahrung kann man eventuell (viele Variablen...) abschätzen wie lange das jeweilige Gerät mit den zugehörigen x Ah Akku läuft und somit die passende Entladekurve zuordnen - wobei das auch nicht so ganz Koscher ist da eben die Stromspitzen die bis in den Amperebereich gehen überproportional in die "Rechnung" eingehen - wobei eine Berechenbarkeit in der Praxis schön wäre...
Lorenz S. schrieb: > Hey, > Ich möchte auf einem Arduino den aktuellen Batterie zustand ermitteln. > 3V... 0%, 4,2V...100% > Die Spannungsmessung erfolgt durch einen INA219. > Zurzeit versuche ich es mit der Funktion "Map" auf dem Arduino. > Wäre cool wenn ihr mir helfen könnt. der Zusammenhang ist keineswegs trivial, nichtlinear und stark von der Akkutechnologie abhängig. Selbst viele Hersteller scheitern daran regelmäßig. Traurig wie auf deine Frage reagiert wird. Sie offenbart zugleich grenzenlose Ahnungslosigkeit und Unfreundlichkeit :-)
Philipp G. schrieb: > int sensorValue = analogRead(A0); Hier sind mal wieder diverse Vollpfosten unterwegs: Lorenz S. schrieb: > Die Spannungsmessung erfolgt durch einen INA219. Beim INA219 gibt es kein analogRead, der liefert Werte per I2C, und diese verdammt genau. Joachim B. schrieb: > miss alle Sekunde den entnommmenen Strom, addiere die Ah/mAh auf und du > weisst es circa. (wer mag merkt sich auch noch die Spannung oder nimmt > die mit auf) Genau so sollte man es machen. Ganz zuende gedacht, misst man auch die Ladung und kann damit auf die Alterung reagieren. Als zusätzliche Sicherheit packt man eine Endabschaltung nach Spannung dazu. Die Fragestellung klingt mal wieder nach Kindergarten, per Google hierher gefunden und wenig Chancen, es umzusetzen. Der angehängte Progarmmkot ist wohl ein Witz, der hat nichts mit INA219 zu tun - Troll oder Dussel? Es gibt auch Ansätze ohne Strommessung: Man rechnet Zeit gegen den bekannt typischen Stromverbrauch, wie es z.B. DECT-Telefone machen und legt nur einen Notausstieg bei Endspannung an. jungerAlterSack schrieb: > Jeder Akkutyp hat für gewöhnlich eine Kennlinie mit Spannung u. > Kapazität, die man aus dem Datasheet entnehmen kann. Es gibt keinen Akku, dessen Ladezustand man anhand der Spannung halbwegs sinnvoll erkennen kann. Stefan ⛄ F. schrieb: > Das heißt: Benutze nicht Messwerte vom Multimeter als Basis für die > Tabelle, sondern Messwerte vom ADC. Hauptsache, viele Kommentare, bloß nicht lesen: "Die Spannungsmessung erfolgt durch einen INA219." Timo N. schrieb: > Ideal wäre gleich einen Battery Monitor oder Battery Gauge IC zu nehmen. Klasse Tip, sehr hilfreich. Vielleicht guckst Du mal das Datenblatt vom INA219 an, FuelGauge ist eine für ihn typische Applikation! ------ Der INA219 ist am Arduino mit einer Library aus dem Internet sehr schnell in Betrieb zu nehmen, die von Adafruit gibt Spannung und Strom direkt als vorzeichenbehaftete Zahl her. Ich habe den INA219 mehrfach eingesetzt, ein ziemlich problemloses Teil mit guter Genauigkeit! Die Zahlen zu verarbeiten, darf der Progarmmierer entweder selbst machen oder sich ein anderes Hobby suchen.
Manfred schrieb: > Timo N. schrieb: >> Ideal wäre gleich einen Battery Monitor oder Battery Gauge IC zu nehmen. > > Klasse Tip, sehr hilfreich. Vielleicht guckst Du mal das Datenblatt vom > INA219 an, FuelGauge ist eine für ihn typische Applikation! Finde keinen Akkumulator oder Coloumb Counter in dem IC. Kannst das natürlich über IC2 dann im Arduino selbst machen. Aber dann musst du deterministisch in immer gleichen ausreichend kurzen Zeitabschnitten den Stromwert abfragen. Ob da was gescheites bei raus kommt...
Praktiker schrieb: > Wieder mal ein trauiges Beispiel wie typischer Weise nicht geholfen > wird: > Ansatt zu erklären und vorzumachen wie der Dreisatz, oder die Lineare > Funktion jetzt Funktioniert wird das den TO einfach um die Ohren gehauen > - Dreisatz ist in Klasse 6 dran. Lineare Funktion in Klasse 8. "Hier" ist der falsche Ort und die falsche Zeit. "Hier" sollte man lediglich empfehlen, sich genauer mit der Akku-Theorie zu beschäftigen und erst dann wieder zu kommen, wenn es Fragen gibt. Nur "ich habe einen Arduino und von überhaupt nichts Ahnung" ist zu wenig und nicht zielführend.
Sry wegen Tipp- und Grammatikfehler. @Lorenz: Nur weiter so lass dir nichts abreden! Bastel dir erstmal eine ungenaue/simple Lösung. Benutze vorerst nur die Spannung. Diese hat den größten Einfluss auf die Kapazität. Später kannst du auf deine Berechnung andere Faktoren sowie Temperatur und Strom dazuholen. Ansatz 1 - Verstehe was du machst) Vakt ist die aktuelle Spannung 100 % = Vmax 0 % = Vmin DiffMax = Vmax - Vmin d.h 0 bis DiffMax -> 100% bis 0% ((DiffMax - (Vmax - Vakt)) / DiffMax) * 100 = .. % Schon hast du deine 1. Lösungsweg. Wenn du genauer werden willst nehme nun auch den nächsten Faktor für die Berechnung mit. Die Batteriespannung hängt von auch fliesenden Strom bzw. Leistung ab V=P/I . Fließt Strom raus nehmt die Spannung ab andersrum nimmt Spannung zu. Stoppt man die Ladung/Entladung bleibt die Spannung nicht konstant. Stoppt man Ladungsvorgang nimmt die aktuelle Spannung ab. Stoppt man die Entladung nimmt die aktuelle Spannung zu.
Hallo, Manfred schrieb: > Hier sind mal wieder diverse Vollpfosten unterwegs:... > Die Fragestellung klingt mal wieder nach Kindergarten... > Hauptsache, viele Kommentare, bloß nicht lesen: > Klasse Tip, sehr hilfreich... Was soll diese überhebliche und aggressive Art? Wenn das für dich hier ein Kindergarten ist, stellt sich mir die Frage wieso du dich hier überhaupt einbringst. > Der INA219 ist am Arduino mit einer Library aus dem Internet sehr > schnell in Betrieb zu nehmen, die von Adafruit gibt Spannung und Strom > direkt als vorzeichenbehaftete Zahl her. Ich habe den INA219 mehrfach > eingesetzt, ein ziemlich problemloses Teil mit guter Genauigkeit! Geht doch. > ...oder sich ein anderes Hobby suchen. Und wieder ein Rückfall. rhf
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.