Timer für Hausautomatisierung

Hallo,
ich bastle im Moment an einer Hausautomatisierung auf basis des homecontrol4.me Projektes. Leider bekomme ich es nicht hin, einen Timer zu Programmieren, der auch funktioniert. Entweder bekomme ich immer Fehler beim Compilieren oder er läuft einfach nicht. Ich möchte das ganze mit dieser Timer-Libary (Arduino Playground - Time) umsetzten. Kann mir da jemand unter die Arme greifen?

Gruß Samot

Hallo Samot,

möchtest uns noch einige Details verraten???

Grüße,
Jürgen

Ja also, bei dem Projekt handelt es sich um einen angeschloßenen 433Mhz sender welcher Funkstecksdosen etc. steuern kann. Und ich hätte gerne einen Timer, der z.B. jedenmorgen STeckdose 1 anschaltet und Abends wieder aus. Am liebsten würde ich natürlich diesen Timer per Webinterface steuern können, aber dies ist erstmal nebensächlich schön wäre wenn man in den Code von homecontrol4.me erstmal einen laufenden Timer implementieren könnte

Für diese Anwendung solltest Du Dir die Anschaffung eines RTC (Real Time Clock) überlegen. Dieser hält die Zeit, auch wenn der Arduino einen Reset erhält (aus welchem Grund auch immer). Ohne diese Zeitbasis macht eine Zeitschaltung wenig bis gar keinen Sinn.

Die Zeitschaltung dort noch einzubinden, dürfte kein allzu grosses Problem sein, das ganze vom Web aus kontrollierbar zu machen, schon eher. Nicht, weil die Aufgabe zu kompliziert wäre, sondern eher, weil Dir der Speicherplatz ausgehen könnte, zumindest auf einem UNO. Ohne User-Interface (mit fixer Programmierung) kannst Du einfach im loop() die aktuelle Zeit aus dem RTC auslesen, mit der Ein-/Ausschaltzeit vergleichen und dann entsprechend schalten.

Etwas problematisch finde ich auch, dass der Autor sich noch keine Zeit genommen hat, den Code auf die aktuelle IDE-Version zu portieren.

Wenn RTC, dann würde ich DS3232 nehmen. Oder gleich ein DCF77 Modul, dann muß man die Uhr nie stellen :wink:

Die üblichen DCF77-Module (ELV, Conrad) sind äusserst heikel, ich kriege nur mit sehr sorgfältiger Positionierung der Antenne ein halbwegs brauchbares Signal hin und auch das nur, wenn ich in der Software das Signal tüchtig filtere und per Plausibilitätscheck "aufwerte". Gut ich bin hier in der Schweiz nicht im innersten Empfangsrayon, aber immer noch im sog. guten Bereich, wie das auch für einen Grossteil von Deutschland zutrifft.

Beim RTC gehe ich einig, der DS 3231 oder DS 3232 hat einige Vorteile gegenüber den verbreiteten DS1307, die den kleinen Aufpreis gut wett machen.

Dann würde ich eher noch zur NTP-Variante greifen, da Du offensichtlich sowieso ein Ethernet Shield angeschlossen hast. Das dürfte auch in vielen Fällen klappen, die Investition in den RTC würde ich aber auf jeden Fall machen.

Zum Thema RTC: Welche Vorteile bietet der DS3231/DS3232 konkret zum DS1307?

@MarcusW: der DS3232 ist sehr viel genauer.

@pylon: das Problem hatte ich auch. Ich hab's per exponentiellem Tiefpassfilter gelöst. Ist aber noch nicht ganz fertig. Ich brings in 2 Monaten in meinem Blog. Bis dahin ist das richtig fertig und auch 100% dokumentiert. Seit der genau berechnete Filter drin ist, ist das Signal so super sauber, dass es keine weiteren Tricks mehr braucht.

Wie filterst Du?

Zum Thema RTC: Welche Vorteile bietet der DS3231/DS3232 konkret zum DS1307?

Der Hauptvorteil dürfte der von Udo Klein genannte Präzisionsgewinn sein. Daneben hat der DS3231/3232 auch noch zwei Alarm-Ausgänge, die zu programmierten Zeiten gesetzt werden können. Damit lässt sich zum Beispiel ein schlafengelegter Arduino aufwecken, aber auch direkt irgendwelche anderen Actions auslösen.

Wie filterst Du?

Im Moment sehr simpel: Logikwechsel werden ignoriert, wenn sie nicht mindestens eine gewisse Zeit dauern. D.h. wenn das Signal für 1ms auf LOW geht und dann schon wieder HIGH ist, ignoriere ich diesen "Ausrutscher" und gehe von einem durchgehenden HIGH-Signal aus.
Danach wird das Signal normal geparsed und die erhaltenen Werte auf Plausibilität geprüft. Ist auch nur eine Ziffer nicht plausibel, wird die ganze Minute verworfen.

Bezüglich exponentieller Tiefpassfilter: Hast Du auch nur das binäre LOW/HIGH-Signal oder filterst Du schon auf dem analogen Signal?

Bezüglich exponentieller Tiefpassfilter: Hast Du auch nur das binäre LOW/HIGH-Signal oder filterst Du schon auf dem analogen Signal?

Da das DCF77 Modul zusammen mit dem Blinkenlight Shield verwendet wird und das Modul nur einen Open Kollektor Ausgang hat kann ich es nicht digital auslesen. Deshalb lese ich den Digitalausgang des Moduls analog aus. Das Resultat verwende ich aber wie ein Digitalsignal. Im Zweifelsfall liefert das schlechtere Ergebnisse als das Digitalsignal direkt zu verwenden. Das ganze wird mit 1kHz abgetastet und als Digitalsginal durch den Filter gedreht. Bis Dezember habe ich es auch richtig dokumentiert. Wenn Du willst kann ich Dir eine Vorabversion (ohne Doku) zum Testen geben.

Sowas wie 1ms lange Ausrutscher sind nach der Filterung nicht mehr möglich. Alles was dann noch durchkommt ist sowieso >49ms lang. Die obere Grenzfrequenz ist also auf ~20Hz beschränkt. Nächstes Ziel wäre dann eine Art phasenverriegelten Bandpass zu bauen der auf 2Hz beschränkt ist. Bzw. gleich ein "synthetisches DCF77 Signal" zu erzeugen und das mit dem empfangenen Signal zu korellieren. Damit würde ich vermutlich einen richtig heldenhaften Signalrauschabstand hinbekommen. Allerdings weiss ich nicht ob ich dafür die Zeit habe. So wie es jetzt implementiert ist funktioniert es schon deutlich besser als zunächst erhofft. Mal sehen.