Mithilfe des ADC auf dem ESP8266 könnt Ihr Spannungen messen. Dies ist praktisch um zum Beispiel eine Akkuspannung und damit den Ladezustand des Akkus oder mithilfe eines LDRs und einem Serienwiderstand eine Helligkeit zu erfassen.
Dabei ist der ADC des ESP8266 aber etwas speziell. Ohne weitere externe Beschaltung kann dieser leider nur Spannungen bis max. 1V bestimmen. Damit direkt die Spannung eines LiPo-Akkus zu ermitteln ist also nicht möglich, weil der Spannungsbereich eines gesunden LipOs von 3,2 bis 4,2V reicht.
Damit der ADC aber auch höhere Spannungen messen kann bedient man sich eines Tricks. Man verwendet einen Spannungsteiler um die zu messende Spannung auf den möglichen Spannungsbereich des ADCs runter zu skalieren.
Der ADC misst dann also Spannungen im Bereich von 0V bis 1V welche für einen höheren Wert an dem eigentlichen Spannungsteiler stehen. So ist zum Beispiel auch auf der Platine des Wemos D1 Mini ein Spannungsteiler verbaut um Spannungen bis 3,3V zu messen. Das ist schon mal praktisch, reicht aber leider nicht um zum Beispiel die Spannung eines LiPos messen zu können.
Wie Ihr diesen maximalen Spannungsbereich des ADCs erweitern könnt, ist im folgenden Artikel beschrieben.
Voraussetzungen
Hilfreiche Artikel:
Bevor ihr mit diesem Artikel startet solltet Ihr euch mit den Grundlagen des Lötens beschäftigt haben. Informationen dazu findet Ihr in dem folgenden Artikel.
Elektronik – Mein Freund der Lötkolben
Benötigtes Werkzeug:
In der folgenden Liste findet Ihr alle Werkzeuge die Ihr zur Umsetzung dieses Artikels benötigt.
Benötigtes Material:
In der folgenden Liste findet Ihr alle Teile die Ihr zur Umsetzung dieses Artikels benötigt.
Sicherheitshinweise
Ich weiß die folgenden Hinweise sind immer irgendwie lästig und wirken unnötig. Aber leider haben schon viele Menschen die es "besser" wussten aus Leichtsinnigkeit Augen, Finger oder anderes verloren bzw. sich verletzt. Im Vergleich dazu ist ein Datenverlust fast nicht der Rede Wert, aber auch diese können echt ärgerlich sein. Deswegen nehmt Euch bitte fünf Minuten Zeit um die Sicherheitshinweise zu lesen. Denn auch das coolste Projekt ist keine Verletzung oder anderen Ärger wert.
https://www.nerdiy.de/sicherheitshinweise/
Affiliatelinks/Werbelinks
Die hier in aufgeführten Links zu Online-Shops sind sogenannte Affiliate-Links. Wenn Du auf so einen Affiliate-Link klickst und über diesen Link einkaufst, bekommt Nerdiy.de von dem betreffenden Online-Shop oder Anbieter eine Provision. Für Dich verändert sich der Preis nicht. Falls Du Deine Einkäufe über diese Links tätigst unterstützt Du Nerdiy.de dabei auch in Zukunft weitere nützliche Projekte anbieten zu können. 🙂
Wie funktioniert ein Spannungsteiler
Ein einfacher Spannungsteiler besteht eigentlich immer aus mindestens zwei Widerständen. Im unten stehenden Schaltplan des Wemos D1 Mini könnt Ihr im Rot markierten Bereich einen Spannungsteiler erkennen.
Falls Euch die Funktion eines Spannungsteilers nicht interessiert, könnt Ihr diesen Absatz auch einfach überspringen. 🙂
Dort sind zwei Widerstände in Reihenschaltung verbaut. Der obere Anschluss “A0” kommt dabei von dem Anschluss Pin “A0” auf der Wemos D1 Mini Platine. An “A0” wird also die zu messende Spannung (zum Beispiel Euer LiPo) angeschlossen.
Der Anschluss “ADC” führt dann zu dem eigentlichen ADC des ESP8266.
Warum macht man das ganze?
Man nutzt hier eine Eigenschaft einer Reihenschaltung aus zwei Widerständen.
Für eine Reihenschaltung aus zwei Widerständen gilt nämlich unter anderem, dass das Verhältnis der Gesamtspannung zu einer Einzelspannungen an einem der Widerstände gleich dem Verhältnis des Gesamtwiderstands zu einem der Einzelwiderstände ist. Das klingt erst mal kompliziert aber wird im folgenden erklärt. 🙂
Vorab: Als Formel würde das ganze so aussehen:
Formel 1:
oder
Formel 1.2:
“U1” and “U2” are the voltages that drop across the resistor “R1” and “R2”. “U” is the same as U1 + U2 because in a series connection of (simple ohmic) resistors, the individual voltages add up to the total voltage.
Kurz, es gilt:
Ähnliches gilt auch für die Widerstände, denn auch der Gesamtwiderstand einer Reihenschaltung besteht aus der Summe der Einzelwiderstände.
Diese Formeln lassen sich nun ganz gut in Formel 1 einsetzen und man erhält folgendes:
“U1” und “U2” sind hierbei die Spannungen die an dem Widerstand “R1” bzw. “R2” abfallen. “U” ist dabei das gleiche wie U1+U2 weil sich in einer Reihenschaltung aus (einfachen ohmschen) Widerständen die Einzelspannungen addieren um auf die Gesamtspannung zu kommen.
Dazu muss die Formel so umgestellt werden, dass sich aus den gegeben Werten die Gesamtspannung “U” berechnen lässt. Die umgestellte Formel ergibt:
Formel 2:
Wenn man hier nun die entsprechenden Werte einsetzt ergibt sich folgendes:
Mit den im Spannungsteiler verwendeten Widerstandswerten lassen sich also Spannungen bis 3,2V am ADC messen.
Das praktische: Wenn man diese Widerstandswerte ändert kann man mit dem ADC auch höhere Spannungen messen. Im folgenden zum Beispiel die Spannung eines LiPos.
Spannungsteiler auf dem Wemos D1 Mini
So nun wisst Ihr in etwa wie ein Spannungsteiler funktioniert und wozu sich dieser unter anderem nutzen lässt. Mit diesem Wissen wollen wir nun Widerstandswerte für den Spannungsteiler finden um die Spannung eines LiPo-Akkus messen zu können. Dessen Ladeschlusspannung liegt bei maximal 4,2V. Damit wir diese obere Spannung auch sicher messen können ist es ratsam eine etwas höhere Spannung zu wählen. Sagen wir einfach mal 4,3V.
Für die üblichen Spannungswerte von 4.3V, 5V, 9V und 12V sind im nächsten Absatz auch schon Beispiele für die Widerstände R1 angegeben. So könnt Ihr Euch das rechnen sparen. 🙂
Ziel ist es also nun die Widerstandswerte für R1 und R2 zu ermitteln.
Gleichzeitig wissen wir schon, dass U=4,3V und U2=1V sein muss. Damit bleiben zum Berechnen eines Wertes mit Formel 2 nur noch ein Wert den wir ermitteln müssen um den letzten offenen Wert berechnen zu können. Aber wir machen es uns hier einfach und legen diesen Wert einfach fest. 🙂
Wir setzen R2 erst mal auf 100kOhm und gucken welchen Wert wir für R1 erhalten.
Umgestellt ergibt Formel 1 inkl. des gesammelten Wissens nun
Formel 3:
In dieser Formel kennen wir alle (grünen) Werte bis auf R1 (rot). Also versuchen wir die Formel nach R1 umzustellen und erhalten folgendes:
vereinfacht und umgestellt ergibt sich:
und das gleiche entsprechend eingefärbt:
In dieser Formel kennen wir nun alle grünen Werte und der gesuchte (rote) Wert steht brav auf der rechten Seite des Gleichheitszeichens. 🙂
Durch Einsetzen lässt sich nun der gesuchte Wert für R1 berechnen:
Es ergibt sich für R1 ein Wert von 330kOhm. Wenn wir also den auf der Platine des Wemos D1 Mini verbauten 220kOhm Widerstand gegen einen 330kOhm Widerstand ersetzen erweitert man den maximal messbaren Spannungsbereich von 3,3V auf 4,3V und kann somit auch den kompletten Spannungsbereich eines LiPo-Akkus messen. 🙂
Formel zur Berechnung:
- Dabei ist U2 immer 1V
- U ist die gewünschte maximal messbare Spannung z.b. 4,3V
- R2 solltet Ihr einfach festlegen. Am besten in einem bereich von 10kOhm bis 100kOhm um den Strom über den Spannungsteiler gering zu halten.
Beispielwerte für Maximalspannungen und die dazugehörigen Widerstandswerte
Die folgenden Widerstandswerte könnt Ihr verwenden um die maximal messbare Spannung des ADCs auf die angegebene Spannung zu erweitern.
Maximal messbare Spannung: 4,3V
R1=330kOhm, R2=100kOhm
Maximal messbare Spannung: 5V:
R1=400kOhm, R2=100kOhm
Maximal messbare Spannung: 9V:
R1=200kOhm, R2=25kOhm
Maximal messbare Spannung: 12V:
R1=275kOhm, R2=25kOhm
Die markierten 0805 Widerstände R1 und R2 könnt Ihr nun einfach gegen die von Euch gewünschten Widerstände austauschen. 🙂
Konfiguration in ESPEasy
In ESPEasy lässt sich die Umrechnung des ADCs in eine Spannung sehr komfortabel erledigen.
Stellt dazu einfach das Device “Analog input – internal” wie abgebildet ein.
Wenn Ihr eine andere Maximalspannung als 4.300V verwendet müsst ihr diesen Wert natürlich entsprechend anpassen. 🙂
Viel Spaß mit dem Projekt
Ich hoffe bei euch hat alles wie beschrieben funktioniert. Falls nicht oder ihr Fragen oder Anregungen habt lasst es mich in den Kommentaren bitte wissen. Ich trage dies dann ggf. in den Artikel nach.
Auch Ideen für neue Projekte sind immer gerne willkommen. 🙂
P.S. Viele dieser Projekte - besonders die Hardwareprojekte - kosten viel Zeit und Geld. Natürlich mache ich das weil ich Spaß daran habe, aber wenn Du es cool findest, dass ich die Infos dazu mit Euch teile, würde ich mich über eine kleine Spende an die Kaffeekasse freuen. 🙂
Hi, habe gerade deine Seite gefunden, dass ist genau das was ich suche. Wie baue ich das ganze auf, wenn ich die Widerstände extern machen will? Ich glaube ich bekomme das auf dem Wemos mit dem umlöten nicht hin.
Hey Mathias,
für welchen Spannungsbereich möchtest du den Spannungsteiler denn anpassen? Man kann den Spannungsteiler theoretisch auch durch das anlöten passender externer Widerstände verändern. Müsste man mal durchrechnen. Vllt. reicht es sogar einfach einen weitere Vorwiderstand (für den oberen Teil des Spannungsteilers) zu verwenden. 🙂
Hi und danke für deine Antwort. Ich möchte einen normale 18650 Zelle am Wemos messen die als Akku dienen soll. Möchte nur ungern am Wemos rum löten, da es ja sehr klein ist. Würde gerne einfach nur zwei Wiederstände davor bauen wenn das geht?
Hey Mathias,
das müsste man sogar mit nur einem 100k Widerstand hinbekommen. Den musst du dann so verschalten:
A0–>100k_widerstand–>LiPo_plus | LiPo_minus–> GND
Dann müssten 3,2V an den beiden Vorwiderständen abfallen und somit genau 1V an dem “R2”. Lange rede kurzer Sinn: 4,2V am LiPo würden dann dem ADC-Wert von 1023 entsprechen. Bei den hohen Widerständen und den entsprechenden Toleranzen ist die Messung wahrscheinlich nicht super genau. Aber es reicht auf jeden Fall aus um den Füllstand des LiPos zu erfassen. 🙂
Denk dran, dass der Zusammenhang zwischen LiPo Spannung und “Füllstand” nicht komplett linear ist. Und ich würde die Messwerte auch über einen gleitenden Mittelwert etwas “glätten”. Sonst könntest du bei höherer Belastung (und dadurch Spannungseinbrüchen der Akkuspannung) einen “falschen Alarm” bekommen. 🙂
Hoffe es ist verständlich erklärt.
Beste Grüße
Fab
Hi! Du hast wirklich eine tolle Seite aufgebaut. Sehr informativ und kleinschrittig erklärt. Arbeite grade zum ersten Mal mit einem Wemos und bin bei meiner Recherche zum ADC auf dein Tutorial gestoßen.
Ich möchte einen Füllstandsensor für meine Zisterne auslesen. Diese misst die Wassersäule und lässt je nach Füllhöhe 4-20mA durch. Versorgt wird er mit 24V. Hast Du einen Tipp, wie ich den Eingang vom Wemos dafür ummodeln könnte?
Alles Gute, Martin
Hey Martin,
Danke. 🙂
Im Prinzip brauchst du einen passenden Widerstand. Der ADC des Wemos Breakout boards kann Spannungen von null bis 3,3V messen. Mithilfe eines Widerstands kannst du das “Stromsignal” deines Sensors in eine Spannung umwandeln. Ich habe das mal überschlagen. Ein 175Ohm Widerstand sollte passen.
Verschalten müsstest du das dann folgendermaßen. (Die zick-zack-linie soll den Widerstand darstellen.) Ich würde dir zusätzlich noch empfehlen vor dem ADC einen hochohmigen (z.B 10k) Widerstand zu schalten. 🙂
Sensor_signal 4-20mA
|
+————–ESP_ADC
|
\
/ 175 ohms
\
/
|
|
|
|
|
GND
Wenn du möchtest gib gerne Bescheid ob es geklappt hat. 🙂
Ach und an dem ADC solltest du dann eine Spannung proportional zum Stromfluss messen können. Dabei gilt die Formel U=R*I (das ist das ohmsche Gesetz). R ist dabei der Widerstand (also 175Ohm), I der Strom des Sensors (also ein Wert zwischen 4-20mA) und U ist die Spannung die dann am ADC gemessen wird bzw. über den Widerstand abfällt. Du kannst die Schaltung auch ohne den Wemos angeschlossen zu haben testen. Dazu einfach die Spannung mit einem Multimeter messen. 🙂
Beste Grüße
Fabian
Hi Fabian,
VielenDank für die Hilfe!
Hab als Widerstand einen Präzisionstrimmer genommen, um die Spannung zu kalibrieren.
Klappt soweit super, allerdings springen die Werte des ADC plus/minus 5 Punkte. Hab schon einen 100n gegen Masse zum Stabilisieren gesetzt, das hilft aber nur bedingt.
Wenn ich die mA des Sensors so messe, ist dieser Wert stabil. Hängt am ADC des Wemos.
Hast du einen Tipp, wie ich das noch besser glätten kann?
Beste Grüße, Martin
Hey Martin,
freut mich, dass es geklappt hat. Gute Idee mit dem Präzisionstrimmer. 🙂
Eine Idee wie du das noch besser glätten könntest (in Software) wäre ein gleitender Mittelwert.
Das ist eigentlich ein gängiges Verfahren, wenn man ein Signal hat, dass man entsprechend schnell einlesen kann.
Dazu ließt du den ADC einfach mehrmals aus (z.B. 100 mal) und berechnest dann den Durchschnitt davon. Kleine Abweichungen sollten dann eigentlich ausgeglichen werden und nicht mehr auffallen. 🙂
Beste Grüße
Fabian
Hi,
Danke für Deine Tolle info Seite 🙂
War bestimmt viel Arbeit.
Kann man das direkt im Wemos in espeasy
umrechnen in Prozent?
Gruß Heiko
Hey Heiko,
vielen Dank. Ja die eine oder andere Stunde hab ich hier schon investiert. 😀
Das müsste gehen ja. Guck mal hier gibt es einen Artikel der dir weiterhelfen könnte: https://www.letscontrolit.com/wiki/index.php/EasyFormula
Beste Grüße
Fabian
Hi Fabian, Great article here!! well done 🙂
I have a wemos d1 mini with its original smd resistors R1 220kOhm and R2 100kOhm
I want to measure voltages up to 29.4V (7s battery)
so which resistors you think its better to pick?
solution1= R1 300kOhm + R2 10kOhm (up to 32v) least efficient but best accurate
solution2= R1 680kOhm + R2 20kOhm (up to 36V) low efficient medium accuracy
solution3= R1 470kOhm + R2 10kOhm (up to 49v) = most efficient but least accurate
Please do the math and help me pick the best solution.
Thanks 🙂
Hi Nick,
thanks. 🙂
To be honest I would go with solution1. Of course the ~9micro amps could be anyoing (depending on your usecase) but in most cases they shouldnt bother that much.
Or do you plan to build something where this 9µA could be problematic? 🙂
Best regards
Fab
I will just use Wemos D1 Mini with tasmota to monitor my 24V (7s battery) that is charged with a solar panel. HUUUGE thanks for the feedback 🙂
Sounds cool, I think in this case you dont have to care so much about the 9µA 🙂
Good luck with the project. 🙂
Best regards
Fab
RE edit
or you can recommend another combination. I have those metalic resistors: 10 Ω, 22 Ω, 47 Ω, 100 Ω, 150 Ω, 200 Ω, 220 Ω, 270 Ω, 330 Ω, 470 Ω, 510 Ω, 680 Ω, 1K Ω, 2K Ω, 2.2K Ω, 3.3K Ω, 4.7K Ω, 5.1K Ω, 6.8K Ω, 10K Ω, 20K Ω, 47K Ω, 51K Ω, 68K Ω, 100K Ω, 220K Ω, 300K Ω, 470K Ω, 680K Ω, 1M
Hallo Fab,
hab diesen Artikel gerade nachvollzogen, und da haben sich leider ein paar Fehler eingeschlichen…
1.
Formel 2 ist falsch!
Statt Rsum / R2 + U2 = U muß es heißen Rsum/R2 * U2 = U
Unabhängig davon, dass die darunter liegende Zeile rechnerisch nicht stimmt.
330/100+1 wäre 4,3 … und die Einheiten stimmen auch nicht (kOhm/kOhm kürzt sich weg)
Des weiteren: Woher kommen die 330 kOhm? R1=220 kOhm und R2 = 100kOhm –> somit Rsum = 320 kOhm und nicht 330 kOhm
Mit diesen Ohmwerten (220 und 100 kOhm) kommt man am ADC auf über 1 Volt …nämlich 1,03 Volt
Ob das schon schädlich ist für den analogen Eingang, vermag ich aber nicht zu beurteilen.
2.
Formel 3 ist soweit ok, jedoch wurde sie nicht aus Formel 1.2 hergeleitet sondern aus Formel 1
(hat natürlich weiter keinen Einfluß auf die weiteren Rechenwege…. nur fürs Verständnis erwähnt)
3.
Den berechneten Wert für die 175 Ohm (Nachfrage von Martin bzgl. Füllstandssensor) kann ich irgendwie nicht nachvollziehen. Nach meinen Berechnungen läge der Wert für den Widerstand so bei 52 Ohm…
Bitte meinen Kommentar nicht falsch verstehen….
LG Ralph
Hi Ralph,
danke für deine Hinweise. Habe die Fehler welche ich nachvollziehen konnte korrigiert. 🙂
zu 1. Was meinst du mit die Einheiten stimmen nicht? Da sich die kOhms wegkürzen bleibt V über: [kOhm/kOhm*V=V] So steht es dort doch auch oder?
zu.3. Deine Berechnung bezieht sich auf einen maximal messbaren Spannungswert von 1V. Der Wemos D1 Mini (den Martin in dem Kommentar anspricht) ist ein Breakoutboard für den ESP8266. Darauf ist dem ADC ein Spannungsteiler vorgeschaltet (welchen er explizit nicht ändern wollte). Deswegen passen die 175 Ohm ganz gut zu dem erweiterten Messbereich (bis 3,3V) des Wemos D1 Mini. 🙂
Ach kein Problem. Ich bin ja froh, wenn jemand Fehler findet und mir dann auch bescheid gibt. 🙂
Danke und beste Grüße
Fabian
Hallo, ich weiß das ganz steht hier schon ein wenig aber für mich wäre für ein Wohnmobil die Batterieüberwachung wichtig. Ich hätte jetzt als Widerstände 1MOhm und 470k genommen. Bin ich da auf dem richtigen Weg? Ich will des weiteren auch mit Deep Sleep arbeiten. Es geht an sich eigentlich nur darum die Batterie vor dem Tiefentladen zu bewahren und mich informieren zu lassen. Eine Lastabschaltung ist bisher nicht geplant. Schön wäre es wenn es ein Möglichkeit gäbe die Batterie im Fall der Fälle ggf laden zu können.
Hi Sascha,
guck mal in den Abschnitt mit den Beispielwerten. Da habe ich auch für 12V eine Widerstandskombination angegeben. 🙂
Beste Grüße
Fabian
Hallo, endlich habe eine guten Internetauftritt gefunden.
Ich teile viele Themen mit Dir.
Ich beabsichtige eine spannungsgesteuerte Solar-Überschuß Reglung zu bauen.
z.Z. messe ich die Leistung der Solarmodule und schalte bei einem bestimmten Wert einen Verbraucher dazu und an. Das mache ich über eine ESP 8266 und ein Mosfet ( IXFK44N50P ). Ich habe die Module so ausgelegt, dass ich Heizung oder Schaltnetzteile (230V) damit betreibe. Das Ganze ohne Wechselrichter.
Meine Frage: mit einem Spannungsteiler von 1,1Mo + 47Ko komme ich auch auf ca. 1V. bei einer Eingangsspannung von DC 230V. Ich verstehe nicht die Ausage, man darf nur max 42V am ESP messen.
Hi Uwe,
das was du dort vor hast ist Lebensgefährlich. Besonders hohe Gleichspannungen (dazu noch nicht abgesichert) sind Lebensgefährlich! Diese Überschussregelung MUSST (!) du anders lösen.
Auch wenn das technisch theoretisch möglich wäre ist es Lebensgefährlich und im höchsten Maße Fahrlässig das so umzusetzen. Bitte bedenke, dass schon Menschen gestorben sind bei solchen Aufbauten. Auch die Menschen die dachten, dass sie es besser wüssten.
Ich weiß nicht wie du auf die 42V kommst, aber sehr wahrscheinlich bezieht sich der Wert auf die maximal zulässige Berührungsspannung. Infos dazu findest du hier: https://de.wikipedia.org/wiki/Ber%C3%BChrungsspannung
Wenn du so eine Überschuss-Regelung bauen willst empfehle ich dir einen anderen Ansatz: Messe die aktuelle Erzeugungsleistung des Panels mit einer Wlan fähigen smarten Steckdose und schalte die Verbraucher dann in Abhängigkeit zum aktuellen Leistungswert.
Nochmal: Jegliches hantieren mit hohen Gleichspannungen ist Lebensgefährlich. Du solltest dieses Risiko auf keinen Fall eingehen!
Beste Grüße
Fabian
Hi,
Danke für Deine Antwort.
Ich betreibe dieses Hobby seit der Enstehung des Transistors, also ca. 50 Jahre.
Danke für Deine sicherheitsrelevanten Tipps, aber man kann noch so Vorsichtig sein, es passiert immer mal und wenn von einem ELKO.
Nun zum Thema:
Es gibt wenig fertige Elektronik für diese hohe Gleichspannung, deshalb muss ich das meiste selber bauen.
Ich verwende Fhem und steuere und überwache Alles damit.
Das einzigste was für mich Neuland ist, ist Spannungsmessen am ESP 8266.
Schade das Du so wenig auf meine Frage eingehst.
Hi Uwe,
ich bin auf deine Frage eingegangen: Nämlich insofern, dass das lebensgefährlich ist was du dort vor hast. Das ist auch der Grund weshalb es so wenig zu diesem Thema gibt.
Außerdem ist die Messung der Ausgangsspannung einer Solarzelle auch nicht geeignet um auf deren aktuelle Leistung zu schließen. Die Ausgangsspannung ist nicht linear zur Leistung. Besonders wenn ein MPP Tracker verwendet wird kann sich der Arbeitspunkt so verschieben, dass die Ausgangsspannung mit steigender Leistung sogar kleiner wird.
Ich möchte dir nicht zu nahe treten, aber die Dauer wie lange man etwas macht sagt nichts darüber aus wie gut/sicher man ein Thema beherrscht. Stichwort “Betriebsblindheit”.
Ich bitte dich also nochmal ausdrücklich dein Problem anders zu lösen und betone nochmal, dass es Lebensgefährlich ist was du vor hast.
Ich helfe dir gerne das Problem anders und sicher zu lösen. Dazu musst du aber genauer beschreiben was du eigentlich vor hast.
Beste Grüße
Fabian