Aufgabe 1
1. Zerlege das Problem in kleinere Teilprobleme. Nenne die Teilprobleme, die du identifiziert hast.
TP1: Den Microcontroller mit zugehörigen Komponenten (FastLed, …) am Breadboard verbinden
TP2: Der Microcontroller muss Wissen wie viel Uhr es ist
TP3: Man muss die Uhrzeit einstellen könne (App) damit diese als Wecker dient
TP4: Der Microcontroller muss die Eingabe der App verarbeiten können
TP5: Der Wecker muss immer 30 Minuten vorher die Led ansteuern, anzugehen
TP6: Die Led muss die Farbe ändern können (Imitierung eines Sonnenaufgangs) wenn diese vom Wecker angesprochen wird
TP7: Während diese Zeit, soll die Led allmählich heller werden, bis sie ihre Maximale Helligkeit erreicht hat, wenn die Weckzeit los geht.
TP8: Der Microcontroller muss die Eingabe, dass das Licht über die App oder einen Taster ausgeschaltet wird erkennen
OTP1: Der Microcontroller muss zusätzlich zur Uhrzeit auch die Tage eines Jahres wissen
OTP2: Per App die Möglichkeit geben die Weckzeiten in Wochentage zu untereilen
2. Dokumentiere die Lösung der jeweiligen Teilprobleme mit Fotos, Videos oder Quellcode (je nachdem was angemessen ist zum Nachvollziehen der Lösung).


3. Lade den gesamten Quellcode und Screenshots der App im Blog hoch. Teile zudem deine App mit einem QR-Code (Zahnrad > Clone). Der Quellcode muss verständlich kommentiert sein. Weise mit zwei Videos nach, dass dein Wecker funktioniert.
#include <ESP8266WiFi.h>
#include <BlynkSimpleEsp8266.h>
#include <SPI.h>
#include <TimeLib.h>
#include <WidgetRTC.h>
#include <FastLED.h>
#define BLYNK_PRINT Serial
char auth[] = "Token";
char ssid[] = "Name des Routers";
char pass[] = "SSiD";
BlynkTimer timer;
WidgetRTC rtc;
void clockDisplay() //Uhrzeit und Datum werden im Serielle Monitor angezeigt
{
String currentTime = String(hour()) + ":" + minute() + ":" + second();
String currentDate = String(day()) + " " + month() + " " + year();
Serial.print("Current time: ");
Serial.print(currentTime);
Serial.print(" ");
Serial.print(currentDate);
Serial.println();
// Send time to the App
Blynk.virtualWrite(V1, currentTime);
// Send date to the App
Blynk.virtualWrite(V2, currentDate);
}
BLYNK_CONNECTED() {
// Synchronize time on connection
rtc.begin();
}
#define Taster D1
#define NUM_LEDS 3
#define DATA_PIN D7
int Helligkeit = 1;
CRGB leds[NUM_LEDS];
BLYNK_WRITE(V4) { // Gibt an wenn der Wecker eingestellt wird
TimeInputParam t(param);
// Process start time
if (t.hasStartTime())
{
Serial.println(String("Start: ") +
t.getStartHour() + ":" +
t.getStartMinute() + ":" +
t.getStartSecond());
}
else if (t.isStartSunrise())
{
Serial.println("Start at sunrise");
}
else if (t.isStartSunset())
{
Serial.println("Start at sunset");
}
else
{
// Do nothing
}
// Process stop time
if (t.hasStopTime())
{
Serial.println(String("Stop: ") +
t.getStopHour() + ":" +
t.getStopMinute() + ":" +
t.getStopSecond());
}
else if (t.isStopSunrise())
{
Serial.println("Stop at sunrise");
}
else if (t.isStopSunset())
{
Serial.println("Stop at sunset");
}
else
{
// Do nothing: no stop time was set
}
// Process timezone
// Timezone is already added to start/stop time
Serial.println(String("Time zone: ") + t.getTZ());
// Get timezone offset (in seconds)
Serial.println(String("Time zone offset: ") + t.getTZ_Offset());
// Process weekdays (1. Mon, 2. Tue, 3. Wed, ...)
for (int i = 1; i <= 7; i++) {
if (t.isWeekdaySelected(i)) {
Serial.println(String("Day ") + i + " is selected");
}
}
Serial.println();
}
void setup()
{
Serial.begin(115200);
Blynk.begin(auth, ssid, pass, "iot.informatik.uni-oldenburg.de", 8080);
pinMode(Taster, INPUT);
setSyncInterval(10 * 60);
timer.setInterval(1000L, clockDisplay);
delay(1000);
FastLED.addLeds<WS2811, DATA_PIN, RGB>(leds, NUM_LEDS); // Die Leds werden angesteurt
FastLED.setMaxPowerInVoltsAndMilliamps(5,400);
FastLED.setBrightness(CRGB(0,0,0)); // Leds sind aus
}
void loop()
{
leds[0] = CRGB(255, 147, 51); // Farbe Warmweiß
leds[1] = CRGB(255, 147, 51);
leds[2] = CRGB(255, 147, 51);
FastLED.show(); // Farbe wird nun an die Leds weitergeben damit diese in dieser Leuchten
delay(1000);
Blynk.run();
timer.run();
}

4. Reflektiere den Entwicklungsprozess. Nenne zudem drei gewonnene Erkenntnisse.
Ich konnte in laufe der Zeit folgende Erkentnisse zum Entwicklungsprozess sammeln:
- Coden ist auf Dauer sehr anstrengend
- Man darf nicht Aufgeben wenn man nicht weiter kommt
- Mit den Bibliotheken zu arbeiten, erleichtert einen das arbeiten
Auch wenn ich nicht Fertig geworden bin, werde ich trotzdem weiter dran arbeiten, das arbeiten mit Arduino zu verbessern, da das Lernen ein immer zu vorschreitender Prozess ist.
Mir selbst ist Aufgefallen, das ich noch nicht ganz den Aufbau in Arduino verstanden habe, aber mit genug Fleiß werde ich auch diese Hürde überwinden.
Bonusaufgabe:
Erzähle deinem sozialen Umfeld (z.B. Freunde/Geschwister/(Groß-)Eltern) von deinem Lichtweckerprojekt und zeige Fotos und Videos. Dokumentiere deren Rückfragen und Rückmeldungen in deinem Blog. Was empfindest du, wenn du die Rückmeldungen liest?
Auch wenn ich nur ein “Halbfertiges Produkt” zum vorzeigen hatte, waren die Rückmeldungen alle durchgehend Positiv.
Ich selber fand es auch sehr Motivierend das man durch die diversen positiven Rückmeldung angetrieben wurde immer weiter zu machen. An sich muss ich auch sagen, macht es einen glücklicher wenn man seine Erfolge (egal wie klein sie sind) mit anderen Teilt.
Auch gab es Fragen wie mein Lichtwecker theoretisch funktionieren tut, also wie ich es vom coden her anstellen möchte. Dabei ging ich so Ausführlich und verständlich wie möglich daran ran.
Ein Gedanke zu „Lösungen Übungsaufgabe 8“
Moin,
Danke für deinen Abgabe. Ich bewerte die unten aufgeführten Punkte.
1.1 Zerlegung 10/10
1.2 Teilprobleme gelöst 15/15
1.3 Quellcode und Screenshot 1/1
1.4 Blynk Projekt geteilt 1/1
1.5 Kommentare 4/4
1.6 Videos 0/3
Keine Videos
1.7 Refektion 6/6
2.0 Tagebuch 10/10
Erreicht: 104%