Projekt: Arduino in Haus und Garten

Hallo zusammen,

nachdem ich mich ein wenig mit dem Arduino vertraut gemacht habe (433MHz Funkthermometer decodieren, Funksteckdosen schalten, 1-Wire Sensoren auslesen, all das via UDP unicast/broadcast ans Heimnetz anbinden etc.), will ich mein erstes "großes" Projekt starten: Stück für Stück will ich das Haus und den Garten mit Sensorik und teils auch Steuerung (z.B. Jalousien wetterabhängig) ausstatten. Angehen will ich zunächst die Thematik der Temperatursensoren.

Nachdem ich mit billigen Funk-Sensoren rumgetestet habe, bin ich davon wieder abgekommen. Einerseits ist die Genauigkeit nicht besonders hoch (+-2 °C - da zeigen zwei nebeneinanderliegende Sensoren auch mal knapp 4°C Differenz an). Anderseits ist die Haltbarkeit im Außeneinsatz recht begrenzt: Die Batterien machen schnell schlapp, die Kontakte korrodieren schon nach 1/2 Jahr deutlich, die Reichweite bei voller Batterie ist inzwischen drastisch gesunken. Kurzum, sie sollen durch Arduinos ersetzt werden. Als Sensoren sollen 1-Wire-Sensoren eingesetzt werden (DS1820 oder DS18B20).

Momentan plane ich ein System mit verteilten Arduinos:
Ein Arduino sitzt in einem (trockenen und frostfreien) Schuppen. Dieser misst die Innentemperatur (und soll später nen Heizlüfter ansteuern um Frostfreiheit zu erhalten). Zusätzlich werden mind. 2 Sensoren herausgeführt, um einen "ordentlichen" Außentemperaturwert zu erhalten: das Minimum aus den Außensensoren, so dass der Effekt direkter Sonneneinstrahlung kompensiert wird. Ein weiterer Sensor wird zum Pool geführt und misst die Temperatur dort. Allerdings ist die Leitung dort hin mind. 30m lang - je nachdem, wo ich die langlege - keine Ahnung, ob darüber das 1-Wire funktioniert.

Ein weiterer Arduino könnte statt der "langen Leitung" direkt beim am Pool verbaut werden und die Temperatur direkt dort messen.

Der dritte Arduino läuft im Haus, sammelt dort Temperaturen und empfängt die Werte der anderen Arduinos via 433 MHz oder ähnlichem. Dieser hängt via Ethernet Shield am LAN und broadcasted alle eingehenden Messwerte ca. 1x pro Minute via UDP. Die Arduinos laufen also als eine Art 1-Wire zu Ethernet Gateway - zwischendurch ggf. noch mit einer Funk-Strecke. Ein kleiner Server im Haus sammelt die Temperaturwerte ein und verarbeitet/visualisiert etc. den kram. Hier steckt später die ganze "Intelligenz".

Soweit der Plan. Ich habe ein paar Detail-Fragen und Ideen, die ich ich eigenen Threads diskutieren würde. In diesem Thread will ich über die gefundenen Lösungen berichten, Erfahrungen austauschen und freue mich natürlich über alle Kommentare und Ideen dazu.

Viele Grüße,
Michael.

Hallo,

ein Ähnliches Projekt habe ich auch in meiner Planung. Ich will zum Beispiel für mein Zimmer im Haus einen Arduino Server installieren. Denke da auch an einen 1-Wire Temperatursensor der da auch so 5-10 M entfernt aus dem Fenster hängen sollte.

Sowas sollte locker realisierbar sein oder sehe ich das schon falsch?? hast du da schon erfahrungen sammeln können wegen der Strecke?
Eine Idee für deine Übertragung wäre auch die einer via optischer Lichtleiter, denen große entfernungen nichts ausmachen und auch recht dünne kabel sein können. Da könntest du eventuell sogar nur einen Arduino brauchen ^^

Ich habe auch noch in Planung Fenstermagnet Klips zu befestigen, die dann zum beispiel bei 2 Tage ungeöffnetem Zustand alarm via Twitter schlagen. Eine LED leiste, die sich farblich verändern kann steht auch ganz oben auf meiner to-do liste. Um diese steuern zu können bräuchte ich aber auch gut 2-5 m Kabel an den Verschiedenen Abschnitte. Sollten solche entfernungen realisierbar ein? Unteranderem müsste da 12V durchgeschleußt werden.

Eine Idee / frage wäre noch, wie die deine Daten dann abrufst? Man könnte da jetzt zum beispiel auch eine Smartphone Steuerung drauf aufbauen. Das ist eines meiner Ziele, für Apple geräte zumindest :wink:

Gruß Flo

Die paar Meter sollten kein Problem sein.

Mobilzugriff würde ich persönlich primär als Webseite realisieren. Die kann man ja mobilgerätetauglich aufbauen, spart sich aber plattformspezifische Apps und den ganzen Prozess die evtl. in den App-Store zu bringen. Und https://cosm.com/ gibts ja auch noch...

So, inzwischen bin ich mit dem Projekt schon etwas weiter. Ich kann Signale halbwegs stabil vom Schuppen zum Haus senden (siehe http://arduino.cc/forum/index.php/topic,145980.0.html ). Im Schuppen tut schon ein DS1820 Teperatursensor seinen Dienst.

Derzeit sorgt ein Heizkörper im Schuppen für Frost-Freiheit, damit unsere Marmeladen dort nicht einfrieren (und auch nicht die Wasserleitung). Diesen hatte ich bisher via Zeitschaltuhr gesteuert - mit der Konsequenz, dass die Temperaturen bei den aktuellen Außentemperaturen von -8 bis +3 °C im Schuppen zwischen 3 und 12 Grad schwanken. Hier verschenke ich also bares Geld mit der Heizung.

Daher habe ich nun das Projekt um eine Arduino Heizungssteuerung erweitert:

Bauteile:

  • Arduino
  • DS1820 Temperatursensor
  • 433 MHz Transmitter
  • Baumarkt-Funksteckdose (3 Stück 10€)

Arduino-Libs:

  • RemoteSwitch
  • DS18S20

Den DS1820 Teil hatte ich ja schon am laufen. Den Sketch habe ich um 2 Funktionen erweitert:

void switchUpdateValue(unsigned int sensorId, float temp)
{
  if (sensorId==switchSensorId)
  {
    if (temp>=switchOffLowTemp) switchState=false;
    else if (temp<=switchOnLowTemp) switchState=true;
  }
}

Die Funktion wird mit jedem neuen Sensorwert aufgerufen. Stimmt die ID des Sensors mit "switchSensorId" überein, wird die Temperature ausgewertet. Damit die Heizung nicht dauernd an/aus geht, kommt eine "Hysterese" zum Einsatz: Fällt die Temperatur unter "switchOnLowTemp" (4 Grad bei mir), wechselt der Zustand auf "AN" (switchState==true). Steigt sie über switchOffLowTemp (5 Grad), wechselt der Zustand auf "aus".

Im Loop prüfe ich, dass ca. 30s vergangen sind (Code wie blink without delay), dann sende ich den Schaltbefehl zur Steckdose.

void switchSendValues()
{
  Serial.print("Switch: SystemCode ");
  Serial.print(switchSystemCode);
  Serial.print(", Channel ");
  Serial.print(switchChannelCode);
  Serial.print(": ");
  if (switchState) Serial.println("On"); else Serial.println("Off"); 
  vw_wait_tx();
  delay(10); // 10 ms extra
  switchTransmitter.sendSignal(switchSystemCode,switchChannelCode,switchState);
  delay(100); // 100 ms for signal
  
  char *msg = "b____";
  msg[ 1]=(switchState)?1:0;
  msg[ 2]=switchSystemCode;
  msg[ 3]=switchChannelCode;
                                                      msg[ 4]=messageNum++;
  
  vw_send((uint8_t *)msg, strlen(msg));
  vw_send((uint8_t *)msg, strlen(msg));
}

Den Schaltcode sende ich ständig (alle 30s), damit stelle ich sicher, dass die Steckdose auch wirklich an/aus geht. Alle Befehle mit "vw_" gehören nicht zur Steuerung sondern senden Status-Infos zum Haus. Dort empfange ich, ob der Arduino im Schuppen die Heizung an oder aus schalten will.

Die nächsten Nächte wird es wieder richtig kalt - ich poste mal, welche Heiz-Ersparnis ich mit dem Setup habe. Mit der Schaltuhr-Variante verbrate ich 2-3 kWh pro Tag.

Die Heizungssteuerung funktioniert schonmal super. Ich sende alle Daten an einen Zabbix-Monitoring-Server, dann kann ich auf bestimmte Daten reagieren. Außerdem lassen sich recht einfach Diagramme erstellen.
Hier mal die Temperaturemessung der letzten paar Tage. Der rote Block unten ist die Heizung - diese braucht ziemlich genau 30 Minuten, um den Raum von 4 auf 5 Grad zu erwärmen. Je nach Außentemperatur ist die Heizung 3 oder 4 mal pro Tag an (500W *1,5h) - ich spare damit also ca. 2 kWh pro Tag :wink: