IoTA


Internet of Things Automation und das lernende Smart Home

Geocache Transposed - Teil 3

Der Zusammenbau

Dies ist Teil 3 über den Bau eines Geocache Transposed (GCT), einer verschlossenen Box, die nur an einem geheimen Ort geöffnet wird. Der folgende Beitrag zeigt, wie die Hardwareteile zusammengefügt werden.

Der GCT benötigt mehrere Ausschnitte für das Display, den Netzschalter, den Backup-Stromanschluss und eine Abdeckung für den Schlüssel zum Öffnen der Box. Alle elektronischen Teile sollten im oberen Deckel aufbewahrt werden, daher ist eine Box mit ausreichend Platz im Deckel erforderlich. Die Box, die ich benutzt habe, hat 3 cm im Inneren des Deckels, was ausreicht, um alles hineinzustellen. Der Rest der Box steht dann zur Verfügung, um die versteckten Überraschungen zu lagern.

Box mit allen Ausschnitten
Box mit allen Ausschnitten für Schlüsselfach, Einschalter, LCD und Notstrom

Die originale Puzzlebox benutzte einen von einem Servo angetriebenen Verschluss, um den Deckel geschlossen zu halten. Für meine Version habe ich mich entschieden, dieses Konzept ein wenig zu ändern: Die Sicherung der Box von innen macht Sie anfällig für Batterie- oder Programmierfehler. Im Original ermöglicht ein Backup-Stecker die Programmierung zu Umgehen und so das Öffnen der Box an beliebiger Stelle. Stattdessen habe ich die Box mit einem Vorhängeschloss verschlossen (je größer desto eindrucksvoller) und den Schlüssel in der oberen Abdeckung verstaut. So kann ich einen Ersatzschlüssel behalten, falls etwas schief geht. Der Servo entriegelt dann die Abdeckung im Inneren des Deckels und gibt den Schlüssel frei.

Nachdem die Öffnungen in die Abdeckung geschnitten wurden, werden die elektronischen Teile auf einer Platte montiert, die später die Abdeckung abdichtet und das LCD von oben sichtbar macht. Das folgende Bild zeigt das Layout auf der Platte.

Hardware Innendeckel
Aufbau der Hardware im Innendeckel

Das Verbinden der Teile ist nicht weiter schwierig. Als Stromquelle wurde eine 9V Blockbatterie verwendet. Die Batterie ist mit der Eingangsseite des Pololu-Leistungsschalters verlötet, die Ausgangsseite des Schalters mit dem Arduino verbunden. Zusätzlich ist der Druckknopf mit dem Netzschalter verbunden. Optional habe ich dem Netzschalter eine Steckdose parallel zur Stromversorgung hinzugefügt. Die Steckdose ist von außen zugänglich. Falls die interne Batterie leer ist, lässt sich eine neue einstecken und die Box ist wieder betriebsbereit. Dies ist besonders hilfreich, wenn die Box für eine neue Tour wiederverwendet wird, ohne die Batterie gegen eine neue zu tauschen.

Alle anderen Teile (LCD, Servo, GPS) sind mit den Datenleitungen an einen Ein-/Ausgangspin des Arduino angeschlossen, während die Stromversorgung über den 5V-Ausgang des Arduino-Boards erfolgt. Die Umwandlung von 9V-Eingang in 5V-Ausgang wird vom Arduino übernommen. In den meisten Fällen sollte es möglich sein, die Kabel direkt in das Entwicklungsboard einzustecken. Ausnahmen, bei denen gelötet werden muss, sind der Anschluss an den Netzschalter, der Anschluss an 5V oder die Verlängerung von Kabeln, z.B. des GPS-Gerätes. Welche Ausgangspins an die Geräte angeschlossen werden, spielt dabei keine Rolle. Diese müssen später in der Software konfiguriert werden.

Etwas schwieriger war die Gestaltung des Schlossmechanismus für den Schlüssel. Er sollte robust sein, um den Belastungen standzuhalten, aber dennoch nicht zu schwer für den Servo. Schließlich habe ich zwei Haken aus gebogenen Metallstreifen an der Schlüssellochabdeckung befestigt. Der Servo dreht einen zu einem Bogen gebogenen Metallstreifen, der in verriegelter Position in die Haken passt. Das obige Bild zeigt den Bogen in geöffneter Position, das folgende Bild die Haken an der Unterseite der Schlüssellochabdeckung.

Befestigungsklammern Innendeckel
Befestigungsklammern im Innendeckel zur Verriegelung

Das Scharnier der Schlüssellochabdeckung wird mit Nieten befestigt, um Schrauben zu vermeiden. Während die Box natürlich nicht sehr sicher sein muss, vermeide ich gerne den offensichtlichen Eindruck, dass die Box mit einem Schraubendreher geöffnet werden könnte. Wenn alles auf dem Board befestigt ist, kann es am Deckel der Box befestigt werden und wir sind bereit. Ich habe dem Board ein USB-Kabel hinzugefügt, um den Arduino neu programmieren zu können, ohne den Deckel erneut öffnen zu müssen.


Geocache Transposed - Teil 2

Die Hardware

Dies ist Teil 2 über den Bau eines Geocache Transposed (GCT), einer verschlossenen Box, die nur an einem geheimen Ort geöffnet wird. Der folgende Beitrag listet die für den Bau benötigten Teile auf.

Arduino: https://arduino.cc/ Das berühmte Arduino Open-Source-Mikrocontroller-Board bildet das Herzstück des Caches. Die Kosten für ein Standard-Entwicklungsboard liegen unter 25,-€. Geschäfte, die das Board zur Verfügung stellen, sind hier zu finden: https://store.arduino.cc/distributors

Die meisten Firmen bieten auch die anderen elektronischen Bauteile an, die für den Geocache benötigt werden. Die Website des Arduino-Projekts bietet viele Tutorials zum Anschließen von Geräten an den Controller. Der Arduino besteht aus einem ATMega328 mit 32KByte Flash für Ihr Programm und 1KByte EEPROM zur Speicherung von Werten, was viel Platz für dieses Projekt bietet. Ich habe die vorherige Version namens Duemilanove verwendet, während das aktuelle Board1 Uno heißt, aber beide sollten gut funktionieren. Der Controller selbst wird in C++ programmiert, kompiliert und auf das Board über die IDE per USB hochgeladen. Das Board verfügt über mehrere Ein-/Ausgangspins und über Buchsen zum einfachen Einstecken der Kabel. Für die meisten Teile dieses Projekts ist kein Löten erforderlich.

GPS-Empfänger: Die Koordinaten der aktuellen Position der Box werden von einem GPS-Empfänger geliefert. Jeder Empfänger, der die Daten über eine serielle Verbindung sendet, sollte funktionieren. Für diese Box habe ich den GPS-Empfänger EM-406 SiRF III von USGlobalSat verwendet. Die Kosten liegen bei ca. 40,-€. Der Empfänger verfügt über eine integrierte Antenne und kann im Inneren der Box montiert werden, sofern die Wände nicht zu dick und nicht aus Metall sind.

LCD: Das LCD zeigt Statusinformationen und - was am wichtigsten ist - die Entfernung zum Zielort an. Ich benutzte ein serielles Display mit 16x2 Zeichen, weiß auf schwarz. Die Kosten betragen ca. 22,-€, verfügbar z.B. hier: http://www.watterott.com/index.php?page=product&info=1336 Ein Display mit parallelen Anschlüssen sollte ebenfalls verwendbar sein, da wir nicht so viele Anschlüsse des Arduino für die anderen Teile benötigen. Oft sind diese Displays billiger und es gibt Bibliotheken zur bequemen Ansteuerung.

Netzschalter: Die Box sollte so viel Strom wie möglich sparen, insbesondere da die Lösung und das Öffnen Monate dauern kann. Mit einem Pololu Power Switch2, siehe http://www.pololu.com/catalog/product/750, 6,-€, kann der Arduino mit einem Druckknopf eingeschaltet werden und der Arduino kann sich selbst wieder ausschalten. Zu beachten ist, dass es zwei Versionen dieses Netzschalters gibt, Standard-Spannung (SV) von 4,5V-20V und Kleinspannung (LV) von 2,5-7,0V. Da ich eine 9V-Batterie zur Stromversorgung der Box benutzte, kam die SV-Version zum Einsatz.

Servo: Ein Servomotor wird benötigt, um die Box schließlich an der richtigen Stelle zu öffnen. Jeder Servo sollte es tun, da wir keine schweren Hebearbeiten durchführen müssen. Genutzt wurde ein Hitec HS-311 Servo, der bei einem lokalen Modellbauer für 8,-€ gefunden wurde.

Power-Taste: Zum Einschalten der Box kann fast jeder billige Druckknopf verwendet werden. Hier sollte es etwas Ausgefalleneres sein und so entschied ich mich schließlich für einen beleuchteten Edelstahlknopf. Mit 10,-€ leider nicht auf der billigen Seite: https://www.conrad.de/de/p/tru-components-gq16f-10e-j-b-12v-vandalismusgeschuetzter-drucktaster-48-v-dc-2-a-1-x-aus-ein-ip65-tastend-1-st-701855.html

Verschiedene elektronische Teile: Für den Zusammenbau sind noch diverse andere Komponente wie Kabel nötig. Ich habe auch eine Buchse für den Anschluss einer externen Batterie installiert (Man weiß nie, wie lange die integrierte hält. Und ich will nicht in der Nähe sein, falls du Hunderte von Kilometern gefahren bist, nur um die Batterie leer vorzufinden). Diese Teile summierten sich auf ca. 15,-€.

Weiterer Kleinkram: Neben den elektronischen Teilen kommt dann noch anderes Material, wie z.B. ein Vorhängeschloss, Scharniere oder Nieten hinzu. Für die Kalkulation berücksichtigen wir diese Dinge mit zusätzlichen 15,-€.

Die Box: Zu guter Letzt wird die Box benötigt, in der alles aufbewahrt wird. Das war auch der Gegenstand, der mir die größten Kopfschmerzen bereitete. Die Box sollte groß genug sein, um viele Dinge zu verstauen, aber dennoch klein genug, um bequem mitgenommen zu werden. Bevorzugt wurde Holz, da es für die Ausschnitte einfach zu handhaben ist und auch ein dezentes Aussehen haben sollte. Es dauerte Stunden, bis ich viele Geschäfte nach einer passenden Box durchsucht hatte. Ich war fast kurz davor aufzugeben, als ich eine perfekte Schachtel auf meinem Schrank sah. Etwas staubig, aber perfekt. Abgeschätzt 30,-€ falls doch eine Kiste gekauft werden muss.

Summe der Kosten: Insgesamt belaufen sich die Kosten auf mehr als 170,-€3. Nicht wirklich ein Schnäppchen, aber die Erfahrung war jeden Euro wert.


  1. Anmerkung: Wie im ersten Post beschrieben basiert diese Artikelserie auf älteren Postings noch ursprünglich bei Google+.
  2. Nicht mehr verfügbar, Alternativen sind aber verlinkt.
  3. Inzwischen sollten 10%-20% mehr veranschlagt werden.

Geocache Transposed - Teil 1

Die Schatztruhe für unterwegs

Vor langer Zeit sagte mir einmal jemand, dass der Computeringenieur ein schlechter Beruf ist - um Geschenke für Familie und Freunde zu erschaffen. Maler, sicher, diese können leicht ein Bild zeichnen und es verschenken. Musiker, ja, sie können zu einem Geburtstag eine schöne kleine Melodie spielen oder sogar eine ganze Hymne einem Freund widmen. Aber wer mag schon Überraschungen mit Computern und Software? Ich würde das auch so sehen, dass einige Optionen ein wenig geekig sein können, aber andere können für jeden geeignet sein. Einer davon ist ein Geocache Transposed (GCT, Geocachet).

Dieser Post (und die folgenden) sind die Neuauflage einer alten Serie von Mini-Postings. Ursprünglich auf Google+ und in Englisch gepostet sind diese jetzt nach dem Ende von G+ zu schade um für immer verschwunden zu sein. Die Umsetzung der Box liegt inzwischen viele Jahre zurück, die Idee dahinter ist aber zeitlos. Soweit möglich wurden Links auf ihre Gültigkeit geprüft und ggf. angepasst oder gelöscht.

Geocaching ist inzwischen ein bekanntes Hobby, das von billigeren und in Smartphones integrierten GPS-Geräten angetrieben wurde. Beim Geocaching werden die so genannten Caches an entfernten Orten ausgeblendet, während die Koordinaten öffentlich sind. Bei Verwendung eines GPS-Geräts muss der Cache gefunden und in den meisten Fällen Elemente im Cache ausgetauscht werden. Eine GCT-Box dreht dieses Konzept auf den Kopf.

Der transponierte Geocache ist der sich bewegende Cache. Wer denkt nicht gerne an die eigene Kindheit zurück, das Spiel als Piraten und die Jagd nach geheimen Schätzen. Diesmal trägst jeder die Schatzkiste mit sich herum und muss das Rätsel lösen um den richtigen Ort zu finden. Die Box selbst ist verschlossen, darin befindet sich ein GPS-Empfänger und die Box öffnet sich nur, wenn sie an einem bestimmten Ort der Welt aktiviert wird. An der falschen Stelle zeigt das Feld einfach die Entfernung zum Ziel an, so dass erraten werden muss wohin die Reise gehen soll. Der Begriff Reverse Geocache dafür und das ursprüngliche Konzept wurde 2009 von Mikal Hart geprägt: http://arduiniana.org/projects/the-reverse-geo-cache-puzzle/ Er entwarf die Box als Geschenk für die Hochzeit seines Freundes und hat damit eine Lawine verschiedener Varianten davon ausgelöst.

Der Geocachet ist ein großartiges persönliches Geschenk, für Hochzeiten, Geburtstage oder Jubiläen. Der Prozess der Erstellung einer eigenen Box, der Auswahl des geheimen Ortes und der Beobachtung der Versuche, das Rätsel zu lösen, ist an sich schon ein wunderbare Sache. Und die Box ist wiederverwendbar, wenn ein neuer geheimer Ort programmiert wird. Nachdem ich die ursprünglichen Beiträge über die Geschichte des umgekehrten Geocache gelesen hatte, musste ich meine eigene Box erstellen. Die folgenden Beiträge beschreiben meinen Prozess; vielleicht werden sie auch als Inspiration für noch weitere Puzzleboxen dienen.


Kreuzvalidierungsfail

Prinzipiell alles richtig gemacht - oder eben doch nicht

Validierung der Prognosegüte von Modellen des maschinellen Lernens über hochgradige Kreuzvalidierung ist der Standard für zuverlässige Aussagen. Wie man sich damit leicht selbst auf das Glatteis führen kann, davon erzählt diese Geschichte.

Hintergrund

Sommerschule für maschinelles Lernen unter Ressourcenbeschränkung

Der Sonderforschungsbereich 876 - Große Daten, Kleine Geräte, an der TU Dortmund führt regelmäßig Sommerschulen zum Thema Maschinelles Lernen unter Ressourcenbeschränkung durch. Ganz zum Forschungsgebiet des Sonderforschungsbereichs passend beschäftigen sich die Sommerschulen damit, wie die Analyse großer Daten, insbesondere auch auf eingebetteten Systemen und im Verbund mit sehr stark beschränkten Rechenressourcen, gelingen kann. Jede Sommerschule versucht dabei neben den eigentlichen Kursen auch einen Hands-On-Teil dazu anzubieten. Auch die innerhalb kürzester Zeit ausverkaufte Sommerschule 2017 war dabei keine Ausnahme.

Versuchsaufbau
Versuchsaufbau aus mehreren PhyNode-Boxen

Das Szenario war dazu an ein Problem aus der Warenlogistik angelegt: Wie finde ich im Regal meine Box wieder? Im Versuchsaufbau wurden zwei kleine Wände aus Warencontainern aufgebaut, wobei jeder Container mit einem im Projekt Ressourcen-effiziente und verteilte Plattformen zur integrativen Datenanalyse entwickelten PhyNode-Board versehen ist.

Aufgabe

Die PhyNodes sind stark ressourcenbeschränkte, autonome und weitestgehend energieautarke eingebettete Systeme mit einer Anzahl verschiedener Sensoren.

Die Aufgabe der Sommerschule bestand darin, das Lernen von Positionen von Boxen mit angebrachten PhyNodes für mehr als 20 Positionen als Labels zu realisieren. Später sollten die Boards selbst durch die Software auf den Boards ihre eigenen Positionen im Regal vorhersagen können. Die Teilnehmer erhielten dazu Trainingsdaten mit der bekannten Position. Die Boards nahmen im Verlauf verschiedene Positionen ein, d.h. ID des Boards und Position stimmten nicht immer überein. Die Messreihen zwischen dem Umstecken werden im Folgenden als “Experiment” bezeichnet.

Features

Verfügbare Features waren Zeit, Board ID, Temperatur, Luxwerte, Beschleunigungswerte X, Y, Z, RSSI zur Basistation, das Experiment und die Position als Label. Positionen bestanden aus zwei Ziffern mit der Bedeutung Spalte/Zeile, was für die Modellbildung aber keine Rolle spielte, da die Aufgabe zunächst als Klassifikationsproblem behandelt wurde. In Summe standen nach den ersten Experimenten mehr als 330.000 Messungen zur Verfügung.

Modellierung

Um einen ersten Eindruck von der Schwierigkeit des Problems zu bekommen (These: Das geht gar nicht) bietet es sich an beispielsweise eine schnelle Analyse mit RapidMiner auszuprobieren. Die Daten sind damit fix eingelesen und die wichtigsten Methoden mit ein paar Klicks verfügbar.

Der simple Ansatz ist dann: Daten einfach mit einem RandomForest mit Standardparametern (10 Bäume) gelernt, 10-fache Kreuzvalidierung und schauen, wo wir landen.

X-Validation
Ausschnitt des Vorgehens bei einer 10-fachen Kreuzvalidierung

Die Kreuzvalidierung, insbesondere in 10-facher Ausführung stellt dabei sicher, dass unter maximaler Ausnutzung der Trainingsdaten ein sicheres Bild über die zu erwartende Güte gewonnen wird. Die Daten werden dazu gleichmäßig in 10 Blöcke unterteilt, wobei in jedem Trainings-/Testlauf ein Block für das Testing zurückbehalten wird, während die übrigen 90 % zum Training des Verfahrens zur Verfügung stehen.

Confusion Matrix Random Forest
Ausschnitt der Confusion Matrix unter Einsatz eines Random Forest

Für den Random Forest liefert diese Validierung dann auch eine Klassifikationsgüte von über 99 %. Ziel erreicht, perfekte Positionsvorhersage mit einfache Mitteln ist möglich, wir können nach Hause gehen. Schade um die Aufgabe, für eine Sommerschule war das dann wohl doch zu einfach. Naja, es blieb immerhin noch das Problem, das trainierte Modell auch auf die Ultra-Low-Power-Plattformen zu bringen.

Das Problem

Mehr als 99 %, und das ohne Aufwand. Hinterlässt aber irgendwie doch einen leichten Beigeschmack. Vielleicht lohnt es sich doch einmal etwas näher hinter die Kulissen zu schauen. Zur einfachen Interpretierbarkeit zeigt die folgende Abbildung den Ausschnitt aus einem einfachen Regelmodell anstelle des Random Forest.

RuleModel
Ausschnitt eines einfachen Regel-Modells

So einfach sieht das Modell aber eigentlich gar nicht aus. Im Gegenteil eher überkomplex und overfittet. Auffällig ist die Einbeziehung der Beschleunigungs-Werte (Acc_x …). Welche Rolle sollten diese im statischen Fall, d.h. Boards bewegen sich nicht, spielen? Eigentlich sollte das Modell unwichtige Attribute selbst aussortieren.

Es scheint als ob die Beschleunigungs-Werte einen deutlichen Bezug zur Position und zum Experiment haben, quasi wie ein Fingerabdruck.

Experiment Vs AccelZ Vs Board
Plot von zwei Experimenten (Zeitachse) gegenüber Z-Beschleunigung gegenüber zwei Boards (ID, Farbe)

Der Plot zeigt beispielhaft den Z-Wert der Beschleunigungsmesser für zwei Boards (rot und blau) für zwei Experimente (entlang der Zeitachse mit kurzer Unterbrechung zum links und rechts). Die Werte sind im Mittel stabil, deutlich voneinander trennbar, und unterscheiden sich zwischen den Boards. Und nach dem Umstecken ändert sich der Z-Wert an der neuen Position. Was passiert hier? Sind die Sensoren so empfindlich, dass die Erdbeschleunigung unterschiedliche Höhen sichtbar macht?

Wohl eher nicht, eine viel ernüchternde Erklärung: Die Boards scheinen nach dem Umstecken immer leicht schief in den Boxen zu landen, was die Unterschiede in den Beschleunigungswerten ausmacht und die eindeutige Identifikation eines Boards an einer bestimmten Position ermöglicht. Leider sind diese Werte nicht reproduzierbar, damit nur Rauschen und nicht für ein in der Realität anwendbares Modell geeignet. Sobald Daten eines Experiments für die Aufteilung der Kreuzvalidierung für ein Board sowohl im Trainings- als auch im Testdatensatz vorkommen erzeugen diese den Fingerabdruck dieses einen Boards. Eigentlich sollten aber die Messdaten unabhängig vom Board Rückschlüsse auf die Position erlauben. Die Beschleunigungssensoren codieren damit (fast eindeutig) das Label (Information Leakage).

Und die Situation wird noch schlimmer: In den Daten sind 9 Experimente enthalten, d.h. 9 mal Umstecken der PhyNode-Boards an neue Positionen. In einer 10-fachen stratifizierten Kreuzvalidierung stecken damit immer sowohl in Trainings- als auch Testdaten Anteile aus allen Experimenten.

Wird die Kreuzvalidierung dagegen auf Batchweise umgestellt mit dem Experiment als Attribut für den Train-/Testsplit sehen die Ergebnisse ganz anders aus. Jetzt wird immer jeweils ein vollständiges Experiment für den Test zurückgehalten während die anderen 8 Experimente dem Training dienen. Schon sind es nur noch 10 % Genauigkeit, siehe dazu wieder einen Ausschnitt der Konfusionsmatrix für einen Random Forest mit derselben Parametrisierung wie zuvor.

Confusion Matrix mit angepasster Validierung
Confusion Matrix mit angepasster Validierung über vollständige Experimente

10 % bei mehr als 20 Labeln ist immer noch besser als raten, aber nicht beeindruckend. Immerhin ist damit zumindest die Basis für eine korrekte Validierung gelegt und der eigentliche Zyklus aus Modellwahl und Parametrisierung kann beginnen.

Was sich in dem Szenario dann letztendlich erreichen lässt haben die Kollegen anschließend in einer Publikation auf der Smart SysTech 2018 gezeigt. Mit viel Mühe sind damit immerhin wieder Klassifikationsgüten von über 80 % möglich.