Mittwoch, 7. April 2021

Fernbedienung für den Pinnenpilot - Teil 3

Nachdem letzten Winter der Nachbau einer Fernbedienung für einen Raymarine Pinnenpiloten erfolgreich war, erfolgte jetzt der Einbau ins Boot und die Implementierung einiger Erweiterungen. Da die Fernbedienung über den Seatalk1-Bus kommuniziert, fällt so nebenher auch eine kleine Brücke von Seatalk1 nach NMEA0183 ab. Die will ich nutzen, um die Datensätze des Tiefenmessers, der Logge und des Pinnenpiloten für Openplotter verfügbar zu machen.

Eine zweite Idee dehnt die Nutzung der Fernbedienung aus. Wenn schon fernbedient werden kann, warum dann nicht auch andere Dinge. Als erstes steht die Deckbeleuchtung auf dem Wunschzettel. Es wäre doch angenehm, wenn man Abends im Dunkeln zum Boot kommt und vom Steg aus schon die Deckbeleuchtung einschalten kann. Ein weiteres Einsatzszenario wäre ein Fernbedientes Nebel- bzw. Signalhorn. Einmal eingeschaltet, gibt es automatisch alle 2 Minuten einen langen Ton ab. Durch die Kopplung mit dem Tiefenmesser kann auch der Tiefenalarm über das Signalhorn erfolgen. Der im Tiefenmesser integrierte Alarm ist so leise, dass der bei Motorfahrt nicht zu hören ist. Allerdings hat die Fernbedienung nur 4 Tasten, die auch nicht kombiniert werden können. Pinnenpilot und andere Funktionen werden wohl voraussichtlich nicht parallel genutzt werden. Deshalb sollte die Steuerung erkennen ob der Pinnenpilot aktiv ist oder nicht.

 

Relaisplatine montiert

Da passt die Platine gerade noch rein

Aber der Reihe nach. Zunächst hat die Fernbedienung ein kleines Gehäuse bekommen und es wurde noch eine Relaisplatine mit 4 Relais angeschafft. Die Relaisplatine hat noch Platz im Verteilerkasten mit den Sicherungen gefunden. Zum Pinnenpiloten und zum Tiefenmesser wurden die entsprechenden Leitungen gezogen und angeschlossen. Dann erfolgte der erste Test mit nahezu unmodifizierter Software. Damit lief die Fernsteuerung des Pinnenpiloten auf Anhieb (das hatte ich im Winter ja schon testen können). Jetzt habe ich erst einmal die Software um eine „Dump-Routine“ erweitert, um mir anzusehen was alles an Datensätzen auf dem Seatalk1-Bus unterwegs ist. Hier ein Ausschnitt der Beute (hexadezimal):

18:11:15.065 -> 184 C6 6A 1F 2 0 20 0 4 !
18:11:15.580 -> 19C C1 2E 0 !
18:11:15.674 -> 120 F1 92 10 !
18:11:15.956 -> 104 F2 64 0 ?
18:11:16.096 -> 184 C6 6A 1F 2 0 0 0 4 !

Der Anfang eines Datensatzes ist immer am gesetzten 9. Bit erkennbar, deshalb sind in der ersten Spalte immer dreistellige Folgen, die mit „1“ beginnen. Danach kommt der Typ des Datensatzes (84, 9C, 20, …). Die Bedeutung der eigentlich nicht öffentlichen Details wurde entschlüsselt und kann hier nachgeschlagen werden. Auf dem Seatalk1-Bus senden mehrere Geräte gleichzeitig, deshalb kann es zu Kollisionen und fehlerhaften Datensätzen kommen. Die Dump-Routine überprüft die allgemeine Konsistenz und gibt am Ende ein Okay aus als „!“ oder einen Fehler als „?“. Aus den Daten konnte ich die Tiefe, die Logge und vom Pinnenpiloten den Magnetkompass und den gewünschten Kurs auslesen (bei Kurskorrekturen sogar den Ruderwinkel). Kompassdaten gibt es aber über GPS und den Lagesensor im Plotter wesentlich genauer, deshalb sind die nicht so interessant. Wie oben bereits erwähnt ist die aktuelle Betriebsart des Pinnenpiloten interessant und kann auch ausgelesen werden. Wirklich neu und im Plotter noch nicht bekannt ist die aktuelle Tiefe und die Fahrt durchs Wasser. Viel hilft viel dachte ich und habe dann entsprechende Auswerteprogramme für die Datensätze geschrieben mitsamt einer Umsetzung nach NMEA0183. Als ich das dann in Betrieb nehmen wollte, ging erst einmal gar nichts mehr im Pro Micro Controller. Nach vielen Versuchen stellte sich dann heraus, dass der Speicher wohl zu knapp bemessen ist und es Konflikte mit dem Pufferspeicher des Displays gibt obwohl der Compiler noch ausreichend Platz für Variablen ausgewiesen hat. Vermutlich alloziert das Display den Pufferspeicher dynamisch zur Laufzeit und prüft nicht ob Speicher frei ist – sehr befremdlich. Durch etliche Versuche habe ich herausgefunden, dass knapp 1.400 Bytes frei bleiben sollten. Das hieß aber wiederum, den Code zu kürzen und auf einige Auswertungen zu verzichten. Deshalb habe ich mich auf Tiefe und Pinnenpilotstatus konzentriert. Die Fahrt durchs Wasser wurde erst einmal auskommentiert. Notfalls werde ich das (kleine) Display außer Betrieb setzen und lieber mehr auswerten.

19:07:51.163 -> $IIDBT,0.5,f,0.2,M,0.1,F,*3b
19:07:51.364 -> $IIHDT,0.0,T*22
19:07:56.127 -> $IIDBT,0.0,f,0.0,M,0.0,F,*3d
19:07:57.384 -> $IIHDT,0.0,T*22
19:07:59.392 -> $IIHDT,0.0,T*22
19:07:59.994 -> $IIVHW,0.0,T,0.0,M,20.0,N,10.8,K*5e
19:08:02.402 -> $IIHDT,0.0,T*22

Nachdem die neuen Sensordaten vom Seatalk1-Bus jetzt als NMEA0183 am USB-Anschluss des Controllers anliegen, war noch die entsprechende Einbindung in Openplotter (Signal K) erforderlich – darin habe ich aber mittlerweile etwas Übung und nach kurzer Zeit wurden die Daten angezeigt. Spannend wird es noch einmal, wenn das Boot tatsächlich im Wasser liegt, da der Tiefenmesser im Trockenen keine sinnvollen Daten liefert.

Die automatische Umschaltung der Fernbedienungssignale auf die Relaisausgänge funktioniert auch wie gewünscht. Sobald der Pinnenpilot auf Standby geschaltet ist, werden die Signale auf die Relais gegeben. Nur verdrahten muss ich die Relaisausgänge noch und ein Signalhorn anschaffen. 

Hier das Zusammenspiel in einem kurzen Video (leider hat Google das Video so stark komprimiert, dass die Anzeigen kaum lesbar sind).

Das Hintergrundgeräusch ist die Dieselheizung, ohne die das Arbeiten im Boot nach dem aktuellen Wintereinbruch kaum möglich gewesen wäre - die Außentemperaturen liegen zwischen 2 und 6 Grad.

Keine Kommentare:

Kommentar veröffentlichen