Zufälliges Zitat

Wenn wir die Einzigen im Universum sein sollten, wäre das eine ziemliche Platzverschwendung.

— Contact, 1997

Stromzählung mit Arduino

ACHTUNG: dieser Artikel ist schon ziemlich veraltet! Bitte nach neuen Artikeln suchen!

Nachdem wir im letzten Abrechnungszeitraum eine deutlich zu hohe Stromrechnung hatten, möchte ich nun unseren Stromverbrauch etwas im Auge behalten.

Ich habe gerade bei Watterott folgende Dinge bestellt:

  • Duemilanove
  • QTR-1A Abstandssensor
  • RF Link Sender – 434MHz
  • RF Link 2400bps Empfänger – 434MHz
  • Arduino Gehäuse

Ich plane einen Arduino im Stromverteilerschrank zu platzieren und mit dem Abstandssensor versuchen, die silberne drehende Scheibe im zu beobachten und die Daten per RF Sender an einen zweiten Arduino zu übertragen. Eine direkte Verbindung zwischen den beiden, z.B. per Ethernet geht leider nicht, da im Schaltschrank kein Netzwerk ist.

Wenn die Daten im zweiten Arduino ankommen, werde ich sie dort zählen und per -Tool in Grafiken darstellen. Damit sind die Grafiken per Browser abrufbar. Die Erzeugung der -Grafiken erledigt meine Synology Diskstation. Siehe dazu auch das Temperatur-Messprojekt.

Die silberne Scheibe dreht sich 75 mal pro Kilowatt-Stunde – das sollte also eigentlich eine genügend genaue Ablesung ermöglichen. Ich hoffe somit etwas genauer feststellen zu können, zu welchen Zeiten welche Menge Strom verbraucht wird.

Falls das mit der Scheibe nicht funktioniert wird evtl. Versuch 2 so aussehen, dass ich einen Stromzähler mit S0-Anschluss in den Schrank einbauen lassen werde. Dieser S0-Bus – nicht zu verwechseln mit dem ISDN S0-Bus – liefert 800 Impule pro Kilowatt-Stunde. Die Übertragung würde dann analog Plan 1 erfolgen.

Ich erwarte die Lieferung in den nächsten Tagen und hoffe, am Wochenende schon mehr sagen zu können.

24.02.2011: Die Lieferung ist angekommen und ich habe die ersten Experimente gemacht.

Versuch 1:

Zuerst habe ich versucht, die Sende- und Empfangsmodule zum Laufen zu bringen. Leider war das nicht wirklich erfolgreich. Das Empfangsmodul liefert die ganze Zeit über komische Werte an seinem Output. Wenn ich am Sendemodul die Datenleitung zwischen 0 und 1 wechsel, dann kommt auch kurz beim Empfänger was anderes an – aber nicht auf Dauer. Ich werde nun versuchen, ein zu besorgen, um das mal richtig zu messen.

Versuch 2:

Der Reflexsensor. Als SMD-Ding auf eine winzigen Platine ziemlich schwierig zu handhaben. Ich habe das Teil also an einen Analog-Port vom Arduino gehängt und er liefert auch schöne Werte. Ich habe dann den Sensor auf unseren Stromzähler geklebt und versucht, die drehende Scheibe „zu sehen“. Nachdem ich das Licht ausgemacht habe, konnte ich sogar Werteänderungen sehen, wenn das rote Stück der Drehscheibe vorbeikommt. Das war also im Prinzip schon mal positiv…

Nun müsste ich ein kleines Gehäuse bauen, um das Licht von aussen abzuschirmen und den Sensor gut auf die Scheibe zu richten. Dann noch eine Flanken-Erkennung programmieren, die den Anfang und das Ende des roten Bereiches erkennt und dann könnte der Arduino schon mal zählen. Wenn dann die Funkverbindung noch klappt, könnte ich die Werte an den anderen Arduino funken.

 

25.02.2011: Der Tag des Erfolges…

Dank einem Arbeitkollegen hatte ich heute ein Oszilloskop zur Verfügung (Bild 3) – Danke Gerhard! Nach kleinen Anfangsschwierigkeiten mit dem Gerät – man sollte nicht versuchen, Gleichspannung zu „sehen“, wenn das nur Wechselspannungen anzeigen kann… – ging es dann endlich.

Ich habe nun meine beiden Arduinos (Bild 3 +4) im Einsatz, da ich einem alleine nicht getraut habe – wer weiss, wie die so Daten fliessen – am Ende einfach nur „so“ statt per

Ich habe also zuerst mal einen Arduino mit ca. 1 KHz zum „Blinken“ gebracht und das als Input für den Sender genommen. Den Output des Empfängers habe ich an den Oskar angeschlossen – und hatte ein prima Rechtecksignal!

Dann als nächstes aus dem Internet die VirtualWire-Bibliothek geladen, den einen Arduino als „Receiver“, den anderen als „Sender“ und ich hatte ein „hello“ auf dem Empfänger! Perfekt!

Dann war es ein leichtes, den Reflexsensor noch dazu zu packen und die Werte auf 0-256 zu normieren und dem Sender zu übergeben. Und die Werte kommen brav am Empfänger an (siehe Bild 5).

12.03.2011: Es läuft und läuft und läuft…

Und so schaut es nun aus:

Der Peek ab 22:00 ist der Wasserboiler, um 5 Uhr nochmal, um 10:00 der Backofen – nur der „Ruhestrom“ in der Nacht bei 500 Watt ist etwas hoch – da muss ich noch mal suchen, was hier Strom verbraucht…

Leider sind die Werte bei wenig Verbrauch sehr sprunghaft. Aktuell berechne ich schon Mittelwerte über 5 Minuten und übergebe die an das RRD-Tool zum Speichern.

 

Bilder nach dem Break…

Bild 1: Stromzähler mit Sensor aufgeklebt

 

Bild 2: Reflexsensor und Arduino

 

Bild 3: Oszilloskop mit Empfänger-Arduino

 

Bild 4: Sender-Arduino mit Reflexsensor

 

Bild 5: Serielle Konsole am Empfänger Arduino

11 comments to Stromzählung mit Arduino

  • Jürgen

    Hallo, gibt es zu dem Projekt auch einen Quellcode für den Arduino, wenn ja, sorry wäre es möglich mir den zukommen zu lassen. Vielen Dank für die Mühe. Gruß Jürgen

  • Reinhard

    Hallo,
    sehr interessanter Artikel !
    Ich denke auch über die Strommessung mit Arduino nach, würde aber eher einen Strommesser mit S0 Ausgang nutzen (z.B. ). Hast du darüber schon mal nachgedacht?
    Würde mich über einen Austausch freuen. Mein primäres Problem ist aber noch zu lösen: der Stromzähler bzw. Haupstrang, befindet sich im Keller – mit Funk durch Betondecken zur 2. Etage ist nicht zu machen, und die Waschmaschine will ich natürlich mitmessen. Ich denke momentan über eine Datenübertragung über PowerLine nach (z.B. http://www.ulrichradig.de/home/index.php/projekte/pl-modem )

  • marcus

    Ja ich wäre auch mal interessiert an dem Code is ja schon fast nen Jahr her aber wäre schon wichtig.

  • marcus

    Wie haste eigentlich die Ausrichtung mit dem Sensor gemacht das will bei mir irgendwie nichts erkennen?

    • Ich habe einen kleinen Sketch geschrieben, der einfach die analogen Messwerte über Serial ausgibt. Dann den Backofen einschalten – das bringt das Rad am schnellsten zum Drehen – und dann den Sensor vor das Fenster halten und die Werte beobachten. Irgendwann findet man dann den richtigen Punkt und dann schnell mit Klebestreifen den Sensor ankleben. Die gemessenen Werte kommen dann in den echten Sketch als „Threshold“ für die Messung.

    • CoRe

      Hi marcus,
      hat das mit deiner Ausrichtung geklappt?
      Wenn ja, wie?

      Gruß

  • CoRe

    Hi,
    es haben nun schon mehrere Leute nach dem Quellcode gefragt.
    Wieso gehst du nicht auf die Anfragen ein?
    Hardware ist bereits vorhanden.

    Und bei dem Code wollte ich (und anscheinend auch andere) das Rad nicht neu erfinden.

  • CoRe

    Hi,
    vielen Dank für die Mail.
    Das Wiki hatte ich völlig übersehen 😉

    Ich habe nun den gleichen Testaufbau (bis auf die Übertragung per RF12) realisiert und lasse mir die Werte über das Ethernetmodul an meinen Webserver per Get übergeben.
    Soweit klappt alles so wie es soll.
    Nur die Ausrichtung des Sensors bereitet mir noch Probleme.
    Ich lese die Werte direkt aus dem Sensor aus (26-1099) und habe nun schon mehrere Möglichkeiten getestet, den Sensor an der Scheibe auszurichten.
    Entweder bekomme ich keinen stabilen „Ruhewert“ oder der Ruhewert ist stabil und sobald die rote Markierung eine Änderung anzeigen sollte, tut sich nichts.

    Der Sensor wurde schon direkt auf die Scheibe geklebt, mit Abstandshalter, mit totaler Abdunklung des Stromkasten und mit zusätzlicher Lichtquelle.
    Ich bekomme einfach keine eindeutigen Werte mit denen ich weiterrechnen kann.

    Hast du eventuell einen Tip, was ich noch testen könnte?

    Hatte schon überlegt die Werte auf 0-255 runterzurechnen, aber wenn ich schon bei einer Spanne von über 1000 keinen Unterschied sehe macht das auch keinen Sinn.

    Freue mich auf Unterstützung.

    • CoRe

      Achso.. was noch interessant wäre, laut deinem Sketch auf Github hast du eine Toleranz von 250-300.. Welcher Wert gibt dein Sensor bei Ruhe und welchen bei „Roter Markierung“ aus?

      Sind das deutliche Wertunterschiede oder eher gering (+-10 vom Ruhewert)

      • Mein Sensor ist eine Reflex-Lichtschranke, die selber per Infrarot leuchtet und das Signal wieder aufnimmt.
        Ich habe die Ausrichtung mit einer Videokamera gemacht – die können meistens Infrarot sehen. Also den Sensor vor die Scheibe gehalten, das mit der Kamera angeschaut und so lange die Position geändert, bis der Lichtfleck des IR-Senders genau die Scheibe getroffen hat.
        Dann gleichzeitig dabei die reinen analogRead-Werte auf einer Konsole beobachtet und danach das Programm entsprechend konfiguriert. War aber wirklich ein wenig „gefummel“….

        Die aktuellen Werte habe ich nicht (mehr): im Moment ist der Strommesser nicht aktiv, da ich den Arduino für was anderes gebraucht habe…

Leave a Reply

  

  

  

Please copy the string dV4ZJb to the field below: