vorige Seite
Inhaltsverzeichnis
nächste Seite

Schritt 3 - Zeitsteuerung zufügen

Eine RTC ist schnell angeschlossen. Damit würde das Programm dann die Uhrzeit und das Datum bzw. den Tag im Jahr kennen.
Sofern ich eine Liste im Internet fände, die mir die Uhrzeit des Sonnenaufgangs und -untergangs in Schleswig-Holstein der letzten 12 Monaten liefert, könnte ich das Programm einmalig damit füttern....und gut wäre es.
Ansonsten brauche ich eine Möglichkeit, die Schaltung (z.B. per WLAN) zu erreichen - um sie über das Jahr mit neuen Zeiten füttern zu können.
Oder einen Sensor im Außenbereich, der mir die Arbeit abnimmt.

Ich such erst mal nach so einer Liste ......... schwuppdiwupp ....... das war ja unerwartet schmerzfrei.
Google ist fraglos evil, aber die Suchergebnisse sind klasse.
Unter http://www.sunrise-and-sunset.com/de/sun/deutschland/buchen__10 steht alles, was ich brauche.

Da nehme ich mal 2000 und 2014 von der Web-Seite und wähle entsprechende Zeiten für meine Tabelle aus:
Monat
Jahr 2000
Jahr 2014
Normalzeit
Ortszeit
Januar
01.01. 08:33 16:08 08:33 16:09 08:00 17:00 08:00
17:00
Januar 15.01.
08:25 16:28 08:24 16:29 08:00
17:00
08:00
17:00
Februar 01.02. 08:02 16:59 08:01 17:00 07:30 17:30 07:30
17:30
Februar 15.02.
07:36 17:27 07:34 17:28 07:00
18:00
07:00
18:00
März
01.03. 07:03 17:56 07:03 17:55 06:30 18:30 06:30
18:30
März 15.03.
06:29 18:22 06:30 18:21 06:00
19:00
06:00
19:00
April
01.04. 05:48 18:53 05:49 18:53 05:00 19:30
06:00
20:30
April 15.04.
05:15
19:19
05:16 19:18
05:00
20:00
06:00
21:00
Mai
01.05. 04:40 19:48 04:41 19:47 05:00 20:30
06:00
21:30
Mai 15.05.
04:15
20:12
04:16
20:11
05:00 20:30
06:00 21:30
Juni
01.06. 03:54 20:36 03:54 20:36 05:00 21:00
06:00
22:00
Juni 15.06.
03:47
20:48
03:47
20:48
05:00 21:30
06:00 22:30
Juli
01.07. 03:53 20:49 03:53 20:49 05:00 21:30 06:00
22:30
Juli 15.07.
04:08
20:38
04:08
20:38
05:00 21:30
06:00 22:30
August
01.08. 04:34 20:12 04:34 20:13 05:00 21:00 06:00
22:00
August 15.08.
04:58
19:45
04:57
19:45
05:00 20:30
06:00 21:30
September
01.09. 05:28 19:06 05:27 19:07 05:00 20:00 06:00
21:00
September 15.09.
05:52
18:32
05:51
18:33
05:30 19:30
06:30 20:30
Oktober
01.10. 06:20 17:53 06:20 17:54 06:00 19:00 07:00
20:00
Oktober 15.10.
06:46
17:20
06:45
17:21
06:00 18:00
07:00
19:00
November
01.11. 07:18 16:44 07:17 16:44 06:30 17:30 07:00
17:30
November 15.11.
07:44 16:19 07:43 16:20 07:00
17:00
07:00
17:00
Dezember
01.12. 08:11 16:02 08:10 16:02 07:30 16:30 07:30
16:30
Dezember 15.12.
08:27 15:58 08:27 15:58 08:00
16:30
08:00
16:30
Weil die RTC Sommer- und Winterzeit von sich aus nicht berücksichtigt, wird sie konstant in der Winter- bzw. Normalzeit laufen.
Daher sind die in der Sommerzeit liegenden Werte entsprechend anzupassen (die blau dargestellten Zeiten sind angepasst).

Das Programm dafür sieht folgendermaßen aus:
#include <Wire.h>
#include <DS1307new.h>  // http://code.google.com/p/ds1307new/

#define UP_HOUR   0
#define UP_MINUTE 1
#define DN_HOUR   2
#define DN_MINUTE 3
const int RUN_AT[12][2][4] = {
  // erste Dimension : 12 Monate
  // zweite Dimension: 0=Tag im Monat zwischen 1-14, 1=Tag im Monat zwischen 15-31
  // dritte Dimension: rauf_stunde, rauf_minute, runter_stunde, runter_minute
  // alle Zeiten sind in Winter- bzw. Normalzeit!
  {  {  8,  0, 17,  0 }, {  8,  0, 17,  0 }  },   // 01 - Januar    08:00-17:00  08:00-17:00
  {  {  7, 30, 17, 30 }, {  7,  0, 18,  0 }  },   // 02 - Februar   07:30-17:30  07:00-18:00
  {  {  6, 30, 18, 30 }, {  6,  0, 19,  0 }  },   // 03 - März      06:00-18:30  06:00-19:00
  {  {  5,  0, 19, 30 }, {  5,  0, 20,  0 }  },   // 04 - April     05:00-19:30  05:00-20:00
  {  {  5,  0, 20, 30 }, {  5,  0, 20, 30 }  },   // 05 - Mai       05:00-20:30  05:00-20:30
  {  {  5,  0, 21,  0 }, {  5,  0, 21, 30 }  },   // 06 - Juni      05:00-21:00  05:00-21:30
  {  {  5,  0, 21, 30 }, {  5,  0, 21, 30 }  },   // 07 - Juli      05:00-21:30  05:00-21:30
  {  {  5,  0, 21,  0 }, {  5,  0, 20, 30 }  },   // 08 - August    05:00-21:00  05:00-20:30
  {  {  5,  0, 20,  0 }, {  5, 30, 19, 30 }  },   // 09 - September 05:00-20:00  05:30-19:30
  {  {  6,  0, 19,  0 }, {  6,  0, 18,  0 }  },   // 10 - Oktober   06:00-19:00  06:00-18:00
  {  {  6, 30, 17, 30 }, {  7,  0, 17,  0 }  },   // 11 - November  06:30-17:30  07:00-17:00
  {  {  7, 30, 16, 30 }, {  8,  0, 16, 30 }  },   // 12 - Dezember  07:30-16:30  08:00-16:30
};
int last_up_day_g=0, last_dn_day_g=0;

[....]

void loop() {
  int rtc_month, rtc_day;

  RTC.getTime();
  rtc_month=RTC.month-1;  // Index in RUN_AT[x][][]
  rtc_day=(RTC.day>=15);  // Index in RUN_AT[][x][]
  if(rtc_month>=0 && RTC.month<=11) {
    // RTC.month ist valide
    if(RTC.hour==RUN_AT[rtc_month][rtc_day][UP_HOUR] && RTC.minute==RUN_AT[rtc_month][rtc_day][UP_MINUTE])  {
      // aktuelle Zeit passt
      if(RTC.day!=last_up_day_g)  {
        // heute noch nicht hochgefahren
        last_up_day_g=RTC.day;
        open_shutter();
      }
    } else if(RTC.hour==RUN_AT[rtc_month][rtc_day][DN_HOUR] && RTC.minute==RUN_AT[rtc_month][rtc_day][DN_MINUTE])  {
      // aktuelle Zeit passt
      if(RTC.day!=last_dn_day_g)  {
        // heute noch nicht runtergefahren
        last_dn_day_g=RTC.day;
        close_shutter();
      }
    }
  }

 
[....]

}


vorige Seite
nächste Seite