Go Down

Topic: Ausgang per Uhrzeit/Datum schalten (Read 7 times) previous topic - next topic

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.

Cetax

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


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 !
*greatz*

 CeTax

www dot blinkmann dot de

Elektrix

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:
Code: [Select]

#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
My blog about arduino and Linux themes:
http://heliosoph.mit-links.info/

Cetax

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   :smiley-mr-green:

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

 CeTax

www dot blinkmann dot de

maverick1509

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

Go Up