• Start-Seite 
  • Uhren

    Clocks

    • Digi-Clock
    • Große Wort-Uhr
    • Mini Wort-Uhr
    • Vertikale Wort-Uhr
    • Voltmeter-Uhr
    • Linear-Uhr
    • Digitale Sanduhr

    • Marble-Clock

  • Treppen-Fader
  • Energie-

    Verbrauch

  • Laundrino
  • LED-Cube
  • Müllduino
  • Snowduino
  • Bewegungs-

    melder

  • ioBroker-DHT22

  • ioBroker-

    Laufschrift

  • ioBroker LED-

    Thermometer

  • ioBroker-OLED

  • ioBroker

    Multi-OLEDs

  • ioBroker

    Mini-Mülltonne

  • Ball on Plate

  • .
  • Sonstige

    Basteleien

    • LED-Handlauf
    • Beleuchtete Urlaubskarte
    • Solar-Tracer
    • Mendocino Motor
    • 12V Solarlampe
Stromzählermessung

Stromzählermessung mit Arduino


Diagramm - Verbrauchsmessung


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)

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:
Es gibt von ELV auch einen Bausatz Mini-Reflexlichtschranke MRL 1, damit sollte die Impulserfassung ebenfalls möglich sein. Die Platine ist bereits komplett bestückt (keine SMD-Bauteile selbst löten) und die einzige Bastelarbeit beschränkt sich auf das Anlöten des Opto-Reflexkopplers CNY 70.

Die Technik schreitet aber voran und dank des Arduino-Projektes und seiner weltweiten Community muss man sich nicht mehr mit Assembler herumplagen, um einen Microprozessor zu programmieren.

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

Bild 2
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:


Wie eingangs erwähnt, entsprechen 75 Umdrehungen der Zählerscheibe 1kWh.
1 Umdrehung entspricht demnach:    1 U = 1 kWh 75 = 0,013333333333333333333 kWh
Somit kann man über aufaddieren der Umdrehungen (bzw. Impulse) den Tagesverbrauch ermitteln.

Der Momentanverbrauch ist abhängig von der Drehgeschwindigkeit der Scheibe, d.h. je mehr Energie man verbraucht, desto schneller dreht sich die Scheibe. Die Drehgeschwindigkeit kann man aus der Zeitspanne ermitteln, welche zwischen 2 aufeinander folgenden Impulsen auftritt.
Der Arduino hat eingebaute Timer, die Zeiten in Millisekunden (ms) messen können.
Man muss also die Zeitdifferenz zwischen 2 Impulsen in Millisekunden erfassen.

Wieder etwas Mathematik - die Leistung läßt sich anhand der Umlaufzeit wie folgt erfassen:

P = 1 t Imp ms ⋅ 1 75 kWh Imp ⋅ 60 ⋅ 1000 ⋅ 60 W h ⋅ 1000 W kW = 1 t 1 ms ⋅ 3600 ⋅ 1000 75 Ws = 1 t 1 ms ⋅ 48000000 Wms

also: P = 1 t 1 ms ⋅ 48000000 Wms

Misst man für einen Umlauf der Zählerscheibe z.B. 120 Sekunden = 120 * 1000 ms = 120000 ms ,

ergibt das: P = 1 120000 1 ms ⋅ 48000000 Wms = 400 W

Mit anderen Worten:
Der Arduino dividiert die Konstate 48000000 durch die Zeitspanne zwischen 2 Impulsen, um den Momentanverbrauch (in Watt) auszugeben. (Anm: Die Konstante (48000000) wurde im unten verlinkten Sketch entspr. eingebracht)
Für Zähler mit anderen Zählerkonstanten als 75U/kWh muss die Formel entspr. angepasst werden !



Bild 3
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:
Es wird mit gesendet und in der PHP-Datei wird geprüft, ob das geheimwort korrekt ist, nur dann werden die Daten übernommen
Für bessere Sicherheit, sollte man allerdings zusätzliche Verschlüsselungsmethoden einsetzen)

Der Counter dient nur zu Kontrollzwecken.
Mit Hilfe des Counters kann man sehen, ob alle Datensätze übermittelt wurden, oder ob evtl. einer fehlt.
Dazu entspr. TagesLog-Datei in Browser oeffnen und kontrollieren, ob die Datensaetze fortlaufend vorhanden sind.

Anmerkung: Durch Vergleich der Log-Dateien vom Vortag und aktuellem Tag, konnte ich mittels Counter feststellen, daß - bedingt durch die sog. Zwangstrennung meines Internetanschlusses - um 00:00 Uhr, manchmal ein Datensatz nicht übermittelt werden konnte.
Der letzte Counterwert im Vortages-Log war dann z.B. 2785 und der erste Counterwert im aktuellen Tageslog 2787. Es fehlte also Counterwert 2786. Leider läßt sich das nicht vermeiden, aber bezogen auf die Gesamttagesenergie fallen 0,013 kWh nicht allzu sehr in's Gewicht.


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},
{"datum": "23.10.2013 00:07:32", "counter":5816, "value":0.219},
{"datum": "23.10.2013 00:11:13", "counter":5817, "value":0.217},
{"datum": "23.10.2013 00:14:34", "counter":5818, "value":0.238},
{"datum": "23.10.2013 00:16:39", "counter":5819, "value":0.381},
{"datum": "23.10.2013 00:18:57", "counter":5820, "value":0.348},
{"datum": "23.10.2013 00:21:17", "counter":5821, "value":0.341},
{"datum": "23.10.2013 00:23:37", "counter":5822, "value":0.342},
{"datum": "23.10.2013 00:25:57", "counter":5823, "value":0.343},


Bild 4
Der Tagesverbrauch wird ermittelt, in dem einfach die Anzahl der Zeilen in der Tages-Logdatei via PHP summiert wird, denn jeder Impuls erzeugt eine neue Zeile und pro Impuls wurden - wie oben berechnet - 0,013333333333333333333 kWh verbraucht,
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:
  1. Impuls-Ausgang (5V) des EM 100 wird über einen Pulldown-Widerstand mit Digital PIN 2 des Arduino verbunden.       (PIN 2 ist interruptfähig, Interrupt = 0)

  2. Eine LED wird mit Vorwiderstand an PIN 6 angeschlossen, diese blitzt zur optischen Kontrolle kurz auf, wenn Daten erfasst und gesendet werden.
    (Bild 4: In das Gehäuse, in dem der Arduino untergebracht ist, wurde ein Ausschnitt gesägt und dieser mit einer durchsichtigen Acryl-Scheibe verschlossen. Durch die Scheibe kann man die LED aufblitzen sehen und auch die LED's des Ethernet-Shields sind sichtbar.)
Hier nun das Ergebnis, die grafische Darstellung des Energieverbrauches:
Diagramm - Verbrauchsmessung

Hinweis:
Durch Anklicken des jeweiligen Tages-Balkens im Monats-/Jahresdiagramm wird das Diagramm
des kompletten Tagesverlaufes in einem neuen Fenster geöffnet.


Vor- und Nachteile der verwendeten Lösung:
Vorteil:    Geringe Hard- und Softwareanforderungen beim Arduino.
Nachteil: Keine Datenübermittlung bei Ausfall der Internetverbindung.


Downloads:
Arduino-Sketch zur Stromzählererfassung :    stromzaehler_daten_ins_web.ino
PHP-Datei zur Übernahme der Daten und anschl. Umwandlung in eine Text-Datei :     data2text.zip
Schliessen
Aktuelles Wetter in Heinzenberg / Taunus
Impressum
Datenschutzerklärung