Whiskey Buddy
Zielsetzung
Im Rahmen der Veranstaltung "Angewandte Kommunikationstechnik" wurde ein Projekt angestrebt, welches den Studenten praktische Erfahrung im Bereich Internet of Things (im folgenden: IoT) in Verbindung mit drahtloser Datenkommunikation vermitteln soll. IoT umfasst dabei die Einbindung von alltäglichen Objekten in Netzwerke zur Kommunikation. Diese Vernetzung zielt darauf ab, den Menschen das Leben bequemer zu gestalten.
Projektspezifikationen
Die Idee des Whiskey Buddys ist das mobile Abrufen von Getränkeflascheninhalten über eine Anbindung ans Smartphone mit entsprechender Application (App).
Der Whiskey Buddy zielt darauf ab, den Erlebnischarakter zum Genuss der persönlich favorisierten Getränke zu unterstützen. Neben der Volumenberechnung bietet der Whiskey Buddy in der heimischen Vitrine eine optische Untermalung. Mit den Funktionalitäten des Whiskey Buddy's ist somit beispielsweise jeder Whiskey-Liebhaber - auch in der Planung des nächsten Whiskey-Tastings - immer im Bilde, wie es um seinen Whiskey-Bestand bestellt ist.
In der Gesamtheit steht der Whiskey Buddy dem Anwender mit folgenden Funktionen zur Seite:
- Automatische Messung des Füllstandes des bevorzugten Getränkes
- Mobiles Abrufen der Messdaten mittels Internetverbindung
- Anzeige und Kontrolle der Messdaten in einer speziellen WhiskeyBuddy-App
- Erfassung mittels Barcode-Erkennung bei Wechsel der leeren Getränkeflasche
Promotion Video des Whiskey Buddy
Die Hardware
Raspberry Pi
Der Raspberry Pi ist ein Einplatinen-Computer in Größe einer Kreditkarte, welcher von der Raspberry Pi Foundation entwickelt wurde. Seit der ersten Version des Raspberry Pi's hat sich der Mini-Rechner großer Beliebtheit erfreut und wurde in diversen Revisionen verbessert. Der Whiskey Buddy verwendet einen Raspberry Pi B+ als zentrale Recheneinheit und Schnittstelle zum Internet. Das hier verwendete Betriebssystem ist die aktuelleste Version (Stand 09.2015) von Raspbian Jessie, welche der Nachfolger von Wheezy darstellt.
Webcam zur Barcodeerfassung
Zur Erfassung des aktuellen Getränkes wird in diesem Projekt die Logitech Webcam QuickCam Pro 9000 verwendet. Mit dieser wird der Barcode des Produktes erfasst. Das erstellte BIld wird von der open source Software ZBar ausgewertet, enthaltene Barcodes erfasst und der entsprechende EAN Code ermittelt.
Abbildung 1 Logitech QuickCam Pro 9000
Die Wägezelle
Die zur Gewichtsmessung des Whiskeys benutzte Wägezelle ist der ausgebaute Biegebalken einer digitalen Küchenwaage. Zur Nutzung dieses Biegebalkens werden alle anderen Bauteile der Waage, wie z.B. Display etc., entfernt. Die Messwerte des Biegebalkens sind mittels Raspberry Pi auszuwerten. Damit dies möglich ist, müssen die Messwerte verstärkt und digitalisiert werden, da der Raspberry keinen integrierten Analog/Digital-Wandler (im folgenden A/D-Wandler) besitzt.
Abbildung 2 Die verwendete Waage
Hx711 - Messverstärkung und A/D-Wandlung
Der Baustein Hx711, welcher auf der Technologie von AVIA SEMICONDUCTOR basiert, beinhaltet einen 24-Bit A/D-Wandler und eine Vorverstärkerschaltung mit einer maximalen Verstärkung von 128. Der Hx711 wurde speziell für den Anschluss von Biegebalken mit Dehnungsmessstreifen zur Gewichtsmessung konzipiert.
Abbildung 3 Messverstärker (schematische Darstellung)
Gemäß des Schaltplans erfolgt die Kommunikation zwischen Hx711 und Raspberry mittels I2C. Der Code zum Zugriff des Raspberry Pi's auf die Daten, welcher der Hx711 bereit stellt, kann von Github mittels folgender Kommandos im LXTerminal des Raspberrys geladen werden:
cd /home/pi/Downloads
sudo git clone https://github.com/ggurov/hx711
cd hx711
nano hx711.c
Innerhalb des C-Codes des hx711 sind folgende Zeilen auf folgende Form zu verändern:
#define CLOCK_PIN 24
#define DATA_PIN 23
Diese Definitionen bestimmen die zu wählenden Pins des Raspberry für die I2C-Kommunikation. Der nachfolgende Code sorgt dann daf¸r, dass aus der C-Datei eine lauffähige EXECUTE-Datei gebildet wird und diese in das entsprechende Verzeichnis kopiert wird.
gcc -o hx711 hx711.c gb_common.o
sudo cp hx711 /usr/local/bin
Im LXTerminal kann dann über folgenden Befehl ein Messzyklus gestartet werden:
sudo hx711
Der Raspberry und das Internet - Clouddients: Dropbox
Um den Raspberry mit seiner angschlossenen Wägeeinrichtung für Whiskey-Flaschen auch unterwegs ansprechen zu können, entscheiden wir uns in diesem Projekt dazu den Clouddienst Dropbox als Schnittstelle im WWW zu verwenden. In der Vergangenheit hat sich ein gewisser Andrea Fabrizi bereits mit diesem Thema auseinandergesetzt und seinen Code als Shell-Datei auf GitHub anderen Leuten zugänglich gemacht. Der Raspberry bedient sich hier auch dieser Shell, welche den Namen Dropbox-Uploader besitzt. Ungleich dem Namen kommt der Dropbox-Uploader mit mehr Funktionen als dem Upload von Dateien in die Dropbox. Die Entscheidung warum gerade der Clouddienst Dropbox als Internet-Schnittstelle gewählt wurde liegt in der Tatsache begründet, dass Dropbox standardmäßig eine Entwicklerschnittstelle für viele verschiedene Sprachen (u.A. auch Python) bietet.
Einrichten der Verbindung zwischen Raspberry und Dropbox: Dropbox-Seite
Um eine programmatische Verbindung zwischen Raspberry und Dropbox nutzen zu können, muss zunächst eine entsprechende App innerhalb eines Dropbox-Accounts erstellt werden. Nach dem Einloggen in den Dropbox-Dienst, sind in einem Untermenü die Entwickleroptionen zu finden. Im Anschluss gilt es eine Dropbox-interne App zu erstellen. Dabei ist sowohl ein Name, als auch der Umfang der App-Berechtigung festzulegen. Die zwei Möglichkeiten sind dabei die Ordner-spezifische Berechtigung und die allgemeine Dropbox Berechtigung. Wenn eine Dropbox-App erstellt wird, wird automatisch ein gleichnamiger Order generiert. In unserem Projekt benötigen wir Zugang zu diesem bestimmten Ordner.
Einrichten der Verbindung zwischen Raspberry und Dropbox: Raspberry-Seite
Mit dem folgenden Code wird der Dropbox-Uploader auf den Raspberry geladen und installiert (Internetverbindung vorausgesetzt):
cd
sudo git clone https://github.com/andreafabrizi/Dropbox-Uploader.git
sudo apt-get install git-core
cd Dropbox-Uploader
Im Anschluss wird die Verbindung mit dem folgenden Befehl eingerichtet:
./dropbox_uploader.sh
Dropbox-Apps: Prinzip der Verbindung
In Dropbox erstellte Apps lassen sich sowohl mit dem Raspberry Pi als auch mit jedem anderen Dropbox-Account verbinden. Dropbox-Apps sind dabei nicht an einen bestimmten Account gebunden. Der Raspberry hat sich mit dem Dropbox-Account 2 eingeloggt und sich dann mit der App verbunden, welche mit dem Dropbox-Account 1 erstellt worden ist. Das Hochladen, Runterladen und Löschen von Dateien im App-Ordner bezieht sich, wie man im ersten Augenblick meinen würde, nicht auf den App-Ordner im Account 1, sondern auf das gleichnamige Duplikat im Account 2. In dieser Weise sorgt Dropbox dafür, dass bei einer großen Anzahl von App-Nutzern nicht alle Nutzer gleichzeitig auf einen Ordner eines nicht-eigenen Accounts zugreifen.
Abbildung 4 Dropbox Anbindung (schematische Darstellung)
Die Whiskey-Buddy-App
Die App ist für die Android Version 5.0 (Lollipop) ausgelegt und nicht vollständig abwärtskompatibel. Sie wurde in der Programmiersprache Java mithilfe der Entwicklungsumgebung Android Studio erstellt. Android Studio ist eine integrierte Entwiclungsumgebung (kurz engl. IDE) von Google, welche speziell für die Android-Entwicklung entwickelt wurde.
Berechtigungen der App
Jede Android-App benötigt zur Ausführung von Interaktionen spezielle Berechtigungen. In diesem Fall wird Internetzugriff benötigt da es Netzwerkzugriffe geben wird, sowie die Möglichkeit in den lokalen Speicher zu schreiben und zu lesen.
Dropbox Anbindung: App-Seite
Für die Verwendung von Dropbox in einer App wird die Dropbox-Programmierschnittstelle (Core API) benötigt. Für die Nutzung dieser Schnittstelle muss eine Verbindung zwischen der Android-App und der Dropbox-internen-App hergestellt werden. Die App besteht aus der Hauptroutine (Main Activity), welche die Benutzeroberfläche beinhaltet, die Hauptroutine wird beim Start der App geladen. Die Benutzeroberfläche beinhaltet verschiedene Buttons um die nachfolgenden Interaktionen auszuführen:
- Dropbox Login
- Einlesen der Daten, wenn ein neues Getränk auf den Whiskey Buddy gestellt wird
- Download aktueller Gewichts- und Füllstandsdaten
- Aktualisieren der Gewichts- und Füllstandsdaten
Angezeigt werden die Daten über Textfelder und eine Füllstandsanzeige. Mithilfe der Schaltfläche „New Whiskey“ wird der Barcode der aktuellen Flasche gescannt. Infolgedessen wird eine Textdatei mit den wichtigsten Getränkedaten in das Dropbox-Verzeichnis hochgeladen. Hierzu benötigt die App die im Vorfeld genannte Internet-Berechtigung. Der Button "Download" lädt aktuelle Whiskey-Daten aus der Dropbox herunter. Der Button Update aktualisiert die Whiskey-Daten-Anzeige.
Abbildung 5 Oberfläche der App
Prototyp des Whiskey Buddys
Abbildung 6 Prototyp des Whiskey Buddys (Frontansicht)
Abbildung 7 Prototyp des Whiskey Buddys (Seitenansicht)
Autoren:
Thomas Hollad
Jean-Marcel Malchert
Joachim Moehring
Falk Kiehl
Thorsten Merfeld