Stromzählermessung mit Arduino
Wer nicht lang lesen mag, kann sich hier sofort das Ergebnis, die grafische Darstellung
des Energieverbrauches: Diagramm - Verbrauchsmessung ansehen. Mich hatte es schon länger gereizt, den Wechselstromzähler in unserem Haus zu monitoren. Leider handelt es sich dabei noch um einen Zähler mit rotierender Scheibe, einen sog. Ferraris-Zähler. Im Zähler rotiert eine Aluminiumscheibe, auf der eine rote Markierung angebracht ist. Lt. Zähleraufdruck entspr. 75 Umdrehungen einer Kilowatt-Stunde : 75U/kWh Es müsste doch möglich sein, diese rote Markieung "irgendwie" zu erfassen, die Umdrehungen zu zählen und somit Rückschlüsse auf den Stromverbrauch ziehen zu können. Jegliche Manipulationen am Stromzähler sind dabei natürlich ausgeschlossen, bzw. verboten. Vor einigen Jahren bot die Fa. Conrad ein System namens "Energy-Sensor ES-2" an, welches die rote Markierung mittels einer Infrarot-Reflexlichtschranke erfassen kann. Diese Lichtschranke wurde mit Klebestreifen (besser sind: Tesa "Power-Strips") auf der Glasscheibe des Zählers befestigt, es erfolgte also kein Eingriff in den Zähler. Leider ist das System wohl nicht mehr lieferbar. Von ELV gibt es aber ein baugleiches System, welches unter dem Namen EM 1000-WZ (siehe Bild 1) vertrieben wird. Dieses Sytem plus den zugehörigen "EM 1010 PC Energy Monitor" hatte ich mir vor ein paar Jahren gekauft, war aber nicht wirklich damit zufrieden. Die Erfassung der Impulse, welche beim "Vorbeidrehen" der roten Markierung erzeugt werden, funktionierte zwar, aber die nachfolgende Auswerung hatte so ihre Tücken: Ein Grund ist, dass die Impulse via Funkmodul von der Sendeeinheit zur Auswerteeinheit "EM 1010 PC Energy Monitor" gesendet werden. Es ist nur blöd, wenn der Stromzähler und die Sendeeinheit sich im Keller befinden und die Auswerteeinheit 2 Stockwerke höher am PC hängt - da kommt per Funk nichts mehr an. Also als "Workaround" die Auswerteinheit ebenfalls im Zählerraum aufgestellt. Jetzt wurden zwar die Impulse via Funk empfangen, aber unerklärlicherweise gab es dann und wann Aussetzer, welche die Auswertesoftware als sehr hohe Peaks interpretierte. Zweiter Workaround: Die Funkstrecke stillgelegt, d.h. sowohl Sende- als auch Empfangsmodul ausgelötet und stattdessen eine direkte Kabelverbindung zwischen Sender und Auswerteeinheit gelötet. Jetzt waren die Peaks zwar verschwunden, allerdings musste man nun die Auswerteeinheit jedes Mal vom Keller in den zweiten Stock schleppen, via USB an den PC stöpseln und dann per Software auslesen. Das Auslesen selbst konnte bisweilen schon mal bis zu 15 Min. dauern und die Auswertesoftware war m.E. auch nicht das "Gelbe vom Ei". Mit der Zeit wurde das Hochschleppen dann lästig und die kpl. Einheit fristete ab dann ihr Dasein in einer dunklen Ecke des Bastelkellers ;-)
Hinweis: Nach einer kurzen Einarbeitungszeit konnte ich mich dann auch über erste Erfolge (blinkede Leuchtdioden, Lauflichter, Temperaturmessungen, etc.) freuen. Vor ein paar Wochen fiel mir dann auch wieder das in Vergessenheit geratene EM-1000 Sytem in die Hände - mmmmh, das könnte man doch evtl. mit einem Arduino "verheiraten", um doch noch eine Erfassung des elektrischen Energieverbrauchs zu realisieren. Glücklicherweise besitzt das ELV-System einen zusätzlichen 5V-Impulsausgang, den man mit einem Pulldown-Widerstand direkt mit einem Eingang des Arduino verbinden kann. Gesagt, getan, EM 1000-WZ mit dem Arduino verbunden, einen kleinen Sketch ( so nennt man ein Arduino-Programm ) geschrieben und schon leuchtete eine Leuchtdiode am Arduino so lange, wie sich die rote Markierung der Zählerscheibe vor der Lichtschranke befand. Das sah also schon mal vielversprechend aus, doch wie nun diese Impulse auswerten ? Zum Einen wollte ich den momentan Energieverbrauch wissen und zum Anderen den Tages-, bzw. Monats-/Jahresverbrauch. Dazu bedarf es ein wenig Mathematik:
Soweit zur Theorie, jetzt galt es dieses in die Praxis umzusetzen. Ein entspr. Sketch wurde erstellt und über den seriellen Monitor konnte man die entspr. Ausgaben am PC sehen. Wie aber den ganzen Tag monitoren, bzw. es optisch darstellen ? Dazu wurde ein sog. Ethernet-Shield (= aufsteckbare LAN-Karte für Arduino) verwendet. über die LAN-Karte ruft der Arduino bei jedem eingehenden Inpuls eine PHP-Webseite (data2txt.php) auf und hängt an den Aufruf die entspr. Daten an, was im Prinzip so aussieht: http://www.DeinWebserver.de/energie/data2text.php?counter=12345&watt=598&key=geheimwort
( Der Parameter key=geheimwort ist ein kleines Sicherheitsfeature: Die PHP-Datei bereitet den Datensatz ein wenig auf und schreibt zusätzlich das aktuelle Server-Datum und die Server-Zeit in den Datensatz. Durch die Einbindung von Serverzeit- und datum konnte ich mir eine Echtzeituhr (RTC) auf dem Arduino ersparen. Anschl. fügt die PHP-Datei den Datensatz in eine Textdatei, benannt nach dem aktuellen Tagesdatum, z.B. 23_10_2013.txt, an. Ist noch keine Textdatei vorhanden, wird automatisch eine neue erstellt (durch Empfang des ersten Datensatzes nach 00:00 Uhr). Die Datensätze in der Tages-Datei sehen dann wie folgt aus:
{"datum": "23.10.2013 00:03:54", "counter":5815, "value":0.218}, also Tagesverbrauch = Anzahl Zeilen * 0,013333333333333333333 kWh. Die Datensätze können natürlich auch anders aufgebaut sein, bei mir werden sie in dieser Form benötigt, da ich die Daten mit PHP-Scripten und den amCharts aufbereite, um eine grafische Darstellung zu erhalten. Auf die einzelnen PHP-Scripte und Konfiguration der amCharts-JavaScripte einzugehen, würde hier jedoch zu weit führen. Zu den elektrischen Verbindungen am Arduino gibt's nicht viel zu sagen:
Hier nun das Ergebnis, die grafische Darstellung des Energieverbrauches: Diagramm - Verbrauchsmessung
Hinweis: Vor- und Nachteile der verwendeten Lösung: Vorteil: Geringe Hard- und Softwareanforderungen beim Arduino. Nachteil: Keine Datenübermittlung bei Ausfall der Internetverbindung. Zum Schluß der Arduino-Sketch zur Stromzählererfassung : stromzaehler_daten_ins_web.ino und die PHP-Datei zur übernahme der Daten und anschl. Umwandlung in eine Text-Datei : data2text.zip |