Gas Wasser Strom

 April 2009


-----
 

   

Ausgangssituation

Wieviel Energie ballern wir eigentlich grade durch? Und wieviel Wasser geht eigentlich bei drauf, wenn die Tochter mal wieder eine Dauerduschsession hat. Solche Fragen stellte meine Frau und ich war natürlich sehr gerne Bereit, diesen Fragen nachzugehen.  

  Die Idee war, an die Energiezähler Meßaufnehmer zu basteln und über einen Mikroprozessor die Umdrehungen zu zählen. Irgendwie müssen diese Zählerstände dann noch auf einem Display landen, so dass man den Verbrauch jederzeit sehen kann.  

   

Wasser

 

  Der Wasserzähler war am einfachsten: eine große Alu-Reflektorscheibe kommt einmal pro Liter an meinem Reflexsensor vorbei.  

[Bild(22.1k)]

Der Sensor ist in eine passend ausgesägte PVC-Platte im Klappdeckel montiert:  

[Bild(82.1k)]

Die Elektronik besteht aus einem Reflexkoppler MCA7, einem LED-Vorwiderstand un einem Pull-Up Transistor für den Fototransistor im Reflexkoppler. Auf eine Platine habe ich glatt verzichtet. Auf Zugentlastung dagegen nicht.  

[Bild(37.4k)]

Der Kram hat dann auch prima gar nicht funktioniert. Aus der Led kam ordentlich IR-Licht (konnte ich mit der Videokamera gut sehen) aber irgendwie war dieser Scheiß Reflexkoppler total blind. Irgendwann habe ich dann aus Verzweiflung mal den Fototransistor falsch rum gepolt und hatte plötzlich ein super Signal.  

  Das Datenblatt war aber auch merkwürdig:  

[Bild(25.7k)]

Warum geht die Liste nicht von 1..4? Merke: Dass Blatt ist falsch. Schreibe in die 1. Spalte 1,2,3,4, dann stimmts!
Ein mir bekannter Nachbauer hat einen anderen Koppler benutzt, der auch nicht funktionierte. Bis er dann den Transistor umgedreht hat.
Das scheint also ein übliches Problem zu sein. Daher kommt hier nochmal ein korrigiertes Bild zur Verdeutlichung:  

[Bild(14.2k)]

 

   

Gas

 

  Am Gaszähler habe ich es dann gleich richtig gemacht und auch eine kleine Platine spendiert:  

[Bild(62.2k)] [Bild(23.6k)] [Bild(54.9k)]

Der Reflexkoppler sieht einen kleinen Alufolienkleks, den der Hersteller freundlicherweise in die Rundung der 6 geklebt hat. Hier bekomme ich also einen Puls alle 10 Liter Gas.  

  Da Gas und Wasser nah beieinander sind, wurden die Signale in einem 4-adriges Kabel zusammengeführt:  

[Bild(69.5k)]

 

   

Strom

 

  Mit dem Stromzähler hatte ich so meine Mühe. Es galt, den roten Strich auf der Drehscheibe zu erkennen.  

[Bild(29.0k)]

Mechanisch ist der Sensor auf eine Holzplatte montiert, die vor dem Zähler hängt:  

[Bild(35.7k)] [Bild(51.7k)]

Damit ich beim Ausrichten was erkenne, habe ich sichtbares Licht genommen. Erst wollte ich rot nehmen, aber Grün gibt bei einer roten Markierung ja mehr Kontrast.  

  Die doofe Fotodiode hat nix von dem reflektierten Licht gesehen. Also einen Transimpedanzverstärker dran und millionenfach verstärkt.
Immer noch nix.  

  Verschiedene Adapter, die aus immer mehr LEDs ihr grünes Licht auf die Scheibe warfen, haben die Sache auch nicht besser gemacht. Laut Datenblatt hätte die Fotodiode aber einen deutlich messbaren Strom liefern müssen.
Nach stundenlangem Suchen habe ich dann auch mal die Überschrift im Datenblatt bewußt gelesen: "Mit Tageslichtfilter". Scheibenkleister -das Teil ist Grünblind.
Also flugs eine IR-Sendediode rein - und schon hatte ich ein annehmbares Signal:  

[Bild(46.3k)]

Als ich dann die Fotodiode noch durch einen Fototransistor ersetzt habe, war der Pegel weltklasse:  

[Bild(55.2k)]

In Zeitlupe:  

[Bild(43.3k)]

 

  Das Innenleben hat wieder eine Platine:  

[Bild(46.8k)] [Bild(42.6k)]

Hier die Augen im Detail:  

[Bild(24.7k)]

Damit die Holzkonstruktion nicht runterrutschen kann, wird sie von der Schranktür mit etwas Schaumstoff angedrückt:  

[Bild(56.1k)]

 

   

Auswertung

 

  Dazu dient ein AVR-Net-IO von Pollin, bei dem 3 Analogeingänge genutzt werden.  

[Bild(39.0k)]

Das Teil ist ein kleiner WEB-Server, mit dem ich über das Internet Zugriff auf meine Daten bekommen möchte. Die mitgelieferte Software wurde durch eine Eigene ersetzt, welche die Reflexkopplerpulse auswertet, speichert und als Webseiten im Internet zur Verfügung stellt. Die Software basiert auf dem IP-Stack von Ulrich Radig, den ich so umgebaut habe, dass er zu meinem Projekt passt.  

  Vorgeschaltet ist je Kanal ein Tiefpass aus einem R-C Glied zur Unterdrückung von Störungen:  

[Bild(54.7k)] [Bild(31.7k)]

Besteht aus 3 Widerständen mit 100K, zweimal 680nF (Gas, Wasser) und einmal 470nF (Strom)  

[Bild(23.6k)]

 

  Der 5V-Längsregler (LM7805) auf dem Board wird trotz kleinem Kühlkörper schon bei 8V Trafospannung unerhört heiß - also wurde er durch einen verlustarmen 5V Schaltregler ersetzt, den ich aus der Platine eines Wechselrichters rausgesägt und mit ordentlich Heisskleber eingebaut habe:  

[Bild(79.0k)] [ (74.9k)]

Die ganze Elektronik kommt in einen Kabelkanal - hier mit aufgeschobenem Deckel:  

[Bild(51.2k)]

 

   

Software

 

  Der Prozessor AtMEGA32 hat 2K Ram - das war echt knapp, weshalb jetzt ein AtMega644P mit 4K die Pulse fleissig aufzeichnet.  

  Um aufwändige WEB-Seiten und nette Diagramme zu zeichnen reicht das aber auch nicht. Auch ist es doof, dass jedesmal alle aufgezeichneten Daten verlorengehen, wenn ich neue Software auf den Chip lade. Und so eine Webseite braucht bei mir so ein paar hundert Versuche, bis ich zufrieden bin und mir keine Verbesserungen mehr einfallen.  

  Das wurde so gelöst: Der Webserver liefert eine klitzekleine Webseite aus (4 Zeilen), in der Java-Script Code vom dicken Server meiner Homepage aufgerufen wird. Der Java-Script Code fragt nun den Webserver nach speziellen Daten-Seiten, die nur die Messwerte als Zahlen enthalten und lädt sich damit nach und nach alle Informationen, die im Webserver gespeichert sind.
Hier mal die Abfrage der Verlaufsdaten Strom der letzten 24 Stunden:  

[Bild(16.4k)]

 

  Aus diesen Infos bastelt der Script dann die eigentliche Webseite und läßt sie vom Browser darstellen.  

  Schön daran ist, dass ich das Aussehen der Seiten nun durch Ändern des Script-Codes auf meiner Homepage anpassen kann und der kleine Webserver von der ganzen Aktion völlig unberührt bleibt und er weiter fleissig Daten aufzeichnen kann.  

  Ich mag den Zugriff auf den winzigen Webserver hier nicht veröffentlichen, denn wahrscheinlich würde er total zusammenbrechen - und dann nicht mehr aufzeichnen.  

  Auf Anfrage gebe ich aber die Zugangsdaten raus, damit jeder mal (zeitbegrenzt) auf meinen Stromzähler linsen kann.  

   

Anzeige

 

  Angezeigt werden können die Daten mit dem Firefox auf jedem Rechner, der am Internet hängt.  

  Hier ein paar Screenshots:  

  Nicht jeder darf hier alles:  

[Bild(18.6k)]

 

  Laden der Daten beim ersten Start:  

[Bild(3.3k)]

Nach dem ersten Laden erfolgt die Aktualisierung unbemerkt im Hintergrund.  

  Der Standardbildschirm. Die roten Balken zeigen den Bereich der momentanen Uhrzeit.  

[Bild(162.6k)]

 

  Die Seite geht unten mit einer tabellarischen Anzeige der Daten weiter. Hier der obere Teil der Tabelle:  

[Bild(107.0k)]

 

  Die Darstellung der Verbräuche der letzten Tage steht auf der 2. Seite:  

[Bild(219.1k)]

Man kann gut erkennen, wann ich das Planschbecken gefüllt habe (und wie viel reinpasst).
Darunter wieder als Tabelle:  

[Bild(66.5k)]

 

  Auf der 3. Seite kann man sich für die Abrechnung mit dem Versorger den Gang in den Keller sparen:  

[Bild(36.9k)]

 

  Die letzte Seite ist mehr für mich gedacht - viel Statistik:  

[Bild(57.2k)]

 

  Für die Inbetriebnahme hat der Webserver selbst noch eine Seite, auf der ich die Sensoren trimmen kann, ohne dass ich am Internet hängen muss.
Die Seite muss direkt aufgerufen werden und ist in der Standardoberfläche nicht enthalten.  

----------------------------------------------------------------------
    http://192.168.16.16/service.htm
----------------------------------------------------------------------
[Bild(53.7k)]

 

  Die echten Zählerstände können jederzeit durch Aufruf einer virtuellen Spezialseite im Server eingestellt werden. Dazu werden die Zählerstände einfach mit in die Webadresse eingebaut (Get-Request). Der Webserver fischt sie raus und rechnet ab sofort mit den neuen Werten weiter.  

----------------------------------------------------------------------
    http://192.168.16.16/nn.htm?A=1234&B=4567&C=9876
----------------------------------------------------------------------

Damit wird der Gaszähler auf 12,34m³, der Wasserzähler auf 4,567m³ und der Stromzähler auf 9876/75=131,68KWh gesetzt. Die 75 sind die Umdrehungen je Kilowattstunde gemäß Aufdruck auf dem Zähler.  

 
-----
 

  Ein paar Worte zum Javascript:  

  Die Diagramme bestehen aus Tabellen mit diversen kleinen Bildern. So habe ich verschiedene Skalen gebaut, die je nach Maximalwert umgeschaltet werden. Das senkrechte Raster sind die randlosen Tabellenzellen, durch deren Zellabstand aber der Tabellenhintergrund durchscheint.
Die waagerechten Rasterlinien sind ein Bild in Diagrammfarbe, welches als Zellenhintergrund dient. Die eigentliche Balkengrafik wird durch Skalierung eines einzelnen kleinen blauen Balkens erreicht, von denen einfach 96 hintereinander gehängt sind.  

  Beim ersten Laden werden alle Daten vom Server gelesen und dann der 24h-Verlauf angezeigt. Anschliessend wird die Seite alle 20 Sekunden aktualisiert, wobei die Aktualisierung unbemerkt im Hintergrund läuft. Das Bild flackert also nicht, sondern es wird lediglich der blaue Balken zwischen den roten Linien ansteigen, wenn ein Zählerimpuls eingetroffen ist. Auch wandern die roten Linien automatisch weiter und die Werte in der Tabelle sind plötzlich ausgetauscht.  

  Das Menü oben ist ein Bild mit einer Map drüber. Klick man darauf, wird die entsprechende Seite vom Skript generiert und angezeigt. Da dafür keine Daten vom Server geholt werden müssen (die sind ja schon da), geht das quasi sofort (auf 'nem flotten Rechner). Vom Menü gibt's 4 Bilder - mit jeweils einem angewählten Reiter. So hat man das Gefühl, wirklich Seiten umzuschalten.
-----
Die Software zum runterladen: gaswasserstrom.zip
-----
 

Kommentieren
   
Startseite

Diese Seiten sind darauf optimiert mit möglichst jedem Browser zu funktionieren.

Aber der Seitenquelltext (strg-U) sieht auch interessant aus, zumindest wenn man ihn mit einem Monospace Font in sehr kleiner Schriftgröße betrachtet.

Valid HTML 4.01! CSS ist valide!