Samstag, 14. November 2020

Fernbedienung für den Pinnenpilot

Herbst- und Winterzeit ist Bastelzeit 😎. In diesem Sinn habe ich mich die letzten Tage mit einer Fernbedienung für den Pinnenpiloten beschäftigt. Dafür gibt es schon eine schöne Anleitung bei Github. Also alles ganz einfach - dachte ich. Zunächst wurden die Teile und die Platinen bestellt. Zwischenzeitlich konnte ich mich mit den Programmen für den Arduino Mikrocontroller beschäftigen. Verwendet wird ein lizenzierter Nachbau des Arduino Leonardo (Sparkfun ProMicro). Da die Platinen mit einer Mindestanzahl von 3 bestellt werden mussten, habe ich mich entschieden gleich drei Fernsteuerungen zu bauen. Abnehmer aus dem Neptun-Segel-Forum haben sich schon gefunden.

Die Fernbedienung besteht aus einem handelsüblichen Handsender (433 MHz), der angelernt werden kann (z.B. für Garagentore) und einer Platine mit einem 433 MHz Empfänger, dem ProMicro und einem Pegelwandler (auf 12 V) für das Seatalk1 Protokoll. Seatalk1 ist ein proprietäres Datenprotokoll von Raymarine, das aber weitgehend entschlüsselt ist. Mein Pinnenpilot (Raymarine ST1000 Plus) hat einen Seatalk1-Eingang über den er fernsteuerbar ist.

Eine Besonderheit von Seatalk1 ist die Verwendung von 9 Bit Wörtern. Der ProMicro hat aber nur Unterstützung (UART) für 8 Bit Worte, die bei Mikrocontrollern üblich sind. Findige Entwickler haben eine Kernbibliothek (HardwareSerial) des Arduino modifiziert, so dass 9 Bit Worte gesendet und empfangen werden. Die Anpassung der Kernbibliothek war die erste Hürde auf meinem Linux-System. Einfaches Patchen mit Systemrechten ist zwar möglich, nach dem nächsten Update durch die Paketverwaltung (Snap) wären die Änderungen aber wieder weg. Für Linux habe ich bislang keine dauerhafte Lösung gefunden - ein Ablegen des Patches in der benutzerspezifischen Konfiguration (~/snap/arduino/current/.arduino15/packages/SparkFun/hardware/avr/1.1.13/cores/arduino) hat nicht funktioniert. Deshalb musste ich auf Windows ausweichen. Dort konnte ich die Core-Dateien erfolgreich ersetzen und nach einem Neustart der IDE wurden sie verwendet. Nachdem weitere Bibliotheken nachgeladen waren, konnte ich die Software erfolgreich übersetzen.

Als erstes kamen die Handsender und zum Zeitvertreib konnte ich diese mit einem der Programme aus dem Github-Repository (_433_Programming_New) und einem 433 MHz Sender schon mal mit individuellen Codes versehen.

Nach und nach kamen auch die Bauteile und gestern die drei Platinen. Das Bestücken ging recht zügig bis ich festgestellt habe, dass die ProMicro-Platine nicht passt. Die gelieferten ProMicros sind breiter und länger als auf der Platine vorgesehen. Sie sind zwei Reihen breiter als auf dem Raster vorgesehen und auch etwas länger. Glücklicherweise wird auf einer (Außen-)Seite nur ein Pin verwendet, deshalb konnte ich die Platine einseitig wie vorgesehen einlöten und auf der anderen Seite den einen Pin mit einem Draht verbinden. Durch die vergrößerte Länge stößt der MicroPro an den 433 MHz Empfänger und dieser muss etwas schräg eingelötet werden.


Nicht schön, aber funktioniert

Ein weiteres Manko der gelieferten Platinen sind fehlende Befestigungslöcher. Die Platinen müssen im Gehäuse eingeklemmt oder festgeklebt werden. Zunächst muss die Fernbedienung aber erst einmal auf dem Boot getestet werden. In Bayern, fernab vom Boot konnte ich nur feststellen, dass die Signale des Handsenders ankommen und vom ProMicro wieder ausgegeben werden.


Da an der Seatalk1-Leitung momentan nichts angeschlossen ist, wird im Leerlauf ein "Send Error" angezeigt. 

Falls die Fernbedienung auf dem Boot funktioniert, werde ich überlegen ob ich nicht eine neue Platine entwerfe, die etwas größer ist, zum vergrößerten ProMicro passt und auch Befestigungslöcher hat. Das vergrößerte ProMicro-Board hat auch einen Vorteil: Die Mini-USB-Buchse, die beim Vorgänger für Kritik sorgte (brach leicht ab) ist jetzt an vier statt an zwei Laschen angelötet.

Da die Platine nicht nur auf dem Seatalk1-Bus schreiben, sondern auch lesen kann, verfolge ich noch ein weiteres Ziel: Das Einlesen von Daten von meinem Tiefenmesser und der Logge (ein Raymarine Bidata ST30) und Umwandlung in NMEA0183. Damit könnten dann die Wassertiefen und die Fahrt durchs Wasser (STW) in den Plotter eingespeist werden. Sobald ich wieder am Boot in MeckPomm bin, geht es mit dem Projekt weiter 😀.