Monthly Archives: July 2022

7. Nutzerhandbuch

Zweck des Geräts

Der Getränkewächter kann die Temperatur von Getränken messen und beim Erreichen einer bestimmten Temperatur eine Benachrichtigung über die Blynk App senden. Um diese messen zu können, muss die Tasse auf dem Untersetzer platziert werden. Der IR-Sensor kann dann die Temperatur messen und an den Wemos D1 Mini weiterleiten. Auf der Blynk-Benutzeroberfläche kann die gesendete Temperatur nun angezeigt werden. Falls diese unterhalb der gewünschten Temperatur liegt, wird eine Benachrichtigung abgeschickt.

Voraussetzungen:

Arduino, Micro-USB Kabel, Blynk (legacy)

Übersicht:

  1. Blynk vorbereiten
  2. Code vorbereiten
  3. Inbetriebnahme
  4. Nutzungshinweise
  5. Video
  6. Known Issues

1. Blynk vorbereiten

Wir haben für unser Projekt Blynk (legacy) benutzt. Um die Benutzeroberfläche auf Blynk zu übertragen, kann der QR-Code innerhalb der Blynk App unter “+Add New Device/ Scan QR-code” eingescannt werden.

Abbildung 1: QR-Code unserer Blynk Benutzeroberfläche
Abbildung 2: Unsere Blynk Benutzeroberfläche

2. Code vorbereiten

Fügt die Bibliothek “Adafruit MLX90614 Library” in Arduino hinzu und wenn noch nicht vorhanden die Blynk Library.

char ssid[] = "";  //Your SSID
char pass[] = ""; // your Wifi password

Fügt hier den Namen eures WLANs ein und euer WLAN-Passwort

Alternativ, könnt ihr auch den WiFiManager hinzufügen und über einen Accesspoint mit dem Internet verbunden werden.

Der Sketch soll hochgeladen werden, sobald die Tasse mit dem Getränk auf dem Mikroschalter steht. Ab dann läuft die Software.

3. Inbetriebnahme

Zu Beginn wird die gewünschte Tasse auf dem Getränkewächter platziert. Dabei muss ein leises Klicken zu hören sein, welches das Messen startet.

Danach kann die Software in Arduino hochgeladen werden. Nach ein paar Sekunden, werden im Monitor Temperaturen angezeigt. Schließlich wird Blynk aktiviert.

Dort sollte es nun die aktuelle Temperatur anzeigen.

Abbildung 3: Aktuelle Temperatur des Getränks

Mit dem Slider kann eine Temperatur festgelegt werden, sodass der Getränkewächter überwachen kann, wann die gemessene unter die eingestellte Temperatur fällt. Die eingestellte Temperatur wird im unteren Display angezeigt.

Abbildung 4: Slider und eingestellte Temperatur

4. Nutzungshinweise

Die Tasse muss auf dem Schalter stehen bleiben, da der Stromkreis ansonsten nicht geschlossen ist und somit keine Messungen stattfinden. Aus dem gleichen Grund sollte sichergestellt sein, dass die Tasse während der Messung über dem Sensor stehen bleibt.

Der Code in Arduino soll erst kompiliert und hochgeladen werden, nachdem die Tasse steht, da der Controller sich sonst kontinuierlich zurücksetzt.

5. Video:

Youtube-Video: Durchführung einer Messung

6. Known Issues

Einige Probleme sind uns bekannt, die wir durch mehr Zeit beseitigen könnten. Dazu gehören:

  • Temperaturschwankungen bei unterschiedlichen Tassen oder Bechern
  • ein mögliches Verfehlen des Schalters beim Platzieren der Tasse
  • ein nicht funktionierendes Profil-System in der Blynk-Benutzeroberfläche
  • (keine besonders ansprechende Optik)

6. Software

Blynk

Abbildung 1: Blynk Benutzeroberfläche

V0: Display für aktuell gemessene Temperatur

V1: Slider für die Einstellung der Temperatur

V3: Display für die eingestellte Temperatur

V4: Auswahlmöglichkeit für Temperaturprofile

V5: Button zum Wählen eines Profils

V6: Button zum Speichern einer Temperatur in einem Profil

Arduino

Vollständiger Code: https://github.com/Lynncholy/Smarter-Getraenkewaechter/tree/main/Quellcode

Um den Infrarotsensor benutzen zu können, müssen wir uns zuerst die “Adafruit MLX90614 Library” herunterladen.

Adafruit_MLX90614 mlx = Adafruit_MLX90614();

Diese Zeile erzeugt ein Objekt des Sensors, mit dem wir im weiteren Verlauf arbeiten.

char auth[] = "rF0gN-Zo20v2XaCYwyDCLaqGx6aMTDcx";
char ssid[] = "";  //Your SSID
char pass[] = ""; // your Wifi password

Die Variable auth speichert den Token von Blynk ab. Ansonsten müssen vom Nutzer noch die SSID und das WLAN-Passwort hier eingetragen werden, sodass eine Verbindung zu Blynk hergestellt werden kann.

Methoden, die nicht funktionieren…

int slidervalue = 0;
int teaProfile = 0;
int coffeeProfile = 0;
int otherDrinkProfile = 0;
int chooseProfilePressed = 0;
int saveProfilePressed = 0;
int profile = 0; //1, 2 or 3
int activeProfile = 0;

Hier sind die Variablen initialisiert, die wir für die Getränkprofile benötigen. Der “slidervalue” speichert den Wert vom Slider (V1) ab. In den Variablen teaProfile, coffeeProfile und otherDrinkProfile werden die Temperaturen gespeichert, die der Nutzer durch das Drücken von V6 auslöst. Dabei ist “activeProfile” das jeweilige aktive Profil von den 3 Auswahlmöglichkeiten. Die Variablen chooseProfilePressed und saveProfilePressed können nur die Werte 1 (also Button gedrückt) oder 0 (Button nicht gedrückt) annehmen.

BLYNK_WRITE(V1)
{
  double i = param.asDouble();
  slidervalue = i;
  profile = slidervalue;
  Blynk.virtualWrite(V3, profile);

  Serial.println(i);
}

Diese Methode übernimmt den Wert vom Slider (V1) und zeigt den Wert im Display V3 an.

BLYNK_WRITE(V5)
{
  int i = param.asInt();
  chooseProfilePressed = i;
  if ((chooseProfilePressed == 1) && (teaProfile == profile)) { //if press the choose button, value of teaprofile is displayed
          //profile = teaProfile;
          Blynk.virtualWrite(V3, teaProfile);
        }
}

Diese Methode bestätigt die Wahl eines Profils. Bei der Bestätigung wird der gespeicherte Temperatur-Wert im Display V3 angezeigt. Dies soll nur geschehen, wenn der Nutzer beispielsweise das Tee-Profil ausgewählt hat und den Button V5 drückt.

BLYNK_WRITE(V6)
{
  int i = param.asInt();
  saveProfilePressed = i;
  if ((saveProfilePressed == 1) && (profile == 1)) { //if you press the save button, value of slider is saved to chosen profile
    teaProfile = slidervalue;
  }
  if ((saveProfilePressed == 1) && (profile == 2)) { //if you press the save button, value of slider is saved to chosen profile
    coffeeProfile = slidervalue;
  }
  if ((saveProfilePressed == 1) && (profile == 3)) { //if you press the save button, value of slider is saved to chosen profile
    otherDrinkProfile = slidervalue;
  }
}

Mit dieser Methode kann man die Temperatur aus dem Slider in Profile speichern. Dafür wählt man ein Profil in V4 aus und drückt gleichzeitig den Button V6.

WiFiManager

WiFi.mode(WIFI_STA); // explicitly set mode, esp defaults to STA+AP
  // it is a good practice to make sure your code sets wifi mode how you want it.

  Serial.begin(115200);

  //WiFiManager, Local intialization
  WiFiManager wm;

  // reset settings - wipe stored credentials for testing
  // these are stored by the esp library
  //wm.resetSettings();

  bool res;
  res = wm.autoConnect(); // auto generated AP name from chipid
  // res = wm.autoConnect("AutoConnectAP"); // anonymous ap

  if (!res) {
    Serial.println("Failed to connect");
    // ESP.restart();
  }
  else {
    //if you get here you have connected to the WiFi
    Serial.println("connected...yeey :)");
  }

Das Objekt wm der Klasse WiFiManager wird hier erzeugt. Mit dem WiFiManager kann man sich alternativ über einen Access Point mit Blynk verbinden und müsste so nicht seine SSID und Passwort im Code hinterlegen.

Wichtigsten Methoden

Blynk.begin(auth, ssid, pass, "iot.informatik.uni-oldenburg.de", 8080);
Blynk.virtualWrite(V0, mlx.readObjectTempC()); //displays current temperature on V0 (Blynk)

Hier wird eine Verbindung zu Blynk hergestellt. mlx.readObjectTempC() liefert dabei die aktuelle Temperatur des Sensors und gibt den Wert an das Display V0 in Blynk weiter. So hat man die aktuelle Temperatur des Getränks immer im Überblick.

if (mlx.readObjectTempC() < slidervalue) // Notificate if current temperature is below set temperature
  {
    Blynk.notify("Achtung! Deine Wunschtemperatur wurde jetzt erreicht!");
  }

Nachdem in Blynk der Slider (V1) bewegt wird, zeigt das Display V3 den ausgewählten Wert an. Fällt die aktuelle Temperatur des Getränks nun unterhalb die eingestellte Temperatur, so wird die Benachrichtigung “Achtung! Deine Wunschtemperatur wurde jetzt erreicht!” gesendet, auch wenn die App nicht im Vordergrund läuft.

19.07.2022 – Die Fertigstellung

Am 19.07. haben wir uns das letzte mal getroffen, um das Projekt fertigzustellen. Wir hatten ein paar Fehler in unserem Quellcode und das Benachrichtigen über Blynk ist uns nicht gelungen. Daher haben sich Mai Linh und Stieven erneut an die Software gesetzt und haben nach langem Tüfteln geschafft die Fehler zu beheben und Benachrichtigungen per Blynk zu senden. Sie haben zusätzlich versucht die gemessenen Temperaturen in der App zu speichern, jedoch haben sie es aufgrund mangelnder Zeit nicht mehr geschafft zu konfigurieren. Währenddessen haben Lorenz und ich ein paar Anpassungen am 3D-Modell durchgeführt und haben den Mikroschalter sowie den IR-Sensor gelötet.

8. Fazit

Soll-/Ist-Vergleich

Die Arbeiten an unserem Projekt sind nun abgeschlossen. Die Hauptfunktionen, also das Anzeigen der momentanen Temperatur und die Benachrichtigung am Handy, können erfolgreich ausgeführt werden, wie wir das am Anfang geplant hatten.

Unsere Reflexion…

Zeitproblem

Wir haben uns bei der Bearbeitungszeit verschätzt. Rückblickend hätten wir früher anfangen sollen, damit wir z. B. die Speicherfunktion für die Profile einrichten können. Zudem hatten wir unerwarteterweise mehr Probleme mit der App Blynk gehabt, sodass das Programmieren mehr Zeit in Anspruch genommen hat, als geplant.

Im Endeffekt mussten wir auch noch viele Änderungen am 3D-Modell machen, da das Drucken selbst mehr als neun Stunden gedauert hat. Uns sind aber erst gegen Ende Fehler aufgefallen, wie z. B. das Loch für den Mikroschalter ist zu klein, ein Loch für den infrarotsensor wurde vergessen. Wir konnten aus zeitlichen Gründen aber kein neues Modell mehr ausdrucken, also mussten wir ein wenig improvisieren und Löcher hinein bohren.

Materialmanagement

Überraschenderweise sind keine Materialien bei der Bearbeitung beschädigt worden. Wir mussten allerdings einige Teile zurückschicken, da uns im Nachhinein erst aufgefallen ist, dass wir die Komponenten aus dem Makerspace mitbenutzen durften.

Kommunikation

Über die ganze Arbeitsphase hinweg waren wir nur zweimal alle anwesend, da meistens eine Person durch Arbeit oder Krankheit verhindert war. Jedoch haben wir uns alle gegenseitig immer auf dem Laufenden gehalten, über z. B. WhatsApp oder Discord, daher ging unser Projekt immer voran.

Die Projektarbeit hat uns viele neue Erkenntnisse über das Arbeiten in Gruppen gegeben. Obwohl, wir “nur” 20 Tage praktisch gearbeitet haben, ist unser Projekt bis auf ein paar Extra-Features vollständig und wir sind zufrieden mit unserem Projekt!

Foto 1: Fertiges Projekt

18.07.2022 – Arbeit an der Software & Blynk

Stieven und ich haben uns über Discord getroffen, um uns an die Software zu setzen.

Für die Arduino-Software benötigen wir die Bibliotheken des Infrarot-Sensors “Adafruit MLX90614 Library”, von Blynk und des WiFiManagers. Der WiFiManager sorgt dafür, dass wir unsere WLAN-Zugangsdaten nicht im Code direkt hinterlegen müssen.

In Blynk haben wir dann die Benutzeroberfläche angelegt und nun ging es darum, die Daten vom Sensor an die richtigen Displays in Blynk weiterzuleiten und von Blynk die richtigen Profile zu erhalten.

Abbildung 1: Blynk Benuteroberfläche

Die Verbindung vom Display (V0) und des Sensors konnte wie geplant hergestellt werden.

Um Blynk dazu zu bringen Benachrichtigungen zu senden, bat sich die Möglichkeit an, über Blynk.cloud Events zu erstellen, jedoch hatte keiner von uns die Möglichkeit auf die Seite zuzugreifen. Wir sind also an diesem Tag aufgrund technischer Schwierigkeiten bei diesem Problem nicht weiter gekommen.

17.07.2022 – Präsentationsvorbereitung

Die Präsentationsvorbereitung

Unsere erste Idee war, dass alle Projektgruppenmitglieder sich privat in der Universität treffen und zusammen an der Präsentation arbeiten. Jedoch kam Krankheit und andere private Aspekte dazu, dass wir dies nicht durchführen konnten. So haben wir einen geeigneten Termin ausgemacht, um gemeinsam online an der Präsentation zu arbeiten.

Am 17.07.2022 haben wir uns dann also gemeinsam über Discord getroffen und haben überlegt, wie wir diese Präsentation am besten gestalten können. Wir haben uns dazu entschieden, dass wir die Präsentation über PowerPoint erstellen. Zur Gestaltung haben wir die PowerPoint-Vorlage der Universität-Oldenburg genommen.

Als richtigen ersten Schritt, haben wir die Gliederung erstellt, um uns einen Überblick zu verschaffen. Nachdem wir die Schritte unterteilt haben, haben wir uns darauf geeinigt, dass jedes Gruppenmitglied einen Teil der Präsentation übernimmt. Anschließend haben wir gemeinsam, Schritt für Schritt die Reihenfolge besprochen und Lorenz hat dabei unsere Gedanken festgehalten und die Präsentation erstellt.

14.07.2022 – Anpassungen

Heute haben wir uns wieder im Makerspace zusammengefunden um die Holzkiste mit dem Lasercutter schneiden zu lassen und zusammenzubauen (siehe Foto 1, 2, 3).

Foto 1: Die Holzkiste in Einzelteilen
Foto 2: Holzkiste mit der Kunststoffschale
Foto 3: Fertige Holzkiste

Bei der Zusammenführung der Software und Kiste mit dem Steckbrett, wurde festgestellt, dass die Umsetzung mit LEDs zu viele Anpassungen an der Kiste und Software hervorrufen würde. Das Steckbrett wird angepasst und die LEDs und Widerstände werden komplett entfernt (siehe Foto 4).

Foto 4: angepasstes Steckbrett

Die Idee ist nun, den Sensor und den Schalter unter den Untersetzer zu platzieren, sodass der Sensor die Temperatur der Tasse von unten messen kann. Alle erforderlichen Informationen sollen dann direkt an den Anwender geschickt werden und über Blynk abrufbar sein.

13.07.2022 – Die Holzkiste

Jetzt, wo die wichtigsten Teile des Mikrocontrollers hier vorliegen und miteinander verbunden sind, wird die äußere Hülle des Gerät erstellt: die Holzkiste.

Die Holzkiste wird zunächst in Autodesk Fusion 360 modelliert. Als Vorlage wird die Datei Kiste_ohne_Trennelement v3.f3d aus den Softskills-Dateien gewählt, die von Ben Wegener zur Verfügung gestellt wurde.

Die Maße der Kiste werden entsprechend des Mikrocontrollers angepasst (siehe Tabelle 1). Zusätzlich wird ein Loch in die Decke geschnitten und eine rechteckige Öffnung hinten platziert, sodass das Kabel des Mikrocontrollers dort durchgesteckt werden kann (siehe Abbildung 1).

HöheLängeBreiteDurchmesser des KreisesRechteck für KabelHolzdicke
40 mm200 mm150 mm115 mm10mm x 25mm3.5 mm
Tabelle 1: Maße der Holzkiste
Abbildung 1: Modellierung in Autodesk Fusion 360

Schließlich werden die einzelnen Seiten als Skizzen abgespeichert und in Laserbox geöffnet, um die Formen schnittbereit zu machen (siehe Abbildung 2). Am nächsten Tag werden mit dem Lasercutter die Holzteile herausgeschnitten und die Kiste zusammengeklebt.

Abbildung 2: Formen in Laserbox

12.07.2022 – Zweite Präsenzarbeit

Heute waren einige Gruppenmitglieder verhindert, nichtsdestotrotz haben wir uns zusammengefunden, um an dem Projekt weiter zu arbeiten.

Das 3D-Modell wurde erfolgreich ausgedruckt. Es mussten jedoch noch die Hilfskonstruktionen entfernt werden, die beim Drucken benötigt wurden, damit das 3D-Modell nicht umfällt.

Es wurde festgestellt, dass nicht die richtigen Maßen gewählt wurden, also passt der Schalter nicht komplett durch die Schale. Es mussten auch z. B. vier Untersetzer in die Schale hineinlegt werden, sodass der Untersetzer nicht zu tief in der Schale liegt.

Foto 1: Kunststoffschale nach dem 3D-Druck

Die Schale wird noch mit Bohrmaschine und Nagelpfeiler bearbeitet und den Maßen des Schalters angepasst.

5. Beschreibung der Hardware-Entwicklung

Zu Beginn der Projektphase hat man sich darauf geeinigt, dass der Getränkewächter ein Lichtsignal oder ein akustisches Signal ausführt. Nach erneuter Absprache wurde beschlossen das Signal als Benachrichtigung über die App Blynk zu senden. Der Arduino Nano wurde mit dem Wemos D1 Mini ersetzt, da ein Funkstandard, wie z. B. Wifi benötigt wurde. Somit strichen sich aus unserer Hardware, der Arduino Nano, die LEDs, die Batterien und die Batterieanschlüsse. Zudem hat man sich umentschieden die Temperatur des Getränks von oben zu messen und sollte stattdessen nun von unten gemessen werden. Der Sensor wurde also unter den Glasuntersetzer platziert. Daher wurden die Messingstäbe auch nicht mehr benötigt, da der Mikroschalter oben an die Messingstäbe befestigt werden sollte. Die endgültige Hardware bestand aus einem Infrarot-Thermometer IR-Sensor, dem Wemos D1 Mini, einem Mikroschalter, einem Glasuntersetzer und Holz.

Steckbrett & Schaltplan

Fertiges Steckbrett
Schaltplan

Der Mikroschalter wird über den 3V3 Ausgang des Wemos mit dem VIN (Volt Input) Eingang des Infrarot-Sensors verbunden. Die SCL (clock line) wird mit dem D1 Eingang verbunden und die SDA (data line) wird mit D2 verbunden. Dabei transportiert SCL das Taktsignal und SDA überträgt dagegen die Databits.

Holzbox

Die Holzkiste wurde mithilfe von Autodesk Fusion 360 modelliert. Als Vorlage wurde die Datei Kiste_ohne_Trennelement v3.f3d aus den Softskills-Dateien verwendet, die von Ben Wegener zur Verfügung gestellt wurde.

Die Maße der Kiste wurden entsprechend des Mikrocontrollers angepasst und ein Loch wurde zusätzlich in die Decke geschnitten. Es wurde eine kleine rechteckige Öffnung hinten offen gelassen, sodass das Kabel des Mikrocontrollers dort durchgesteckt werden kann. Schließlich wurden die einzelnen Seiten als Skizzen abgespeichert und wurden in Laserbox geöffnet, um die Formen schnittbereit zu machen.

HöheLängeBreiteDurchmesser des KreisesRechteck für KabelHolzdicke
40 mm200 mm150 mm110.6 mm10mm x 25mm3.5 mm
Maße unserer Holzkiste
Lasercuttingin in Autodesk Fusion 360

Die einzelnen Teile des Lasercuttings in Autodesk Fusion 360

Die einzelnen Teile des Lasercuttings in gelaserter Form

Das fertige Lasercutting