Ausgang per Uhrzeit/Datum schalten

Hallo allerseits, kann man eigentlich dem Arduino sagen, das er z.B. um 17:00 Uhr Pin 1 auf On setzen soll? Hintergrund ist der, ich habe ja eine Pumpenschaltung, mit der ich die Minuten übergebe (mittels PHP), wie lange ein Ventil (Pin Ausgang) geöffnet sein soll. Nun wäre es aber komfortabler, auch sagen zu können, öffne 17:00 Uhr Pin 1. Noch besser wäre noch den Wochentag mit an zu geben.

Geht sowas ? Weiß das jemand und kann mir sagen wie ? :roll_eyes: Hier der Link zum PHP Thread Link

Hm, was ich mir vorstellen könnte... Also, um etwas mit der Zeit anzufangen, muss der Ardu auch Zugriff drauf haben.

Du könntest also bestimmt eine RTC dran hängen um so die aktuelle Uhrzeit abzurufen (und dann vielleicht sogar per NTP synchron zu halten). Und sobald du da Zugriff drauf hast, musst du in der Schleife nur prüfen, ob du eine bestimmte Uhrzeit überschritten hast, und wenn ja, Pin1 auf ON setzen.

Ich mutmaße mal; du könntest die RTC sicher weglassen und alle z.B. 5 Minuten die Internetzeit abholen, und es daran vergleichen. Ist dann aber halt Abhängig von einer bestehenden Inet-Leitung.

Oder du schreibst dir ein Skript für den PC/WebServer ( z.B. Java oder ein cgi-bin oder oder oder) der liest die Systemzeit(PC oder vom Webserver) aus und schickt dann zu bestimmten Zeiten ein On/Off-Signal an dein mit Ethernet bestückten Arduino. Andernfalls nimmst du ein RTC (http://www.exp-tech.de/product_info.php?info=p251_seeedstudio-grove---real-time-clock-module--rtc-.html) und klemmst es an dein Arduinoboard. Die Zeitschaltung arbeitet dann direkt auf dem Arduino und du benötigst keine zusätzliche Steuerung über eine Verbindung. mfg Balli

Klar geht das, und wenn du ein RTC Modul hast kannst du auch die Tage mit berücksichtigen. Gruß

Und so als Tipp: Habe mir das RTC-Modul vor paar Tagen bestellt und nach den Batterien dafür gesucht. Die findest du bei Amazon - habe 1,20 Euro (inklusive Versand :D) für 5 dieser Batterien bezahlt.

Also wenn dein Projekt eh ein Ethernet-Shield umfasst ist es eigentlich ganz easy die Uhrzeit aus dem Netz zu beziehen.

Hier ein Beispiel: http://arduino.cc/en/Tutorial/UdpNtpClient

Hi, wow... :) Danke für die tollen Vorschläge... Also, ich habe es jetzt erstmal "Von-hinten-durch-die-Brust-ins-Auge" gemacht. Ich schreibe direkt in die Crontab und lasse den Eintag wieder löschen wenn die Zeit abgelaufen ist. Das ist aber nur eine Not-Lösung denke ich.

@neovanmatix: An eine RTC habe ich auch schon gedacht, z.Z. habe ich ein Lan-Kabel ins Gartenhaus gelegt, das wird aber wohl, wenn es klappt auf WLan umgestellt. Also die Uhrzeit aktuell halten, sollte kein Prob darstellen.

@Ballibum: Das kriege ich glaube ich nicht, zumindest habe jetzt adhock keine Ahnung wie :blush:

Ballibum: Oder du schreibst dir ein Skript für den PC/WebServer ( z.B. Java oder ein cgi-bin oder oder oder) der liest die Systemzeit(PC oder vom Webserver) aus und schickt dann zu bestimmten Zeiten ein On/Off-Signal an dein mit Ethernet bestückten Arduino.

Ballibum: Andernfalls nimmst du ein RTC (http://www.exp-tech.de/product_info.php?info=p251_seeedstudio-grove---real-time-clock-module--rtc-.html) und klemmst es an dein Arduinoboard. Die Zeitschaltung arbeitet dann direkt auf dem Arduino und du benötigst keine zusätzliche Steuerung über eine Verbindung.

Ich glaube daruf läuft es hinaus, werde mal schnell die RTC bestellen.

maverick1509: Klar geht das, und wenn du ein RTC Modul hast kannst du auch die Tage mit berücksichtigen.

Das wäre natürlich Perfekt, so möchte ich es ja haben. XD

@neovanmatix: Danke für den Tip ;-)

kduin: Also wenn dein Projekt eh ein Ethernet-Shield umfasst ist es eigentlich ganz easy die Uhrzeit aus dem Netz zu beziehen. Hier ein Beispiel: http://arduino.cc/en/Tutorial/UdpNtpClient

Den Sketch habe bis jetzt noch nicht zum laufen bekommen... Muss ich mich wohl nochmal ran setzten.

So, aber erstmal Vielen Dank für Eure Hilfe,Anregungen und Vorschläge. Ich bestelle jetzt erstmal das RTC Modul und schraub das dran und komme dann bestimmt wieder, um Eure Hilfe in Anspruch nehmen zu müssen :grin:

Also meine Terrarienzeitschaltuhr habe ich auch mit einem (siehe link oben) RTC-Modul realisiert. Das schöne ist, dass der ganze Spaß eben auch ohne Verbindung funktioniert.

Hi Ballibum, was macht deine Terrarienzeitschaltuhr ? Nur Licht an und aus, glaub ich kaum :grin: Magst erzählen ? Oder gibt es ein Link mit Beschreibung und Bildern ?

Ballibum: Also meine Terrarienzeitschaltuhr habe ich auch mit einem (siehe link oben) RTC-Modul realisiert. Das schöne ist, dass der ganze Spaß eben auch ohne Verbindung funktioniert.

hallo,

Cetax: An eine RTC habe ich auch schon gedacht, z.Z. habe ich ein Lan-Kabel ins Gartenhaus gelegt, das wird aber wohl, wenn es klappt auf WLan umgestellt. Also die Uhrzeit aktuell halten, sollte kein Prob darstellen.

dann schau dir das mal an: Arduino-UTC-Uhr, mit Anbindung an NTP-Zeitserver

Gruss Jürgen

www.DL8MA.de/Arduino

Hallo Jürgen, schau ich mir heute abend mal an. Danke.

Hallo Ballibum,

Ballibum: ... Andernfalls nimmst du ein RTC (http://www.exp-tech.de/product_info.php?info=p251_seeedstudio-grove---real-time-clock-module--rtc-.html) und klemmst es an dein Arduinoboard. Die Zeitschaltung arbeitet dann direkt auf dem Arduino und du benötigst keine zusätzliche Steuerung über eine Verbindung.

Wie sieht denn die Zeitschaltung dafür aus? Ich habe da absolut keine Vorstellung. Wie teile ich dem Arduino mit, das er am Montag um 14 Uhr das Ventil 1 für 15 min öffnen soll ?

Um es ein bisschen komplexer zu gestalten

http://de.wikipedia.org/wiki/Gaußsche_Wochentagsformel

So kriegst du den Wochentag, ohne ihn selber einstellen zu müssen, den Rest kriegst du mit if Bedingungen hin.

Hallo Razor1990, sehr interessanter Artikel, ich glaube das ist zu overkill für mein Projekt. Weil ich nicht verstehe wie ich das umsetzten müste... Vielleicht Hilft mir jemand mit einer einfacheren Lösung :blush:

Wenn du einmal rausgekriegt hast, welcher Wochentag z.B. am 2. Juni 2012 war (und das fest in deinem Sketch einprogrammiert ist), musst du die Anzahl Tage seitdem finden und den Rest der Division durch 7 . Wenn der Rest 1 ist, ist Montag !

Die RTClib liefert dir passende Sekunden, die, durch 86400 geteilt, Tage ergeben...

Wieso den Wochentag berechnen, ist zwar schon lange her, aber das RTC Modul liefert doch nach einmaligem Stellen den Wochentag oder liege ich jetzt völlig daneben. Ich muss nachschauen, aber ich hab das schon mal genutzt.

Hallo maverick 1509, das RTC liefert unteranderen auch den Wochentag. Mit dem 4.Byte ( 0x03 Wochentag ), wenn ich das richtig gelesen habe.

maverick1509: Wieso den Wochentag berechnen, ist zwar schon lange her, aber das RTC Modul liefert doch nach einmaligem Stellen den Wochentag oder liege ich jetzt völlig daneben. Ich muss nachschauen, aber ich hab das schon mal genutzt.

Also, sobald das RTC-Modul da ist, fange ich damit an und werde mich dann noch mal melden. Ich glaube, ich kann es denn besser verstehen und konkretere Fragen stellen. Danke Euch aber bis jetzt für die tolle Unterstützung und Hilfe. Danke !

Hallo Cetax,

ich baue sowas gerade für die Bewässerung meiner Gemüsepflanzen auf dem Balkon. Ich habe einen RTC-Chip (DS1307) angeschlossen und die entsprechende Bibliothek (DS1307new) installiert. Man kann aus dem RTC dann mit verschiedenen Befehlen Stunde, Minute und Sekunde auslesen. Das vergleiche ich dann mit der gewünschten Uhrzeit und betätige dann den Ausgang. Sieht dann z. B. so aus:

#include <Wire.h>
#include <DS1307new.h>

// Anschluß für Pumpe
int pumppin = 2;

// Uhrzeit für Bewässerung
int pumphour = 19;
int pumpminute = 0;
int pumpsecond = 0;

// Bewässerungszeit in Sekunden
long pumptime = 120;

...

void loop()
{
  RTC.getTime();
  // Start Pumpe
  if (int(RTC.hour) == pumphour && int(RTC.minute) == pumpminute && int(RTC.second) == pumpsecond)
  {
    digitalWrite(pumppin, HIGH);
    timenow = RTC.time2000;
  }
  
  // Stop Pumpe
  if (RTC.time2000 - timenow == pumptime)
  {
    digitalWrite(pumppin, LOW);
  }
  delay(500);
}

Da fehlt natürlich noch das setup den RTC und so. Zum Ausschalten der Pumpe kann man das gleiche wieder machen oder eine Zeitspanne vorgeben wie im Beispiel. Um die Zeitdifferenz zu berechnen bis zum Ausschalten mußt du die Zeit in Sekunden auslesen (RTC.time2000). Wichtig ist, daß die Schleife sicher in jeder Sekunde durchlaufen wird, deshalb habe ich den delay am Schluß kleiner als 1000ms gewählt. Sonst kann es dir passieren, daß die Zeit am Ende der Sekunde 18:59:59 ausgelesen wird und dann erst wieder am Anfang der Sekunde 19:00:01. Dann schaltet er nicht ein, weil die Bedingung in der if-Abfrage nie erfüllt wird.

Das Verfahren ist ein sehr einfaches und funktioniert so, wenn du wenige Schaltereignisse hast (so wie hier 1x täglich ein).

Viele Grüße

Elektrix

Hallo Elektrix, das ist ja klasse, machst ja ähnliches wie. Ich Bewässere meinen Garten, habe 6 Ventile die an unterschiedlichen Tagen zu unterschiedlichen Zeiten geöffnet und nach einer Vorgegeben Zeit wieder geschlossen werden sollen. Was schon funktioniert ist halt die Öffnung der Ventile für eine bestimmte Laufzeit. Ich übergebe per Web-Interface eine Zeit (z.B. 30min) und wenn die abgelaufen ist, schließt das Ventil wieder automatisch. Jetzt sollen noch die Wochentage und Uhrzeit mit rein, aber da muss ich noch auf das RTC-Modul warten, kommt hoffentlich morgen :grin:

Aber erstmal danke für den Sketch-Teil, habe ich schon mal was zum lesen und versuchen zu verstehen.

Hallo Elektrix,
warum arbeitest du nicht mit < und >
dann brauchst du dir keine Sorgen zu machen, das nicht geschaltet wird.
Und ein delay brauchst du auch nicht,
mit delay arbeitet man nicht :-))
Gruß
Bernward