Freitag, 12. April 2019

Windmesser Teil 2

Die Bauteile kamen aus Deutschland und waren recht flott da, auf die Platine (aus China) musste ich bis heute warten. Nachdem der Postbote mittags geklingelt hatte und das Päckchen brachte, war die Nachmittagsbeschäftigung klar 😀.
Bestückte Platine

Platine Rückseite
Das Warten hat sich gelohnt. Die Platine ist professionell gefertigt - das hätte ich in Heimarbeit nie so gut hinbekommen. Jetzt kommt Spannung auf, ob Fehler im Entwurf sind, wird sich gleich zeigen.

Provisorischer Anschluss an den Windmess-Geber
Den Geber habe ich provisorisch angeschlossen und die Platine dann mit der Arduino-IDE verbunden.
NMEA0183 Datensätze auf der Entwicklungsumgebung

Danach kam die große Erleichterung. So weit funktioniert alles wie es soll, die NMEA0183-WIMWV Datensätze kommen mit sinnvollen Daten an. Zwischenzeitlich hatte ich ja die OpenPlotter-Software auf dem Raspberry Pi aktualisiert. Jetzt möchte ich noch sehen, ob die Daten bei OpenPlotter ankommen.
Auch hier sieht es gut aus. Nach dem Konfigurieren des neuen seriellen Gerätes liefert Signal-K die gewünschten Daten in der grafischen Anzeige. Die nächsten Arbeitsschritte werden am Boot erfolgen. Dort muss die Platine noch einen geeigneten Platz finden und angeschlossen werden. Dann wird sich in der Praxis zeigen, ob die Daten brauchbar sind. Ich vermute, dass noch eine softwareseitige Dämpfung in der Richtungsanzeige eingebaut werden muss und die gemessene Windgeschwindigkeit muss noch irgendwie kalibriert werden. Da fehlt mir noch der zündende Funke. Man könnte den Geber bei wenig Wind aus dem Autofenster halten und die Fahrtgeschwindigkeit mit der Windgeschwindigkeit gleichsetzen.

Freitag, 5. April 2019

Touch Display mit Raspbian Stretch

Nach den positiven Erfahrungen mit OpenPlotter in der letzten Saison wollte ich die gesamte Plattform aktualisieren. Das aktuelle OpenPlotter-Image basiert auf Rasbpian Stretch - und damit fingen die Probleme an. Die rechte Maustaste ließ sich nicht mehr simulieren und mit Touch-Gesten war das System fast nicht mehr bedienbar. Die Treiberinstallation für den Monitor bezieht sich auf ältere Distributionen und funktioniert nicht mehr. Nach dem Durchlauf des Installationsscriptes war der Raspi mitsamt X-Window-System in einer Boot-Schleife. Deshalb habe ich die Installation in Einzelschritten vorgenommen und angepasst.

Zunächst sollte das System aktualisiert werden und anschließend werden die Pakete evdev (erweiterte Maus- und Tastaturunterstützung) und ein Kalibrierungswerkzeug installiert.

sudo apt-get update && sudo apt-get -y upgrade
sudo apt-get install -y xserver-xorg-input-evdev xinput-calibrator

Danach sollte die Datei config.txt im boot-Verzeichnis angepasst werden. Das kann vorab schon direkt nach dem Kopieren eines Images auf dem eingebundenen Image erfolgen oder später auf dem laufenden raspbian. Ggf. ist das Display bei unmodifizierter Datei noch nicht nutzbar.
sudo nano /boot/config.txt
Ergänzung/Anpassung in config.txt.
# 10.1“ LCD Display
hdmi_group=2
hdmi_mode=87
hdmi_cvt 1024 600 60 6 0 0 0
dtoverlay=ads7846,cs=1,penirq=25,penirq_pull=2,speed=50000,keep_vref_on=0,swapxy=0,pmax=255,xohms=150,xmin=200,xmax=3900,ymin=200,ymax=3900
Nach dem Editieren den Editor nano mit Strg-O, Strg-X schließen. Falls der Touchscreen noch nicht nutzbar war, sollte das System jetzt neu gestartet werden:
sudo reboot
Im Hauptmenü sollte jetzt „Einstellungen > Touchscreen Kalibrieren“ verfügbar sein.
Toucscreen kalibrieren

Zum Kalibrieren werden vier Punkte dargestellt, die nacheinander per Touch berührt werden müssen. Danach werden die Kalibrierungsdaten dargestellt. Der Teil zwischen „Section“ und „EndSection“ wird in die Zwischenablage kopiert.
Kalibrierungsdaten kopieren

Falls noch nicht vorhanden, sollte das Konfigurationsverzeichnis angelegt werden.
sudo mkdir -p /usr/share/X11/xorg.conf.d
Jetzt wird die Konfigurationsdatei erstellt (ggf. geöffnet falls schon vorhanden).
sudo nano /usr/share/X11/xorg.conf.d/99-calibration.conf
Der erste Teil des Inhalts (bis zur Leerzeile) wird aus der Zwischenablage eingefügt. Der zweite Teil sollte angehängt werden, um die rechte Maustaste simulieren zu können.
Section "InputClass"
        Identifier      "calibration"
        MatchProduct    "waveshare HDMI/VGA/AV RTD2660H Viedo Board"
        Option  "MinX"  "43"
        Option  "MaxX"  "65492"
        Option  "MinY"  "73"
        Option  "MaxY"  "65462"
        Option  "SwapXY"        "0" # unless it was already set to 1
        Option  "InvertX"       "0"  # unless it was already set
        Option  "InvertY"       "0"  # unless it was already set

        Driver  "evdev"
        Option  "EmulateThirdButton" "1"
        Option  "EmulateThirdButtonTimeout" "1000"
        Option  "EmulateThirdButtonMoveThreshold" "300"
EndSection
Nach dem Editieren den Editor nano mit Strg-O, Strg-X schließen. Nach einem Reboot sollte die Touch-Maus besser funktionieren und auch die rechte Maustaste simulieren (Finger für 1 Sekunde auf dem Display lassen).
sudo reboot
Das Problem hat mich viel Zeit gekostet und ich hoffe, die Beschreibung hilft anderen diese Zeit einzusparen.

Dienstag, 2. April 2019

Windmesser Teil 1

Der Winter war lang und die Segelsaison rückt in greifbare Nähe 😅. Auf der langen ToDo-Liste vom Herbst steht auch die Windmessanlage. Wie sich herausgestellt hat, ist das Display der Anzeige defekt und die Elektronik im Display komplett vergossen. Die Anlage (VDO CompactWind) gibt es schon lange nicht mehr und Ersatzteile sind nicht verfügbar. Also habe ich mich entschlossen, das Anzeigeinstrument nicht weiter zu verwenden.

Meine Hoffnung lag auf dem Geber (VDO A2C59501983), der an der Mastspitze befestigt ist. Den habe ich in aller Ruhe durchgemessen auch aus dem alten Handbuch noch Informationen gezogen.
Geber VDO Windmessanlage
Erfreulicherweise ist der noch intakt und liefert am wasserdichten Rundstecker folgende Anschlüsse:
  1. 10 V
  2. 8 V
  3. cos
  4. Minus / GND
  5. sin
  6. Windgeschwindigkeit als Rechteck-Impuls
Den Innenaufbau kann ich nur erahnen, da es keinen Grund gab, den Geber zu öffnen. Ich vermute für die Richtungsanzeige zwei Hall-Sensoren, die im 90°-Winkel zueinander stehen. Die Versorgung erfolgt über die 8 V und bei cos / sin kommen die analogen Winkelwerte an. Der Rechteck-Impuls-Ausgang ist ein offener Kollektor, der per Pullup-Widerstand auf einen Sollpegel gehoben werden kann. Da ich noch zwei Arduino-Nano Platinen herumliegen hatte, war schnell die Idee geboren, die Signale auszuwerten.
Arduino Nano auf dem Breadboard
Mit einigen Zeilen C-Code für den ATmega328, einigen Widerständen, Steckbrücken und zwei Labornetzteilen war es schon getan. Auf der Arduino-Nano Platine gibt es Analogeingänge mit 10bit-A/D-Wandlern, die die cos / sin Signale ausreichend genau digitalisieren. Über einen Interrupt-Eingang konnte die Drehzahl (Rechteck-Impuls) ausgewertet werden. Durch den Zusammenhang
sin α cos α =tan α
ergibt sich aus dem Verhältnis der Werte von Pin 5 zu Pin 3 der Tangens des Windwinkels. Durch die Verhältnisbildung wird auch gleich eine Unabhängigkeit von der Versorgungsspannung erreicht, da davon auszugehen ist, dass Veränderungen sich auf beide Werte beziehen. Bei der Berechnung der Windgeschwindigkeit kommt die Schnelllaufzahl des Kugelschalenanemometers ins Spiel. Die liegt lt. Wikipedia zwischen 0,3 und 0,4. D.h. die Windgeschwindigkeit entspricht der Winkelgeschwindigkeit der Schalen (Mittelpunkt der Schale). Da mein Geber drei Impulse pro Umdrehung liefert, entspricht die Windgeschwindigkeit dann annähernd der Winkelgeschwindigkeit.

Soweit die Theorie. Ich habe jetzt eine Platine mit EAGLE entworfen und die Bauteile bestellt.