Heimautomation mit Arduino Teil 1

Einleitung

Wir haben vor kurzem ein Haus gebaut und sind mittlerweile auch schon eingezogen. Als Hauseigentümer bin ich verpflichtet für die Kosten von Strom, Wasser und Gas aufzukommen. Daher bin ich natürlich daran interessiert, wie viel wir verbrauchen. Ziel ist es, eine detaillierte Auflistung der Verbräuche zu erstellen, sodass man auf einem Blick sehen kann, wie viel Strom/Wasser/Gas man pro Tag, pro Woche, pro Monat oder pro Jahr verbraucht. Natürlich könnte ich hingehen und den Zählerstand täglich notieren um so eine historische Erfassung zu schaffen. Dies ist allerdings äußerst unpraktisch …

In diesem Projekt geht es darum, Sensordaten automatisch zu erfassen und auszuwerten. Im Mittelpunkt stehen dabei Sensoren für die Erfassung von Zählerständen von Strom,Wasser und Gas.

Sensoren

  • Stromzähler (allgemein)
  • Stromzähler (Heizung, Umwälzpumpe, etc.)
  • Stromzähler (Waschmaschine)
  • Stromzähler (Wäschetrocker)
  • Wasserzähler (allgemein)
  • Wasserzähler (Garten)
  • Gaszähler

Stromzähler

Bei uns wurde ein moderner Stromzähler mit LED Impulsanzeige installiert. 10.000 Impulse bedeuten, dass 1kW Strom verbraucht wurde. Um den Zählerstand zu erfassen muss ich also nur die Impulse zählen. Technisch wollte ich es so einfach wie möglich machen, daher werde ich die Impulse mit einem Fotowiderstand (LDR) erfassen. Ein LDR ist zwar etwas träge aber diesem Fall völlig ausreichend. Den LDR schließe ich an einem Analog-Pin des Arduinos an und lesen den Wert in einer Schleife aus.

Da ich noch die Stromverbräuche von Heizung, Waschmaschine und Trocker erfassen wollte, habe ich mir bei der Strominstallation noch 3 weitere Stromzähler einbauen lassen. Diese Stromzähler erfassen dann dediziert die einzelnen Verbräuche der o.g. Geräte. Es handelt sich dabei um einfache Wechselstromzähler für den Hutschienen-Einbau. Die Stromzähler haben neben der Impuls-LED ebenfalls einen S0 Ausgang. Um es einfach zu halten werde ich auch für diese Stromzähler den LDR-Sensor nehmen. Für die S0-Schnittstelle müsste ich sonst direkt an den Stromzähler heran.

Somit werden alle Stromzähler über die Analog-Eingänge des Arduinos erfasst. Da der Arduino sonst nichts zu tun hat, mache ich mir über die Peformanz keine Sorgen.

Wasserzähler

Der Wasserzähler hat bereits einen Impulsausgang (Magnet/Reedkontakt). Diesen muss ich nur mit einem Digital-Eingang des Arduinos verbinden und intern den Status erfassen und ggf. einen Zähler inkrementieren.

Gaszähler

Ich habe damals einen sehr alten Gaszähler bekommen und habe den direkt durch einen etwas moderneren austauschen lassen. Die neueren Gas-Zähler bieten die Möglichkeit, einen Reed-Kontakt anzubringen, um so den Zählerstand zu erfassen. Bei meinem Modell wird für jede 10qm Gas ein Impuls erzeugt. Der Reed-Kontakt wird wie beim Wasserzähler über einen Digital-Eingang angeschlossen.

Arduino

Wie oben erwähnt verwende ich den Arduino für die Erfassung der Zählerstände. Darüber hinaus speichert der Arduino die aktuellen Werte jede Stunde in den EEPROM ab, sodass die Werte bei einem Stromausfall nicht verloren gehen.

Beim jedem Neustart des Arduinos wird ein Zähler hochgesetzt (startup counter), sodass festgestellt werden kann, ob der Arduino 'resettet' wurde. Dadurch kann z.B. ein Stromausfall festgestellt werden. Nach einem Reset werden ebenfalls die Zählerstände aus dem EEPROM geladen.

Da die Zählerwerte nur jede Stunde in das EEPROM geschrieben werden, kann es zu einer Asynchronität zu den tatsächlichen Zählerständen kommen. Weitere Gründe könnten aber auch z.B. nicht erfasste Impulse sein.

Um eine (Re-)Synchronisiation zu ermöglichen muss der Arduino eine Möglichkeit bieten, die Zählerstände manuell setzen zu können. Beim manuellen Setzen eines Zählerstandes wird dieser auch direkt in das EEPROM geschrieben.

Damit der Arduino mit einem Host (z.B. Server) kommunizieren kann, muss dieser ein einfaches Protokoll implementieren. Die Kommunikation erfolgt über die serielle Schnittstelle des Arduinos.

Ich habe ein (sehr) einfaches Protokoll entwickelt und habe es hier beschrieben:

 
 
projects/home_automation_arduino_1.txt · Last modified: 2011/01/20 11:28 by adminuser
Recent changes RSS feed Creative Commons License Valid XHTML 1.0 Valid CSS Driven by DokuWiki
Drupal Garland Theme for Dokuwiki