IoT Use Case Bauanleitung: Der intelligente Kaffeesockel

22. September 2016
In unseren Büros befinden sich mehrere Exemplare der Bonamat Airpotkanne in verschiedenen Größen. Als Basis für unsere Messstation dient das optional erhältliche „Tropfblech“.
 
 
 
 

 

Der Einkaufszettel

Um eine brauchbare Messvorrichtung zu bauen, die auch noch optischen Ansprüchen halbwegs gerecht wird benötigt man folgende Materialien:
 
  • Tropfblech
  • Transparentes Polycarbonat ca. 500x400x10mm
  • Linsenflanschkopfschrauben M4 x 20
  • 4 x Flachstahl 10x10x1mm
  • 2 x Lastsensor BQLZR YZC-131 5kg
  • 1 x A/D Wandler HX711
  • 1 x RaspBerry Pi 2 oder 3 inkl. Netzteil, SD-Karte und Jumper Wires
  • 4 x Gummi-/Filzgleiter
Falls eine Unterscheidung der verschiedenen Kaffeekannen gewünscht ist, muss das Setup noch um folgende Komponenten erweitert werden:
 
  • Mifare RC522 RFID Leser
  • Je Kanne ein NTAG213 Tag
 

Die Bauanleitung

Als erstes nutzt man das Tropfblech als Schablone und zeichnet sich die Umrisse auf die Polycarbonat Platte. 
 
 
Diese sägt man jetzt mit einer Stichsäge mit mittlerer Geschwindigkeit ohne Vorschub vorsichtig aus.
 
 
Anschließend muss noch ein Loch für die Vertiefung ausgesägt werden.
 
 
Nach mehreren Anproben und diversen Feilarbeiten sollte das Tropfblech dann straff auf der Platte sitzen.
 
 
 
Für einen sicheren Stand und eine etwaige spätere Beleuchtung lässt man den zweiten Teil des Sockels etwas größer.
 
 
Jetzt werden die Lastsensoren mittels der Linsenflanschkopfschrauben und dem Flachstahl zwischen den Sockelplatten verschraubt. Wichtig: Alle Löcher im Polycarbonat müssen vorgebohrt werden!
 
 
 
Soll der Sockel später die Kaffeekannen selbständig identifizieren können, ist jetzt der richtige Zeitpunkt um den RFID Leser mittig unter dem Tropfblech zu befestigen. Heißkleber hat sich hierbei als zielführend erwiesen. Wichtig: Vorher bereits die Kabel anbringen!
 
Nachdem alle Schrauben festgezogen wurden und nichts mehr wackelt muss jetzt das Tropfblech auf dem Sockel befestigt werden. Drei kleine Spax Schrauben 3x10 sollten dafür genügen. 
 
 
Da die Befestigungsschrauben der Sensoren an der Unterseite des Sockels herausragen und das hochwertige Inventar nicht beschädigt werden soll, müssen noch Gummi- oder Filzgleiter an den Ecken des Sockels angebracht werden. 
 
Zur späteren Identifizierung wird jeder Kaffeekanne am Boden einer der selbstklebenden NFC Tags verpasst.
 
 
Somit wäre die Basis geschaffen. Jetzt muss der Sockel nur noch „smart“ werden.

Die Verkabelung

 
Verkabelung LoadCells / HX511
 
Die beiden Load Cells müssen parallelgeschaltet werden und kommen wie folgt an den HX511:
 

 

Verkabelung HX511 / RaspberryPi

Verkabelung RFID Sensor (RC522) / RaspberryPi
 

Die Software

Die Basis stellt ein Raspbian Jessie 2016-05-10 dar. Zusätzlich müssen noch notwendige Abhängigkeiten wie z.B. wiringPi und node.js installiert werden.
 
Im Anschluss richtet man die Pakete zum Auslesen der Sensoren ein.
Für die Lastsensoren habe ich auf eine auf WiringPi adaptierte Version (hx711.zip) des hx711 zurückgegriffen.
 
In der hx711wp.c müssen zuerst die entsprechenden Pins angepasst werden.
#define CLOCK_PIN 5
#define DATA_PIN 4
Hierbei ist zu beachten, dass sich die Zahlen auf das WiringPi PinOut beziehen.
5 = Raspi Pin 18 (GPIO24)
4 = Raspi Pin 16 (GPIO23)
Anschließend die Datei kompilieren: 
gcc -o hx711wp hx711wp.c gb_common.c -lwiringPi
Und ausführen:
sudo nohup ./hx711wp
Wenn alles funktioniert hat, sollte auf der Konsole in etwa Folgendes zu sehen sein:
0 0 1 1 1 1 1 1 1 1 1 1 1 0 1 0 1 0 1 1 1 1 0 1 1 1 0 0 0 0 0 0 n: -689279
0 0 1 1 1 1 1 1 1 1 1 1 1 0 1 0 1 0 1 1 1 1 0 1 1 1 0 0 0 1 0 1 n: -689270
0 0 1 1 1 1 1 1 1 1 1 1 1 0 1 0 1 0 1 1 1 1 0 1 1 0 1 1 1 0 1 0 n: -689292
-689280
Da man mit diesen Werten nicht wirklich arbeiten kann, bedient man sich bekannter Gewichte (Münzen, kleine Hantelscheiben, etc.) und stellt Probemessungen an. Nachdem genügend Messerwerte gesammelt wurden, kann man sich ganz einfach die mathematische Funktion aufstellen und einen entsprechenden Korrekturfaktor (loadCellConstant) ergänzen. Damit ist dann auch gleich das Eigengewicht des Sockels (tara) herausgerechnet.
 
Weil der Sockel kontinuierlich Daten erfassen soll, wird das Programm um eine Endlosschleife erweitert und gibt die Daten formatiert in Gramm auf der Konsole aus.
Anschließend sieht die Ausgabe wie folgt aus:
2641
2641
2640
Jetzt hat man schon mal eine brauchbare Ausgabe in Gramm. Da die Sensoren eine relativ große Temperaturabhängigkeit aufweisen, ergänzt man das Programm noch um eine automatische Kalibrierung. Immer wenn das Gewicht kleiner als 10 Gramm ist, wird der Nullwert (tara) angepasst. Für den angedachten Use Case ist diese Abweichung sehr gut tolerierbar.
 
Das Programm wird nun mittels nohup in den Hintergrund geschickt und schreibt seine Daten kontinuierlich in ein Logfile. 
sudo nohup ./hx711wp_new > loadcell.log &
Wenn man den aktuellen Wert wissen will, schaut man einfach kurz mit tail in das Logfile.
tail -1 loadcell.log
Mittels Logrotate sollte jetzt noch eine Rotation des Logfiles eingerichtet werden, damit es nicht bis ins Unendliche anwächst. Wie das funktioniert erfahrt ihr, wenn ihr die Suchmaschine eures Vertrauens befragt.
 
Für das Auslesen des RC522 genügt das NPM Modul „rc522-rfid-promise“. 
Man legt sich also ein neues Verzeichnis an und lädt sich darin die entsprechende Dependency.
npm install rc522-rfid-promise
Anschließend benötigt man noch ein kleines Script zum Aufrufen des Modules und Ausgeben der Werte.
 
Dieses (rc522.zip) Stückchen JavaScript Code liest alle 5 Sekunden den Wert des RFID Lesers aus und gibt ihn auf der Konsole aus.
 
Ein kurzer Test
sudo node rc522.js
zeigt eine Ausgabe (vorausgesetzt es ist ein NFC Tag in Reichweite) ähnlich der folgenden:
4f575a2c84880
Dieses Skript schickt man ebenfalls per nohup in den Hintergrund und lässt die Ausgaben in einer Logdatei sammeln.
sudo nohup node rc522.js > deviceIds.log &
Auch hier gilt: Logrotate einrichten, sonst ist irgendwann kein freier Speicherplatz mehr vorhanden.
 

Ausblick

 
Im nächsten Beitrag zeigen wir euch, wie die Daten gesammelt und ausgewertet werden können.
 

Neuen Kommentar schreiben