Lösungen Übungsaufgabe 8

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).

Abbildung 1 Aufbau des Microcontroller mit zugehörigen Komponenten
Abbildung 2 Meine Widgets-Auswahl für die Aufgabe

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(); 
    
}

Übungsblatt8 (github.com)

Abbildung 3 QR-Code zu meinem Projekt

4. Reflektiere den Entwicklungsprozess. Nenne zudem drei gewonnene Erkenntnisse.

Ich konnte in laufe der Zeit folgende Erkentnisse zum Entwicklungsprozess sammeln:

  1. Coden ist auf Dauer sehr anstrengend
  2. Man darf nicht Aufgeben wenn man nicht weiter kommt
  3. 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

  1. 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%

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert