Software

Für die Software haben wir zuerst einen Pseudocode geschrieben, um alle wichtigen Funktionen zu sammeln, die unser Programm haben soll. Diese Funktionen kann man auch in der Abbildung sehen.

Funktionsweise

Der Wecker soll Daten wie die Zeit, das Wetter und die Temperatur anzeigen und mit dem Handy zu steuern sein. Das heißt, es muss für eine Internetverbindung gesorgt werden, indem die WLAN-Daten im Programm angegeben werden. Zudem braucht man den auth-token von der Blynk App, um eine Verbindung zwischen dieser App und dem Programm zu sorgen. Dies ist wichtig, um die Alarmzeit und den Alarm selber zu schalten und zudem ist es auch wichtig für die Zeit Synchronisation, da ansonsten die Zeit nicht korrekt angezeigt werden kann. Um das Wetter und die Temperatur abrufen zu können, wird ein api-key benötigt, welches man aus dem Internet bekommen kann.

Daten für die Internetverbindung, Blynk App und das Wetter
Blynk App mit Widgets

In der Blynk App gibt es drei Widgets. Einer dieser Widgets dient dazu, dass das Programm mit der Zeit synchronisieren kann. Ohne diesen Widget würde die Zeit am 1.1.1970 um 0 Uhr starten.

Hierzu gibt es an zwei Stellen im Programm Funktionen. Mit der “rtc.begin()“ Funktion wird die Zeit beim Start vom Programm bereits synchronisiert. Zudem gibt es im setup eine “setSyncInterval()“ Funktion. Hier wurde 10 * 60 angegeben, was bedeutet, dass alle 10 Minuten die Zeit nochmal synchronisiert wird. Dies ist erforderlich, wenn die Zeit nicht mehr korrekt ist, z.B. wenn es eine Zeit Umstellung gibt und die Zeit um eine Stunde zurück gestellt wurde. So wird sichergestellt, dass die Zeit immer korrekt ist.

Mit einem anderen Widget kann man die Alarmzeit und den Tag einstellen. Hier wurde der virtuelle Pin V0 vergeben, welches man im Programm abrufen kann. Im Programm wird dann in einer for-Schleife festgelegt für welche Tage der Wecker aktiv sein soll und in welcher Stunde und Minute der Alarm losgehen soll. Daraufhin wird direkt überprüft, ob der heutige Tag einer der Wecktage ist.

Alarmzeit speichern

Und mit dem Button, welcher den virtuellen Pin V1 bekommen hat, kann man den Alarm ein- und auch ausschalten.

Alarmbutton

Wenn eine Alarmzeit ausgewählt wurde und der Button betätigt wurde, ist der Alarm aktiv. Der Display vom Wecker zeigt dauerhaft die momentane Uhrzeit an, indem im setup mit der “timer.setInterval(1000L, clockDisplay)“ Funktion jede Sekunde die “clockDisplay()“ Funktion aufgerufen wird, welche die Uhrzeit sowie das Datum angibt. Wenn für den Tag ein Alarm eingestellt wurde, gibt es zudem die Alarmzeit aus. Zudem muss darauf geachtet werden, dass nach jeder Minute die Kästchen am Ende der Zeitangabe geleert werden. Das hat den Grund, dass die Zahlen 0 bis 9 einstellig sind und nach der Sekundenzahl 59 die Zahl 9 nicht wieder entfernt wird und noch entfernt werden muss (siehe Video). Hierbei muss noch darauf geachtet werden, ob die Stunden- und Minutenzahl ein- oder zweistellig sind, um die passende Position der Kästchen zu finden, die geleert werden müssen. Dabei ist auch wichtig die 1 Sekunde Verzögerungszeit vom Display mit einzuberechnen.

Fehler am Display, der behoben werden muss
Anpassung der Zeitangabe nach jeder Minute

Daneben zeigt der Display sowohl die Temperatur als auch das Wetter an. Hierfür wird im setup und im loop zu jeder halben und ganzen Stunde die “getCurrentWeatherConditions()“ Funktion aufgerufen, womit das Wetter und die Temperatur überprüft werden und dementsprechend wird das Wetter alle 30 Sekunden für 10 Sekunden angezeigt und die Temperatur wird alle 30 Sekunden für 20 Sekunden angezeigt (Abbildung 9 & 10), wobei hier darauf geachtet werden muss, dass die Kästchen zuerst geleert werden müssen, da sonst ein Teil vom Display weiterhin das Wetter anzeigt.

Angabe des Wetters und der Temperatur

Unter der Zeitangabe wird das Datum angezeigt und wenn am selben Tag ein Alarm aktiv ist, wird zudem auch die Alarmzeit angezeigt (Abbildung 9 & 10).

Abbildung 9
Abbildung 10

Der LED-Streifen neben dem Display zeigt mit den LED´s immer die Temperatur an. Mit den vier LED´s kann es die Temperatur von -10 bis 30 Grad Celsius anzeigen. Wenn am selben Tag ein Alarm aktiv ist und dieser in weniger als vier Stunden losgeht, zeigt der LED-Streifen jede halbe Minute für 10 Sekunden an, in wie vielen Stunden der Alarm losgehen wird. Wenn die Alarmzeit erreicht wurde, erscheint nur eine kleine Animation, da ohne die delay Funktion eine Animation nur schwer zu erstellen ist. Daher leuchten die LED´s nur violett auf wenn der Alarm losgeht.

Alarm- und Temperaturanzeige mit dem LED-Streifen

Wenn der Alarm losgeht, gibt der Buzzer einen Alarm ton aus, bis in der Blynk App der Button wieder betätigt wird oder man schaltet es mit dem Bewegungssensor aus, indem man eine einfache Handbewegung ausführt. Hier wird dann der Button in der Blynk App auf 0 geschaltet und der Alarm ton geht wieder aus.

Ausschalten des Weckers mit dem Bewegungssensor

Wenn man wieder einen aktiven Alarm haben möchte, muss man es in der Blynk App mit dem Button wieder aktivieren.

Da sich die Funktionen für die verschiedenen Werte, die im Display angezeigt werden, nicht alle im loop befinden können, werden die Zeit, Alarmzeit und Wetteranzeige nicht synchron dargestellt, da es eine Verzögerung gibt.

Dabei können Delays nicht eingefügt werden, da sie zu Problemen mit anderen Funktionen führen und so andere Werte wie z.B. die Alarmzeit auf dem Display nicht mehr angezeigt werden können.

Aus diesem Grund werden die Werte immer zu einer bestimmten Zeit abgerufen, wie z.B. zu jeder ganzen und halben Minute, und manche Werte werden dabei eine Sekunde später abgerufen, damit sie synchron mit den anderen Werten angezeigt werden können.