IoTA


Internet of Things Automation und das lernende Smart Home

Geocache Transposed - Teil 7

Ausblick

Dies ist Teil 7 und der letzte Teil über den Bau eines Geocache Transposed (GCT), einer verschlossenen Box, die nur an einem geheimen Ort geöffnet wird. Der folgende Beitrag zeigt die fertige Kiste und ein paar Rückblicke auf die Bauphase. Teil 1 der Serie ist hier zu finden: GCT Teil 1

Bild der fertigen GCT-Box
Was für eine lange, seltsame Reise...
  1. Unterschätzt werden sollte nicht, wie robust der Verriegelungsmechanismus sein muss. Natürlich wird kein Safe gebaut, aber zumindest sollte er einen starken Zug überstehen. Es soll so etwas wie neugierige Schwiegermütter geben, die nicht verstehen, dass die Box verschlossen und nicht einfach so geöffnet werden kann.

  2. Bei der Auswahl der Zielorte sollten alle erreichbar sein, ohne dass ein Flugzeug genommen werden muss. Man stelle sich sonst den folgenden Dialog beim Sicherheitspesonal vor, die beim Durchleuchten die gesamte Elektronik gesehen haben: Ist das ihre Kiste? Ja. Machen sie mal auf. Kann ich nicht. Was ist denn da drin? Weiß ich nicht...

  3. GPS funktioniert in Innenräumen nicht. Ich dachte, das wäre bekannt, zusätzlich wird “Suche nach GPS-Signal” angezeigt, was deutlich macht, dass man die Box nach draußen bringen sollte. Ich lag falsch.

  4. Ich empfehle dringend, die Möglichkeit eine externe Backup-Batterie zu nutzen in die Box einzubauen. Die Sekundärbatterie sollte direkt zusammen mit der Box mitgegeben werden. Mehrere Kilometer zu reisen, um festzustellen, dass die interne Batterie leer ist, ist vielleicht nicht so lustig.

  5. Erstaunlich schwierig scheint es zu sein, von einer Entfernungsangabe auf mögliche Orte zu schließen. Kennt jemand eine Software, die Kreise um eine Position ziehen kann? Google Earth kann dies wohl in der kommerziellen Version. Was ist aus dem guten alten Kartenmaterial und einem Zirkel geworden?

  6. Der Pololu Power Switch schaltet nicht nur den Arduino ein, sondern auch durch einen zweiten Druck auf den Druckknopf wieder aus. Lustig, die Gesichter über einen vergeudeten Versuch zu sehen.

  7. Die Reise sollte kurz und unterhaltsam gehalten werden. Orte mit einer Bedeutung für den Beschenkten sind dabei besonders schön. Einige zusätzliche Hinweise helfen auch. Das Konzept, das nächste Ziel triangulieren zu müssen, auch spannend zu halten, lebt von einer schönen Auswahl an Zielen.

  8. Die Ideen für die Erweiterung der Box sind endlos: Nicht nur die Anzahl der Versuche begrenzen, sondern auch die Zeit (sollte über GPS abrufbar sein). Senden von SMS/Tweets über ein GSM-Modul. Die Möglichkeit, weitere Rätsel einzubauen, z.B. über eine Tastatur in der Box. Bilderkennung vor Ort über eine Kamera, usw.

Abschließend muss ich sagen, dass der Bau dieser Box eine großartige persönliche Erfahrung war, die ich wirklich empfehlen kann. Es dauerte etwa 3 Monate (ein paar Abende und Wochenenden), bis ich das Projekt vom Entwurf bis zur Fertigstellung abgeschlossen hatte. Meine Box ist natürlich weder die einzige noch die erste. Es finden sich viele weitere Varianten im Internet:


Geocache Transposed - Teil 6

Die Software, noch mehr Details

Dies ist Teil 6 über den Bau eines Geocache Transposed (GCT), einer verschlossenen Box, die nur an einem geheimen Ort geöffnet wird. Der folgende Beitrag beschreibt noch weitere Details wie den Testmodus bei der Implementierung der Software. Teil 1 der Serie ist hier zu finden: GCT Teil 1

Displayanzeige Suche GPS-Signal
Suche GPS-Signal...

Für die Freigabe der Software auf Github habe ich mich entschieden, alle Nachrichten, die über lcdSerial auf dem LCD-Bildschirm gedruckt wurden, auf Deutsch zu lassen. Der Grund dafür ist: Ich hatte wirklich Probleme damit, Umlaute (ä, ü, ö) korrekt anzuzeigen. Es hat mich einige Zeit gekostet, zu bemerken, dass der Treiberchip für das LCD in zwei Versionen existiert: Europäisch und asiatisch. Während der asiatische Chip zumindest einige Zeichen zur Verfügung stellt, die wie deutsche Kleinbuchstaben aussehen, konnte ich keinen Weg finden, die Software mit der richtigen Kodierung zu speichern, um sie auch richtig anzuzeigen. Am Ende sende ich das korrekte Byte Brute Force an die LCD, z.B. über lcdSerial.print(225, BYTE);

Um das Testen des gesamten Setups zu erleichtern, z.B. um das Ver- und Entriegeln zu ermöglichen, habe ich der Software einen GPS-Testmodus hinzugefügt. Dies überspringt das Lesen von realen Koordinaten aus dem GPS, sondern liest vielmehr Koordinaten aus dem test_latlons-Array. Wird die Definition GPS_Testing zu Beginn der Software einkommentiert, wird dieser Testmodus aktiviert. Ein Koordinatenpaar wird zufällig aus der Testliste ausgewählt und für die Entfernungsberechnung genutzt. Ich empfehle, dafür nicht mehr als drei Ziele im Zielarray zu verwenden, da es bei höheren Werten unwahrscheinlich ist, die aktuelle Zielposition zufällig aus dem Testarray auszuwählen. Natürlich sollten die Koordinaten des Zielarrays in das test_latlons-Array aufgenommen werden, da ansonsten niemals ein Ziel erreicht wird.

Bei jeder Aktivierung speichert die Box die Koordinaten der aktuellen Position im EEPROM. Die Idee war, dass man später die Koordinaten abrufen und die Reise auf einer Karte nachvollziehen kann. Aus Datenschutzgründen sollte der Beschenkte darüber allerdings informiert sein. Die erfassten Koordinaten werden über den internen seriellen Anschluss an einen PC in der Phase SEND_COORDS gesendet. Diese Phase wird nach dem Abschalten aktiviert und somit nur erreicht, wenn das Arduino-Board ohne Netzschalter direkt an eine Stromquelle angeschlossen ist, z.B. beim Anschluss an den PC über USB. Damit lassen sich die Koordinaten in der Konsole der Arduino-Entwicklungsumgebung ansehen.

Schließlich ermöglicht die Box das Zurücksetzen aller Zähler über einen speziellen Reset-Befehl. Nachdem die gespeicherten Koordinaten an den PC gesendet wurden, hört die Box auf eingehende Zeichen auf dem seriellen Gerät. Wenn die Zeichenkette reset gefunden wurde, werden alle Zähler auf 0 gesetzt. Um diesen Befehl an die Box zu senden, muss die Konsole in der Arduino IDE geöffnet sein und reset gefolgt von der Entertaste eingegeben werden.


Geocache Transposed - Teil 5

Die Software, Details

Dies ist Teil 5 über den Bau eines Geocache Transposed (GCT), einer verschlossenen Box, die nur an einem geheimen Ort geöffnet wird. Der folgende Beitrag zeigt ein paar Details zum Ablauf der Software auf dem Mikrocontroller. Teil 1 der Serie ist hier zu finden: GCT Teil 1

Ein Arduino-Programm besteht typischerweise aus zwei Hauptteilen: dem Setup, das einmal beim Einschalten aufgerufen wird, und der Schleife, die wiederholend bis zum Ausschalten aufgerufen wird.

Setup

Die Initialisierung ist denkbar einfach: Den korrekten Modus aller Ausgabepins einstellen, die dedizierte serielle Verbindung aktivieren (zum Senden von Debug-Meldungen an einen angeschlossenen PC) und die seriellen Softwareverbindungen zum LCD und GPS-Gerät. Das LCD wird nach dem Herstellen der Verbindung zurück gesetzt.

Schleife

Das Verhalten der Box ist in verschiedenen Phasen organisiert, die jeweils durch einen Wert in der aktuellen Phasenvariablen gesteuert werden. Die Switch-Anweisung in der Loop-Methode ruft die aktuelle Phase auf. Falls etwas schief geht, schaltet eine if-Anweisung am Ende der Schleifen die Box nach zehn Minuten ab.

INIT Phase: Die erste Phase gibt eine Willkommensmeldung auf dem LCD-Bildschirm aus, die Anzahl der Versuche und die Nummer des aktuellen Ziels. Die Nachricht kann an eine eigene Version angepasst und an lcdSerial gesendet werden. Der Zähler der Versuche wird bereits hier erhöht, so dass, wenn die Box ausgeschaltet wird oder das GPS kein Signal findet, der Versuch trotzdem gezählt wird. Wenn die Anzahl der maximalen Versuche bereits überschritten ist, zeigt das Feld eine Meldung an und die Box schaltet sich aus.

SEARCHGPS: In dieser Phase wird versucht, einen gültigen GPS-Fix zu erhalten. Wird nach 3 Minuten kein Signal gefunden, z.B. wenn die Box im Haus aktiviert wird, schaltet diese sich aus, um Strom zu sparen (Phase NO_GPS).

EVALPOS: Wenn ein Koordinatenpaar vom GPS-Gerät geliefert wurde, wird zunächst die Entfernung zu den geheimen Heimatkoordinaten berechnet. Befindet sich die Box in der Nähe dieser Koordinaten, öffnet sich das Schlüsselfach für einige Sekunden, bevor es wieder geschlossen und alle Zähler zurückgesetzt werden. Die Box ist nun bereit, um das Abenteuer wieder zu starten. Andernfalls wird der Abstand gegen die aktuellen Sollkoordinaten und die angegebene maximale Abweichung um diese Koordinaten geprüft. Alle Entfernungsberechnungen werden mit der Haversin-Formel (https://en.wikipedia.org/wiki/Haversine_formula) durchgeführt, die auch bei kleinen Entfernungen eine gute Genauigkeit gewährleistet.

Wenn die aktuelle Position nicht dem aktuellen Ziel entspricht, wird die Entfernung dahin ausgegeben und die Box schaltet sich aus. Wenn die richtige Position gefunden wurde, wird dies angezeigt, und daran anschließend die Entfernung zum nächsten Ziel, die Anzahl der verbleibenden Versuche und eine Abschaltungsmeldung. Wenn es das letzte Ziel der Sequenz war, wird die Box geöffnet.

UNLOCK: Endlich geschafft. Die Box öffnet sich nach einigen Sekunden und ermöglicht den Zugang zum Schlüssel des Vorhängeschlosses.


Geocache Transposed - Teil 4

Die Software

Dies ist Teil 4 ü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 Software, die das Arduino-Mikrocontroller-Board steuert, konfiguriert wird. Teil 1 der Serie ist hier zu finden: GCT Teil 1

Die Software ist unter der CC BY-NC-SA 3.0 Lizenz auf Github veröffentlicht: https://github.com/stmichaelis/geocachet

Zusätzliche Bibliotheken

Der Quellcode benötigt mehrere Bibliotheken, die in der Arduino-Entwicklungsumgebung installiert werden müssen, die alle vom ursprünglichen Erfinder der Idee des umgedrehten Geocaches bereitgestellt werden:

Konfiguration

Die Software ist komplett lauffähig1, dennoch müssen natürlich mindestens die Standorte konfiguriert und überprüft werden, ob die Pin-Einstellungen zur Verkabelung passen.

Einstellungen, die angepasst werden müssen, sind im Quellcode mit TODO gekennzeichnet. Das Float-Array target_latlon nimmt Koordinatenpaare für die Reihenfolge der Ziele, die erreicht werden müssen, um die Box zu öffnen. Die ursprüngliche Box verwendete nur ein einziges Ziel; die Verwendung von mehr als einem erinnert aber eher an die klassische Schnitzeljagd.

Das Array target_dev liefert eine maximale Abweichung in Metern um jede Zielposition herum. Wenn die Box innerhalb des Kreises um das Ziel mit diesem Wert als maximale Abweichung aktiviert ist, gilt die Position als erreicht. Ich habe mich dazu entschieden, verschiedene Abweichungen für jedes Ziel konfigurieren zu können, da einige Ziele eine punktgenaue Landung erfordern sollen, während andere durch eine entspannte Positionierung leichter erreichbar sind. Die Größe dieses Arrays muss natürlich der Anzahl der Ziele entsprechen. Ist die nicht der Fall wird beim Einschalten der Box eine Warnung ausgegeben.

Zu beachten ist, dass das GPS an sich eine gewisse Ungenauigkeit aufweist und die hier eingestellte Abweichung 10m nicht unterschreiten sollte. Die Konstante MAX_TRIES begrenzt die Anzahl der Aktivierungen. Wenn diese Zahl erreicht wird, bleibt die Box gesperrt. Die Begrenzung erhöht die Spannung (künstliche Verknappung erhöht den Wert) und verhindert übermäßige Versuche, die auch noch die Batterie entladen.

Die nächsten Konstanten definieren die Pins für Verbindungen zu den Geräten, die Adressen zum Speichern der Anzahl der verwendeten Versuche und einige Geokonstanten. HOME_LAT und HOME_LON markieren schließlich eine geheime Rückstellposition. Wenn an dieser Stelle aktiviert, öffnet sich die Box für einige Sekunden, so dass genügend Zeit bleibt, den Schlüssel hineinzulegen. Dann schließt diese sich wieder und setzt alle Zähler auf Null zurück. Diese Koordinaten sollten auf eine Stelle gesetzt werden, an der die Box durch den Beschenkten sehr unwahrscheinlich aktiviert wird.


  1. Das war sie zumindest einmal. Mit den neuen Versionen der genutzten Bibliotheken anscheinend nicht mehr. Aber ein Arbeitskollege hat eine aktualisierte Version der Software erstellt: http://www.thomas-liebig.eu/wordpress/building-a-geo-cache-transposed-gct/