GPS anchor alarm with ePaper display for battery operation

We often anchor in Sweden and have been using an anchor alarm on our mobile phones. Unfortunately, this has a few drawbacks: the phone's battery drains quite quickly, and sometimes Android stops the app for some internal reason – especially if it's not in the foreground and the screen is off. Of course, we could also use the alarm integrated into the AIS or the chartplotter, but I find that inflexible and it drains a lot of power from our house batteries.
Deshalb habe ich letzten Winter als Alternative einen GPS basierten Standalone-Ankeralarm gebaut, der mit Akku funktioniert und keinerlei weitere Hardware oder Anschlüsse braucht. Er hat einen LiPo Akku integriert, und ein e-Paper Display. Gesteuert wird er von einer stromsparenden ESP32 Variante, dem Lolin Lite.

Und so sieht das Gerät aus, mit einer Detailansicht des Bildschirms im Betrieb:

Gesamtansicht des Geräts

Komponenten

  • Lolin Lite ESP32: optimiert für Akkubetrieb und recht günstig. Im Deep Sleep hat dies Modul einen sehr geringen Stromverbrauch, so dass der Akku lange hält.
  • e-Paper Display 1.54″ mit einer Auflösung von 200×200 Pixel. Ausreichend groß für diesen Einsatzzweck, gute Darstellung und sehr geringer Stromverbrauch. Im Deep Sleep wird der letzte Bildinhalt dauerhaft angezeigt.
  • 1800 mAh LiPo Akku: ausreichend Betriebsstunden  (bei  60 mA mittlerem Stromverbrauch)
  • GPS Modul(Ublox NEO-6M, NEO-M8N oder ATGM336H)
  • Optional: aktive GPS Antenne
  • Rotary Encoder mit integriertem Druckknopf für die Einstellungen
  • Platine: Ich habe hier kein gesondertes Board gemacht, sondern die Platine für den e-Paper Barograph genutzt, den ich früher gemacht hatte. Alle benötigten Pins sind verfügbar, allerdings nicht alle korrekt beschriftet.
  • 3D gedrucktes Gehäuse aus PLA

Github Repository

Alle relevanten Daten zum Projekt, inklusive Quellcode, Platinendesign und Daten zum 3D Druck des Gehäuses, werden auf Github zur Verfügung gestellt:

Github Repository

Dort steht auch Information über die für dies Projekt genutzte Lizenz

Nutzung des Ankeralarms

Der erste Schritt ist das Einschalten mit dem Kippschalter an der Seite des Geräts (oder via USB Kabel Stromversorgung herstellen)
Das Gerät geht dann durch ein paar Selbsttests, inklusive Summer. Schließlich wird das Hauptmenü angezeigt. Durch Drehen des Knopfes geht man durch die Menüpunkte, Drücken zum selektieren, einstellen und wieder verlassen eines Menüpunktes.

Im Menü wird angezeigt:

  1. Programm Name und Version
  2. Aktuelle GPS Position in Dezimal-Notation
  3. Anchor Bearing – Einzustellende Richtung vom Boot zum Anker in Grad
  4. Anchor Distance – Distanz vom Boot zum Anker in Metern
  5. Alert Threshold – Numerischer Wert der festlegt, wie oft und wie weit das Boot außerhalb des „Sicherheitskreises“ sein muss, um Alarm auszulösen. Zum Alarmzähler werden bei Position 10% außerhalb des Kreises 1.0 addiert 1, 30% außerhalb addiert 3.0 und so weiter. Die Werte werden aufsummiert, und Alarm ausgelöst sobald der Wert des Alarmzählers größer ist als der hier eingestellte Wert für „Alert Threshold“.
    Sobald das Boot wieder im Sicherheitskreis ist, wird der Alarmzähler auf null zurückgesetzt – so werden bei kleinen Driften aus dem Kreis heraus Fehlalarme verhindert.
    Empfohlener Wert für „Alert Threshold“ ist 5, für sehr empfindliche Alarmierung sollte man auf 1 einstellen.
  6. Alert Distance – Radius des Sicherheitskreises um den Anker in Meter
  7. Sleeptime – Zeit in Sekunden die das Gerät zwischen Messungen schläft (Es sei denn es gibt einen Alarm, dann ist es dauerhaft aktiv)
  8. Detail Info – Bestimmt in 3 Stufen, wie viel Detailinformation auf dem Bildschirm angezeigt wird
  9. Graph Weight – Legt fest, wie dick Linien und Punkte gezeichnet werden
  10. Power Saving Mode – Legt fest, wie aggressiv Strom gespart wird. Der mittlere Wert „MID“ wird empfohlen
  11. Exit: Menü verlassen und Messung starten

Arbeitsbildschirm

Der Arbeitsbildschirm, also die Seite die während der Messung aktiv ist, zeigt im Zentrum die Position des Ankers als Kreuz. Der Sicherheitskreis wird durch einen Kreis um den Anker dargestellt, darin die Kompassrichtungen.
Die aktuelle Position des Bootes wird als „Zielscheibe“ angezeigt.
Abhängig davon welche Anzeigedetail – Tiefe ausgewählt ist, wird weitere Info angezeigt:
  • Anker Position (oben) und Schiffsposition (unten). Frühere Positionen relativ zum Anker werden als Punkte gezeigt, deren Größe hängt von der Einstellung für „Graph Weight“ ab. So entsteht im Verlauf des Ankerns ein Profil das zeigt, wie sich das Schiff um den Anker bewegt hat
  • Anzahl genutzter Satelliten und HDOP des GPS
  • Aufsummierter aktueller Alarmzähler – wenn der größer wird als „Alert Threshold“ wird der Alarm ausgelöst
  • Aktivitätszähler: wie oft ist das Gerät aufgewacht und hat eine Positionsbestimmung gemacht
  • Akku Spannung und Füllgrad in %
  • Abstand und Peilung von der Ankerposition zum Boot (wenn das Boot südwestlich der Ankerpostion ist, wird hier Peilung 235° angezeigt)

Alarmierung

Das Gerät gibt Alarm, wenn die Position des Bootes zu weit weg vom Anker ist, oder wenn der Akku leer wird, oder wenn keine gültige GPS Position mehr ermittelt werden kann.
Das heißt konkret; Ein Alarm wird ausgelöst, wenn mindestens eine der drei folgenden Bedingungen wahr ist:
  • Die aktuelle Bootsposition ist zu weit entfernt von der Position des Ankers. Mathematisch:
    (Alarmzähler)  > (Alarmgrenzwert).
    Der Alarmzähler wird über mehrere Messungen aufsummiert: 10% außerhalb des Sicherheitskreises addiert 1.0, 30% addiert 3 und so weiter. So führt ein geringfügiger Drift erst nach mehreren Messungen zum Alarm, ein starker Drift schnell. Die Empfindlichkeit (Alert Threshold) kann im Menü individuell eingestellt werden.
    Immer wenn das Boot in den Sicherheitskreis zurückkehr, wird der Alarmzähler auf Null zurückgesetzt.
  • Keine gültige GPS Position für mehr als 10 Sekunden. Dieser Zähler wird jedes mal zurückgesetzt, wenn wieder eine gültige GPS Position gefunden wurde.
  • Batteriespannung fällt unter 3.6V oder Batterieladung fällt unter 10%. Auch bei zu geringer Spannung arbeitet das Gerät weiter, bis die Schutzschaltung die Batterie trennt.

Der Alarm kann durch Drücken auf den Knopf des Drehgebers stumm geschaltet werden, das Gerät geht dann in das Menü.

Stromspar-Modus

Das Gerät ist für Akkubetrieb ausgelegt. Um dessen beschränkte Kapazität optimal zu nutzen, sind drei Stromspar-Modi verfügbar. Die Einstellung des genutzten Modus erfolgt im Menü.
Abhängig vom genutzten GPS Modul werden verschiedene konkrete Maßnahmen durch die Software umgesetzt:
Modus NEO-6M NEO-M8N ATGM336H
MIN 80 MHz, NMEA Msg, Ped 80 MHz, NMEA Msg, Ped
MID 80 MHz, NMEA Msg, Ped, PSM 80 MHz, NMEA Msg, Ped, PM2
MAX 80 MHz, NMEA Msg, Ped, PM2 80 MHz, NMEA Msg, Ped, HF Off
* NMEA Msg: Abschalten aller nicht benötigten NMEA Messages des GPS. Nur RMC, GGA, GLL bleiben an (CFG-MSH)
* Ped: Schaltet das GPS Modul auf „pedestrian mode“, für bessere Präzision bei geringen Geschwindigkeiten (CFG-NAV5)
* PSM: Schaltet das GPS Modul auf PowerSavingMode (CFG-RXM)
* PM2: Konfiguriert extended Power Management auf längere updatePeriod (CFG-PM2)
* HF Off: Schaltet die HF Sektion des GPS Moduls ab  (CFG-RST). Größte Einsparung, aber benötigt Zeit um die Satelliten wieder zu finden
Die Reduktion der Taktrate (80 MHz) reduziert den Stromverbrauch des ESP32 auf ca. 75 mA während er nicht im Deep Sleep ist
Der Stromverbrauch des NEO-M8N wird auf 45 mA im „MIN“ Mode und 28 mA in „MAX“ Mode reduziert
Die Präzision der Position ist im MIN Mode besser als im MAX Mode – abhängig von der Qualität der Satellitendaten

Sleep Modes und Stromverbrauch

Der Stromverbrauch des Gerätes wurde mit einem FNIRSI FN-058 USB Power Meter gemessen, und die theoretische Akkulaufzeit für einen 1800 mA LiPo Akku berechnet. Die Messwerte wurden für Sleeptime 20 s und 50 s bestimmt.
NEO-M8N
Modus Stromverbrauch 20s Akkulaufzeit Stromverbrauch 50s Akkulaufzeit
MIN 53.0 mA 33.9 h 49.2 mA 36.6 h
MID 39.5 mA 45.6 h 38.8 mA 47.4 h
MAX 43.5 mA 41.4 h 36.3 mA 49.6 h
Der Stromverbrauch des NEO-6M Moduls ist etwas höher, und noch höher für das ATGM336H – mit entsprechend geringeren Akkulaufzeiten.
Unabhängig vom verwendete GPS Modul werden in jedem Fall 24 Stunden Akkulaufzeit erreicht. Mit angeschlossenem USB Netzteil ist die Laufzeit unbegrenzt. Bitte beachten: Der Akku wird nur geladen, wenn das Gerät eingeschaltet ist.

Vergleich der drei genutzten GPS Module

NEO-M8N scheint für diesen Zweck das am besten geeignete der drei GPS Module zu sein: geringster Stromverbrauch der durch die vielfältigen Power Management Optionen weiter reduziert werden kann. Es nutzt die Satelliten der GPS, Beidou, Glonass and Galileo Konstellationen – was kürzere Fix-Zeiten und bessere Präzision der Position bedeutet. Es ist auch das teuerste und am schwierigsten zu bekommen.
Zu beachten: im MID Mode nutzt dieses Modul nur die GPS Satelliten, mit geringfügig reduzierter Positionsgenauigkeit. In MIN und MAX Modus nutzt es alle GPS Konstellationen.
NEO-6M nutzt einzig GPS Satelliten, und hat einen geringfügig höheren Stromverbrauch als das NEO-M8N. Es hat ebenfalls gute Power Management Optionen. Dies Modul ist deutlich günstiger als das NEO-M8N, überall zu bekommen und absolut ausreichend wenn die Empfangsbedingungen gut sind (also ohne Häuser oder Berge in der Umgebung, die einen großen Teil des Himmels verdecken).
ATGM336H nutzt die GPS, Beidou und Glonass Konstellationen. Allerdings war die Stabilität der Postion in meinen Tests deutlich schlechter als die des NEO-M8N. Power Management ist eingeschränkt: NMEA Messages können reduziert werden, und der „pedestrian“ Modus ist verwendbar. Die angeblich verfügbare „power saving“ Option hatte bei mir keinen Effekt. Deshalb hat dies Modul den höchsten Stromverbrauch aller drei getesteten GPS Module. Allerdings ist die Positioniergenauigkeit gut, wenn die Bedingungen gut sind, also freie Sicht zum Himmel, und eine gut aktive Antenne statt der mitgelieferten Mini-Antenne genutzt wird, die dem Modul meist beiliegt. Mit der Originalantenne können die Zeiten bis zum Fix viele Minuten betragen, und der Empfang ist auch mit Fix nicht gut. Preise und Verfügbarkeit sind vergleichbar mit dem MEO-6M.
Dies Modul sieht meist mehr Satelliten als das NEO-M8N, dennoch ist die Positioniergenauigkeit und die Stabilität der Position schlechter.

GPS Performance

Die folgenden Bilder zeigen die Performance des GPS der NEO-M8N und ATGM336H Module. Die Daten wurden in einem Park aufgenommen, mit einigen Bäumen. Zeit bis zum Fix waren in jedem Fall einige wenige Sekunden. Power Saving Modus „MIN wurde für die Bilder in der ersten Zeile genutzt, „MID“ für die zweite Zeile. Nach einigen Minuten Messung bin ich ca. 20 m weiter gegangen, um das Schiffsymbol von den Datenpunkten weg zu bekommen.
Ublox NEO-M8N ATGM336H
   

 

Das NEO-M8N limitiert sich selbst auf 12 Satelliten, das ATGM336H nutzt so viele Satelliten wie es bekommen kann. Für beide Module sind die Ergebnisse exzellent im Modus „MIN“, mit einer etwas größeren Verteilung für das ATGM336H. Die Verteilung ist im „MID“ Modus etwas breiter, aber immer noch recht gut.
Die Zahlen in der 3. Zeile von unten zeigen die Standardabweichung der Datenpunkte in X und Y Richtung.

Circuit diagram

Der Schaltplan liegt derzeit als Fritzing – Datei vor

Pinbelegung der Baugruppen

KY-040 Rotationsgeber

VCC 3.3V
GND GND
SW GPIO 26
DT GPIO 27
CLK GPI 22

Spannungsmessung

Die Spannungsmessung des Akkus erfolgt an GPIO 39 über eine Widerstandsbrücke mit zwei gleichen Widerständen von ca. 200 KOhm, die die gemessene Spannung auf die Hälfte herabsetzen.

VCC GPIO 39

ePaper Modul

BUSY GPIO 04 [15]
RST GPIO 16 [RES, 2]
DC GPIO 17 [D/C]
CS GPIO 05 [SS, 4]
CLK GPIO 18 [SCK, SCL, 18]
DIN GPIO 23 [MOSI, SDA, Data/ 23]
GND GND
VCC 3.3V

Buzzer

Es wird ein aktiver Buzzer für die Alarmierung verwendet. Der Pluspol des Buzzers ist mit der Versorgungsspannung (3.3V) verbunden, der Minuspol wird durch einen Schalttransistor S8050 durchgeschaltet. Für das Einschalten des Buzzers wird GPIO2 des ESP32 verwendet, der über einen 2K Ohm Widerstand mit der Basis (Pins2) des Transistors verbunden ist. Pin 1 (C) des Transistors ist mit GND verbunden, Pin 2 (b) mit GPIO2 über den 2K Widerstand, Pin 3 (E) mit dem Minuspol des Buzzers.

Transistor Basis via 2 K Ohm -> GPIO2

GPS Modul

Die Kommunikation mit dem GPS Modul erfolgt über eine serielle Schnittstelle. RX = GPIO15, TX = GPIO19. Auf der verwendeten Platine sind GPIO15 mit „SDA“ und GPIO19 mit „SCL“ beschriftet.

RX GPIO15 (SDA)
TX GPIO19 (SCL) |
GND GND
3.3 3.3 V

circuit board

Ich habe für dies Gerät keine neue Platine designed, sondern ein Board wiederverwendet, das ich vorher für einen Barographen verwendet habe. Alle dafür benötigten GPIOs und Anschlüsse stehen zur Verfügung, allerdings nicht alle gruppiert und korrekt beschriftet.
  • ePaper: verbunden wie vorgesehen
  • Buzzer: verbunden wie vorgesehen über einen S8050 Transistor. Dessen Basis ist über einen 2K Widerstand mit  GPIO2 verbunden
  • NEO-6M GPS Module: die Pins die ursprünglich für I2C vorgesehen waren, werden genutzt (3.3V, GND, GPIO 15 (SDA) und GPIO19 (SCL)
  • KY-040 Rotary Encoder: ist verbunden mit 3.3V und GND via  OneWire Verbinder, und mit GPIOs 22,26 und 27 über die nicht beschrifteten Reserve – Pins auf der linken Seite des Lolin Lite Boards

casing

Das Gehäuse inklusive Drehknopf wird aus PLA 3D gedruckt. Das STL File dafür ist im Github-Repository enthalten. Bitte beachten: die Datei enthält mehrere Teile, die vor dem Drucken durch den Slicer separiert werden müssen.

Haftungsbeschränkung

Dies Projekt ist ein Hobbyprojekt, und wird für Demonstrations-, Erprobungs- und Schulungszwecke zur Verfügung gestellt. Alle Hardware Designs, Software, Firmware und Dokumentation werden so wie sie sind, ohne explizite oder implizierte Garantien oder konkrete Funktionszusagen, und ohne Zusagen zur Vermarktbarkeit und Freiheit von Rechten Dritter, zur Verfügung gestellt. Autoren und Mitarbeitende sind nicht haftbar für direkte oder indirekte Schäden, inklusive Beschädigung von Eigentum, Datenverlusten, Körperliche Verletzungen, Feuer, Elektrische Gefahren oder sonstige rechtliche Konsequenzen die sich aus der Nutzung, Missbrauch oder der Nicht-Nutzbarkeit dieses Projektes ergeben. Dies Projekt ist nicht gedacht für die Nutzung in sicherheitskritischen, medizinischen, mobilen, industriellen oder kommerziellen Umgebungen. Der Nutzer allein ist verantwortlich sicherzustellen, dass Korrektheit, Sicherheit und Anwendbarkeit dieses Projektes für seinen Anwendungsfall gegeben ist, und außerdem dafür, Übereinstimmung mit allen anwendbaren Gesetzen, Regularien und Standards zu sichern. Nutzung dieses Projektes erfolge auf eigenes Risiko.