Sonntag, 1. Juli 2018

Anstatt Segeln

Nachdem mir meine Gesundheit einen Strich durch die Rechnung gemacht hat und es diesen Sommer mit Segeln erstmal nichts ist, nutze ich die Zeit, um noch einige unerledigte Projekte für Kiri zu erledigen.
Eines davon ist das Mastsubsystem. Das besteht aus einem Windmesser und einem Sensor für den Mastwinkel, denn unser Mast ist drehbar gelagert. Der Windmesser, der auf der Mastspitze montiert ist, liefert natürlich die Windrichtung relativ zum Mast. Um die Windrichtung relativ zum Boot zu erhalten, muss der Mastwinkel noch zur gemessenen Windrichtung addiert werden.
Den Windmesser hatte ich schon vor einiger Zeit aus den USA bestellt. Er ist sehr einfach aufgebaut. Für die Messung von Windgeschwindigkeit und Windrichtung besitzt er nur zwei Reed-Relais. Die Frequenz der Impulse ergibt die Windgeschwindigkeit und die Phasenverschiebung zwischen den beiden Relais die Windrichtung.

Windmesser von Peet Bros..
Um diese Impulse in NMEA-Nachrichten umzuwandeln, ist etwas Intelligenz nötig. Die wird in Form eines Arduino Nano bereitgestellt. Der Anschluß an den Schiffsserver erfolgt über ein 5m langes USB-Kabel, das sowohl die Stromversorgung als auch die Kommunikation besorgt.
Die "CPU" des Mastsubsystems mit Überspannungsschutz, Tiefpassfilter und Entkopplungskondensatoren.
Die Wahl fiel auf den Arduino, weil bereits ein anderer Segler damit und mit dem Windmesser von Peet Bros. eine Lösung für ein Windinstrument entwickelt hatte. Nachdem ich $15 per PayPal auf sein Konto eingezahlt hatte, war am nächsten Tag der Quellcode per Email da. 
Natürlich musste ich wegen des drehbaren Mastes den Code noch modifizieren. Winkelsensoren für Masten gibt es wenige am Markt, und was ich gesehen habe, ist teuer und gefällt mir nicht. Meine Lösung sieht wie folgt aus:
  • In den Mastfuß wurde ein Neodym-Scheibenmagnet von 10mm Durchmesser integriert. Der Magnet ist nicht axial sondern diametral magnetisiert. Damit liegt die Nord-Südpol-Richtung des Magneten quer zum Mast und kann so als Indikator für die Mastdrehung verwendet werden.

Das untere Ende des Masts. In der Mitte des Edelstahlfußes erkennt man schwach den Magneten.
  •  Auf der Trägerplatte für den Mast befindet sich ein Kugelkopf, auf dem der Mast rotieren kann. In diesen Kugelkopf wurde eine 7mm-Bohrung eingebracht, die auch durch die Trägerplatte und das Deck geht. In diese Bohrung wird der Sensor samt Zuleitung eingeklebt.
Die Mastaufnahme mit Loch für den Winkelsensor

  • Bei dem Sensor handelt es sich um einen Hall-Sensor mit integrierter Treiberelektronik. Eigentlich enthält der Chip zwei Hallsensoren, die im Winkel von 45° gegeneinander verdreht sind. Dadurch liefert der eine Sensor den Sinuswert des Winkels zum Magneten, der andere den Cosinuswert. Bei dem Chip handelt es sich um einen ADA4571, der in der Diagonalen 6,5 mm groß ist, und so gut in das Loch passt. Die Sinus- und Cosinuswerte werden als analoge Spannungen zur Verfügung gestellt, die von den Analogeingängen des Arduino digitalisiert werden können.
    Ich hatte es vorher mit einem noch kleineren Chip versucht, einem AAT001-10E. Bei sechs Anschlüssen auf 2,5x2,5mm Kantenlänge versagten allerdings meine Lötkünste.
ADA4571 mit angelöteter Zuleitung.
 Entsprechend habe ich dann den Code für den Arduino modifiziert. Jede halbe Sekunde misst der Arduino nun die Sinus- und Cosinuswerte des Winkelsensors und ermittelt daraus den Mastwinkel, der dann zu der berechneten Windrichtung hinzugezählt wird.
Natürlich muss das Ganze auch kalibriert werden, um Toleranzen in den beiden Hall-Sensoren und den Analog-Digital-Wandlern auszubügeln. Das lässt sich allerdings bequem am Schreibtisch erledigen, indem man einen gleichartigen Magneten vor dem Sensor rotieren lässt und die Minima und Maxima der Sinus- und Cosinusspannungen ermittelt.
Nach Einbau in das Boot müssen noch die Offsets eingestellt werden, denn es ist kaum anzunehmen, dass sowohl Mastsensor, als auch Magnet und Windmesser winkelgenau montiert wurden. Beim Offset für den Mast erfolgt ein entsprechendes Kommando an den Arduino, dann wird der Mast in neutrale Position gedreht, anschließend erfolgt ein weiteres Kommando. Der gemessene Winkel wird im nichtflüchtigen Speicher festgehalten und gilt fürderhin als Offset. Beim Offset für den Windmesser wird dem Arduino ein expliziter Winkelwert übermittelt. All das kann vom Schiffserver aus über eine Terminal-App erfolgen.
 Soweit funktioniert das alles schon recht gut. Bin nun gespannt, wie es sich in der Praxis bewährt.