Forum: Mikrocontroller und Digitale Elektronik Programmierhilfe Autopilot (Kurshalter)


von Horst S. (horst26)


Angehängte Dateien:

Lesenswert?

[Moderator: Postanschrift gelöscht]


Guten Tag,
ich baue einen einfachen Autopiloten als Kurshalter für mein Boot.
Er soll ohne Tastatur und Display arbeiten.
Die Hardware habe ich fertig.
Die Programmierung soll über RN-Control und e-Kompass und Bascom 
erfolgen.
Der Kompass ist an I²C angeschlossen, das muss aber nicht so bleiben.
Das Hauptprogramm habe ich fertiggestellt.
Es fehlt die Übertagung vom Kompass (Slave) auf den Controller (Master) 
und die Differenzierung von Sollkurs und Istkurs ?
Das bisherige Programm lege ich als Datei bei.
Über entgeltliche Hilfe würde ich mich freuen.
MfG    Horst Sammler.

von Klaus (Gast)


Lesenswert?

Ich empfehle Dir dringend, Deine persönlichen Daten aus dem Beitrag zu 
löschen. Du kannst den Beitrag noch nachträglich editieren. Die email 
könntest Du stehenlassen, aber da Du angemeldet bist, bist Du von 
anderen Angemeldeten auch per persönlicher Nachricht zu erreichen.

von horst26 (Gast)


Lesenswert?

Warum und wie geht das? Bin ja neu hier. horst26

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

horst26 schrieb:
> Warum und wie geht das? Bin ja neu hier. horst26
Es geht nur, wenn du angemeldet bist und keine Antworten auf deinen 
Beitrag kamen.

Und bitte nur mit 1 Usernamen posten (also nicht mal als Gast und mal 
Angemeldet).

von Klaus (Gast)


Lesenswert?

Du bist neu im Internet? :-)
Nein, vermutlich meinst Du, dass Du neu hier im mikrocontroller.net 
bist.

Aber das ist hier keine Schonzone. Hier treiben sich die selben Leute 
herum, wie sonst auch im Internet. Muss ich noch mehr erklären?

von Phil J. (sunflower_seed)


Lesenswert?

Uiuiuiui...dann fangen wir mal an

Ich hab die Adresse nicht mehr lesen können aber sofern Google nicht 
lügt und du Segelkontakte nach WAT hast, dann gäbe es da vielleicht eine 
Möglichkeit einer Nachbarschaftsaktion

Ich kann selbst kein BASCOM flüssig.
Aber einfach so programmieren und Code hier rein schieben ist nicht.

Konkreter Tipp:

Mach doch einfach mal folgendes:
Entwerfe mal ein Diagramm wie das Programm ablaufen soll (inklusive 
Initialisierung) und welche Sensoren und Aktuatoren du besitzt und wie 
diese angesteuert werden.
Und welche Grenzbedingungen es gibt.

Und dann entwerfe für jeden fall eine Funktion / Sub in Bascom.

Im Zweifel läuft nämlich das Programm in der Theorie aber bei deinem 
Wissen vermute ich das dann eher zu ungeplanten Fehlschlägen kommt und 
das wäre etwas schade für dein Boot.

von horst26 (Gast)


Lesenswert?

Leider gibt es in dem obigen Programmansatz keine Zeilennummern. In der 
zweiten Zeile hinter „Do“ habe ich mal „Sollkurs - Istkurs“ nach rechts 
geschoben, ein Hochkomma dran gemacht und statt dessen den Wert 60 
eingegeben. Dann läuft das Hauptprogramm bis zum Schluss und treibt den 
Antriebsmotor wie gewünscht an. Ich brauche keinen Terminal.
Das Kurshalten funktioniert wie beim Fahrrad oder Auto, es muss 
pausenlos gegengesteuert werden. Diese Arbeit nimmt mir der Autopilot 
ab, wenn ich die jeweilige Kursabweichung berechnet bekomme ( ab Zeile 
25) Dies könnte geschehen über den I²C Bus oder SPI mit 
Analogkomparator oder vielleicht Interrupt? Meine Kunst reicht bisher 
nicht. Horst26

von Phil J. (sunflower_seed)


Lesenswert?

Waaaaas?
Kein Außenstehender kann verstehen was du willst oder es nur erahnen.

Wie willst du später den Sollkurs einstellen?

von Matthias S. (Firma: matzetronics) (mschoeldgen)


Lesenswert?

Du hast einen Sollkurs, den du manuell einstellst und einen Istkurs, der 
vom Kompass, Gyro oder GPS kommt.
Die Stellgrösse geht an die Ruderanlage - ob hydraulisch oder Servo, ist 
erstaml wurscht.
Ein rechnergesteuerter Regler (z.B. als PID) ermittelt die Abweichung 
von Soll zu Ist und steuert damit das Ruder. Es geht auch simpel als 
Zweipunktregler, das ist aber im Allgemeinen ein wenig unruhiger als ein 
sauber eingestellter PID.

Für einen solchen Regler musst du lediglich Ist und Soll auf den 
gleichen Bereich skalieren (wie z.B. Grad oder Radians). Der Regler gibt 
ein zur Differenz proportinales Stellsignal aus, bei grosser Abweichung 
also mehr, bei kleiner Abweichung weniger Signal.

Auf der Software Seite soltest du erstmal eine saubere Unterroutine für 
die Ansteuerung des Ruder bauen:
Input = 0 bedeutet Ruder still
Input < 0 Ruder auf Steuerbord
Input > 0 Ruder auf Backbord

Am besten natürlich proportional, so das ein grosser Input auch 
schneller das Ruder bewegt als ein kleiner.

Mit dieser Routine hast du schon mal einen Grossteil des Spaghetticodes 
von oben entwirrt.
Dann kannst du mal ganz simpel die Differenz deiner Kursgrössen bilden 
und damit die Ruderroutine füttern. Du musst natürlich dran denken, das 
dein Boot ein träges Tierchen ist, also nicht wie verückt am Ruder 
kurbeln lassen, sondern mit grossen Pausen zwischen den Messungen.

Sinnvoll ist eine Rückmeldung der Ruderanlage, evtl. mit einem 
Wegaufnehmer oder Stellpoti, wie bei einem Fernsteuerservo.

von Pandur S. (jetztnicht)


Lesenswert?

Nicht vergessen, mit zunehmender Geschwindigkeit muessen die 
Ruderausschlaege kleiner werden..

Naja, vielleicht auch nicht.

von Amateur (Gast)


Lesenswert?

>Auf der Software Seite soltest du erstmal eine saubere Unterroutine für
>die Ansteuerung des Ruder bauen:
>Input = 0 bedeutet Ruder still
>Input < 0 Ruder auf Steuerbord
>Input > 0 Ruder auf Backbord

Das wird wohl ein wenig "Flatterhaft".

Das wird wohl auf eine Ruder_Soll_Position_Routine hinauslaufen.

Z.B. (C) int Ruder_Position ( int Position ) { }
mit einem Rückgabewert für Fehler bzw. Position erreicht und einem 
Übergabewert von -MaxPosition über 0 (Geradeaus) nach +MaxPosition.

von Matthias S. (Firma: matzetronics) (mschoeldgen)


Lesenswert?

Amateur schrieb:
> Das wird wohl ein wenig "Flatterhaft".

Man kann ja die Toleranzen etwas grösser machen, z.B. mit einem Fenster 
von 2-4 Grad.

Entscheidend war für mich eher die Idee, den Code mal ein bisschen zu 
entwirren und Rechnerei und Steuerung voneinander zu trennen.

Immerhin gibts in Bascom bestimmt auch ein Gosub.

von horst26 (Gast)


Lesenswert?

Ich benötige 2 Kurse, die beide vom Kompass kommen und zur 
Kursabweichung differenziert werden müssen. Den Sollkurs erhalte ich 
beim Einschalten des Controllers, alle weiteren Kompassausgaben sind 
Istkurse. Horst26

von Wolfgang (Gast)


Lesenswert?

Normalerweise interessiert der Kompasskurs eigentlich weniger. Viel 
wichtiger ist der Kurs über Grund, also die Information vom GNSS

von Michael_ohl (Gast)


Lesenswert?

Dazu kommen dann noch so nette Spielereien wie adaptive 
Seegangserkennung, eine geschwindigkeitsabhängige Steuerung von 
Ruderausschlag und Gegenruder und wenn das ganze einigermaßen 
Funktionieren soll braucht's noch einen Gyros um den Drehwinkel des 
Schiff einigermaßen in die Rudersteuerung zu bekommen.
Hat mich ein halbes Jahr und hunderte von Seemeilen gekostet einen 
fertigen Robertson so einzustellen das der in der Lage war meine 
Schiffchen unter nahezu allen Seegangsbedingungen brauchbar zu Steuern. 
Und in dem Ding stecken 30 Jahre Erfahrung und tausend Stunden 
Entwicklung.


mfg
Michael

von Horst26 (Gast)


Lesenswert?

Hallo Wolfgang und Michael, ich kenne Eure Einwände alle, aber ich muss 
in der Adria immer erst einen Tag motoren, ehe ich zum Wind komme 
(Quarner Bucht). Für GPS (ich habe eine Maus für mein 
Navigationssystem)bräuchte ich ein permanentes Eingabesystem und dafür 
fehlt u.a. der Platz. Im Panel benötige ich nur einen Schalter, aber wir 
kommen vom Thema ab. Gruß Horst26

von Wegstaben V. (wegstabenverbuchsler)


Lesenswert?

das höre ich mir grade an:

http://cre.fm/cre187-paparazzi

vielleicht kannst du da ja ein paar Gedanken auf dein Boots-Projekt 
adaptieren

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.