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.