Author Archives: Stieven Tammen

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.