Mittwoch, 25. November 2020

Fernbedienung für den Pinnenpilot - Teil 2

Ursprünglich wollte ich die Fernbedienung für den Pinnenpiloten bei mir am Boot testen, aber einer meiner Abnehmer aus dem Neptun-Forum konnte mir schon nach wenigen Tagen zurückmelden, dass die Platine an seinem Pinnenpiloten nicht funktioniert. Das hat uns beiden keine Ruhe gelassen und mein Forenkollege hat mir seinen Pinnenpiloten mitsamt Netzteil per DHL geschickt, so dass ich mir das Problem direkt ansehen konnte.

Die gesendeten Daten kamen auf dem Seatalk-Bus wie gewünscht an, allerdings funktionierte der Rückweg bis zum seriellen Eingang beim Arduino nicht. Der Arbeitspunkt der Eingangsschaltung (Pegelwandler) lag zu hoch, so dass am seriellen Eingang permanent ein hoher Pegel lag. Durch Austausch eines Widerstands im Eingangsspannungsteiler (27 ㏀ durch 2,7 ㏀ ersetzt) konnte der passende Arbeitspunkt hergestellt werden und alles funktioniert jetzt wie gewünscht.

Seitdem ist auch der "Send Error" aus dem Display verschwunden. Das hatte nichts mit einer offenen Leitung zu tun.

Dann werde ich hoffentlich bei meinem Boot keine Überraschung erleben 😎. Spannend wird es dann wieder, wenn ich mein Echolot auslesen will. Dazu dann später mehr.

Samstag, 14. November 2020

Fernbedienung für den Pinnenpilot - Teil 1

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.

Update vom 09.04.2021: Die Anpassung der Kernbibliothek unter Linux funktioniert, wenn man den kompletten Hardware-Ordner (/snap/arduino/current/Arduino/hardware) von root in das lokale Snap-Verzeichnis kopiert und dort die 3 HardwareSerial-Dateien ersetzt.

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 😀.