Seite auswählen

Homeduino mit I2C-Barometer-Sensor und LCD-Display für die Homematic

,
Homeduino mit I2C-Barometer-Sensor und LCD-Display für die Homematic
Print Friendly

Update 14.11.2014: In der Beschreibung fehlte die Angabe der weiteren Systemvariablen homeduino_fehler  als Logikwert

Zur Einstimmung auf das Thema:

Die Welt des Arduinos bietet viele Möglichkeiten, mit preiswerten Sensoren und Modulen sehr hochwertige Steuer- und Messgeräte darzustellen. Ein besonders für die Hausautomation mit der Homematic geeigneter Ansatz ist der Homeduino. Details hierzu findet man hier:
Auf Basis eines Arduino MEGA mit einem Ethernet Shield W5100 ist ein sehr preisgünstiges Gerät darstellbar, das über Ethernet (Wired) oder auch drahtlos über WLAN direkt von der Homematic-CCU ansteuerbar ist. Die Gestaltung der Homeduino-Software ist so universell, daß eine Verwendung des Gerätes auch mit Raspberry und anderen Computern mittels einfacher Skripte leicht möglich ist!
So kann man I2C-Module mit der Homematic über den Homeduino steuern:
Hier wird beschrieben, wie man relativ einfach ein 4-zeiliges LCD-Display und einen Barometersensor über einen sog I2C-Bus ansteuert. Damit wird in diesem Beispiel ein hochwertiges elektronisches Barometer dargestellt.
Da Komponenten mit I2C-Bus sehr vielfältig im Markt verfügbar sind, eröffnet diese Vorgehensweise auch für ganz andere  Meßaufgaben einen interessanten Lösungsweg.
Was sind die „Zutaten“:
– ein Arduino-MEGA 2650 ( bei ebay in China schon für 12€ zu haben)
-ein Ethernet W5100-Shield ( ebenfalls preiswert für etwa 6€)
– ein Barometersensor BMP180_Modul ( <2€ )
– ein 4×20 LCD-Display mit I2C ( ca. 3,50€ „Serial Interface2004 20X4 Character LCD Modul“ )
– optional: ein IO-Shield (kann zukünftig von mir bezogen werden, bitte PN)
– die Homeduino-Software
Das Kochrezept:
1.)  Man steckt den MEGA und das Ethernet-Shield zusammen, spielt per USB die Homeduino 1.0 oder 2.0 -Software auf und schließt das Ganze am Router an oder stellt die Verbindung über WLAN her. Wie das im Einzelnen geht ist unter dem o.a. Link beschrieben.

2.)  Das Display und den Sensor schließt man über den I2C-Bus an und verbindet die verwendeten Module zusätzlich mit der 5V-Spannungsversorgung. Die folgenden Bilder zeigen die Verschaltung:

Folie14
Folie15
3.)  Systemvariablen in der Homematic anlegen:
barometer_druckNN als Zahl mit Dimension mb
barometer_temp als Zahl mit Dimension °C
barometer_tendenz als Werte: bleibend; fallend; steigend;
barometer_druckNN_alt als Zahl mit Dimension mb
homeduino_fehler als Logikwert

 

4.)  WebUI-Programm mit Skripten für die Datenabfrage und für die Darstellung auf dem Display erstellen. Abtastintervall bei mir : alle 30min
barometer10
Das erste HM-Skript fragt den Barometersensor ab. In diesem Skript ist in der url noch die Höhe des eigenen Standortes einzutragen, Bei mir sind das 229m.
HM-Skript   
var url = "192.168.178.58/?barometer:229:"; !Stand 23.08.14###
!Messung mit dem Barometersensor BMP180##############
!zuerst die Barometer-Abfrage mit system.Exec
string stdout;
string stderr;
system.Exec("wget -q -O - '"#url#"'", &stdout, &stderr);
string arduino_xml = stdout;
integer laenge = arduino_xml.Length();
boolean status = 0;
if (laenge == 0) {dom.GetObject("homeduino_fehler").State(true);quit;} !beenden , wenn laenge =0
dom.GetObject("homeduino_fehler").State(false);
 
!Luftdruck in Systemvariable speichern
integer wort_position = arduino_xml.Find("bei NN");
string daten = arduino_xml.Substr(wort_position+10,8);
real druck = daten.ToFloat();
dom.GetObject("barometer_druckNN").State(druck);
 
!Temperatur in Systemvariable speichern
integer wort_position = arduino_xml.Find("tur     : ");
daten = arduino_xml.Substr(wort_position+9,5);
real temp = daten.ToFloat();
dom.GetObject("barometer_temp").State(temp);
 
!Tendenz berechnen und in Systemvariable speichern
real druck_alt = dom.GetObject("barometer_druckNN_alt").State();
dom.GetObject("barometer_druckNN_alt").State(druck); !umspeichern  neu >> alt
real druck_diff= druck - druck_alt;
integer tendenz = 0;
string ten_denz = "gleichbleibend";
if (druck_diff > 0.1) {tendenz =2 ;ten_denz = "steigend";}
if (druck_diff < -0.1) {tendenz =1 ;ten_denz ="fallend";}
dom.GetObject("barometer_tendenz").State(tendenz);

Das zweite HM-Skript stellt die Messwerte auf dem LCD-Display dar:

HM-Skript   
!LCD-Display , Stand 24.08.14   
var url = "192.168.178.58/?display:"; !##################################
real druck = dom.GetObject("barometer_druckNN").State();
string Druck =druck.ToString();
Druck = Druck.Substr(0,7); !zwei Nachkommastellen
 
real temp = dom.GetObject("barometer_temp").State();
string Temp =temp.ToString();
Temp = Temp.Substr(0,4); !nur eine Nachkommastelle
 
integer tendenz = dom.GetObject("barometer_tendenz").State();
string zeichen = "=";
if (tendenz == 1) {zeichen = "(";}
if (tendenz == 2) {zeichen = ")";}
 
integer druck_position = (druck - 981.0)/2.0;
if (druck_position < 0) {druck_position = 0; }
if (druck_position >19) {druck_position = 19;}
 
string zeile_1 = "Druck N.N. " + Druck +"mb    ";
zeile_1 = zeile_1.Substr(0,20); 
 
string zeile_2 = "____________________";
string zeile_20 = zeile_2.Substr(0,druck_position);
string zeile_21 = zeile_2.Substr(druck_position+1,19 - druck_position);
zeile_2 = zeile_20 + zeichen + zeile_21;
 
string gesamt =  url + "0:0:" + "Homeduino  Barometer" + zeile_1 + zeile_2;
string stdout; string stderr; system.Exec("wget -q -O - '"#gesamt#"'", &stdout, &stderr);
 
string zeile_3 = "Temperatur " + Temp +" grdC    ";
zeile_3 = zeile_3.Substr(0,20); 
string gesamt =  url + "0:3:" + zeile_3;
string stdout; string stderr; system.Exec("wget -q -O - '"#gesamt#"'", &stdout, &stderr);

Als Ergebnis hat man eine regelmässig aktualisierte Systemvariable bzw. den Messwert des Luftdruckes zurückgerechnet auf Normal-Null (N.N.), also Meereshöhe. Der Homeduino liefert zwar auch den absoluten Luftdruck, allerdings hat der nichts mit den Wetterdienst-Daten zu tun und wird deshalb hier nicht verwendet. In der dritten Zeile wird der Luftdruck quasi als Bargraph dargestellt . Je nach Tendenz des Luftdrucks wird ein „>“ oder „<“ oder „=“Zeichen in einer dem Luftdruckwert entsprechenden Zeilenposition angezeigt.

barometer9

 

Unabhängig von dieser Darstellung kann man auch mit einem Browser das Daten-Telegramm vom Homeduino ansehen:
barometer6
Anmerkungen zum Barometersensor BMP180: Der verwendete Sensor BMP180 ist der Nachfolgesensor des BMP085. Der Sensor selbst hat normalerweise eine Versorgungsspannung von 3,3V . Aber auf dem hier verwendeten Modul ist ein Spannungsregler integriert, so dass ein Betrieb mit 5V möglich ist. Also unbedingt auf den folgenden Bildern den Modultyp vergleichen. Ansonsten kauft man die 3V-Version und beschädigt so das Modul sofort bei Inbetriebnahme!
Mehr zu diesem tollen Sensor hier :  http://www.bosch-presse.de/presseforum/details.htm?txtID=5192

barometer1
Diese Bauanleitung wird noch erweitert zu einer kompletten Wetterstation. Bald mehr dazu!

Haftungs- und Sicherheitshinweise

Beim Nachbau müssen natürlich alle wichtigen einschlägigen Sicherheitsvorschriften für den Umgang mit gefährlichen Spannungen  eingehalten werden. Fundierte theoretische und praktische Fachkenntnisse der Elektrotechnik und für den Umgang mit gefährlichen Spannungen sind unverzichtbar!!

Durch eine unsachgemäße Installation gefährden Sie ihr Leben und das Leben ihrer Mitmenschen! Darüberhinaus riskieren Sie erhebliche Sachschäden , welche durch Brand etc. hervorgerufen werden können ! Für alle Personen- und Sachschäden durch falsche Installation etc. ist nicht der Hersteller sondern nur der Betreiber verantwortlich.

Ich verweise hier unbedingt auf  die  „Sicherheitshinweise und Haftungsausschluss„-Seite dieses Blogs.

 

 

 

Fähigkeiten

Gepostet am

22. August 2014

5 Kommentare

  1. Hallo,

    welche Link-LED? Auf dem Ethernet-Shield ist eine Reihe von sieben LEDs. Sie beginnt mit zwei grünen (TX, RX). Es folgen 4 gelbe und eine rote. Ich meine die letzte gelbe LED, wo Link drunter steht. Wenn ich den Arduino anschließe, werden nach einigen Sekunden TX und RX grün und dann fängt die gelbe Link-LED an zu blinken. Coll leuchtet nicht, FullD und 100M leuchten ständig. An der Netzsteckdose leuchtet nur das grüne Licht.

    Soweit das Arduino-Board. Sobald die Link-LED auf dem Ethernet-Shield zu blinken beginnt, startet auch an allen Geräten, die im Netz hängen, ein wildes Geflacker. Das sind zum Beispiel drei Homematic-LAN-Adapter, zwei Synology-NAS, zwei Switches. Zweimal habe ich das Barometer jetzt trotz des Geflackers über Nacht laufen lassen. Beide Male sind morgens meine Rolläden nicht hochgegangen. Zufall? Um den Familienfrieden nicht zu störeb, muss ich von weiteren Test absehen.

    Die Beziehung zu den WLAN-Teilnehmern ist mir nicht ganz klar. Arduino ist ja über LAN-Kabel angeschlossen.

    Habe übrigens auf den Arduino-Seiten mal gesucht. Dort haben zwei Leute vor einiger Zeit dieselbe Frage gestellt. Leider wurde sie nie beantwortet.

    Vielleicht hast du ja noch eine Idee.

    Gruß

    Ulrich

  2. Die Blinkerei kann mit dem fehlenden IO-Shield oder dem Display eigentlich nichts zu tun haben!
    Was heißt denn, die Link-LED blinkt? Welche Link-LED , wo ?
    Hast Du mal im Router nachgeschaut, ob und wie die WLAN-Teilnehmer eingeloggt sind ?

  3. Hallo,
    ja, wirklich toll. Eigentlich genau das, was ich seit langem suche. Trotzdem, – das ganze treibt noch noch in den Wahnsinn: Programm funktioniert einwandfrei. Luftdruck erscheint auch in der Homematic. Mein Problem liegt darin, dass – sobald ich den Arduino ins Netz einbinde – an allen Geräten im Netz die Link-Led wie wild zu blinken beginnt. Neues Arduino-Board, neues Ethernet-Shield, Kabel gewechselt, Netzanschluss geändert: Es ändert sich nichts! Bin ratlos!

    Setze den Sensor allerdings nur mit dem Arduino Board und Ethernet-Shield ein (Wie im Bild oben). Wahrscheinlich eine blöde Frage: Kann es sein, dass die Blinkerei mit dem fehlenden I/O-Shield und dem fehlenden Display zusammenhängt?

    Gruß

    Ulrich

  4. das I/O-Shield-Board als Teil-Bausatz kann man bei mir erwerben.
    Unter diesem Link ist immer die aktuelle Beschreibung der Funktionen verfügbar:
    https://www.stall.biz/?project=vielseitiges-io-shield-board-2-0-fur-fast-alle-arduinos

    Das I/O-Shield_Board kostet 26€ plus 3,90 € Versand nach Deutschland. Bei mehreren Boards wird Porto/Verpackung nur einmal berechnet!
    Das Board ist bereits mit allen SMDs bestückt, lediglich die optionalen 433-Mhz-Sender/Empfänger und der Buzzer müssen selbst beschafft und eingelötet werden.
    Bei Interesse, bitte kurze Info über den „Kontakt“-Button.

  5. Interessanter Artikel in einem interessanten Blog. Idee mit dem Homeduino ist genial! Wie kann man das I/O zu welchem Preis bestellen?

    Gruß Daniel

Kommentar absenden

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.

Translate »