Zu beachten ist, dass dieses Projekt ständig verfeinert/vereinfacht/erweitert wird. Änderungen im Schaltplan und auf den Platinen sind also durchaus möglich.

Bei Interesse können ggfs. unbestückte Platinen und Code angefragt werden.

 

 tiefesch mod

 

Vor ein paar Jahren habe ich schon mal einen Beitrag zum Thema Lageregler im Selbstbau veröffentlicht. Damals hatte ich die Schaltung mit einem PICAXE realisiert, musste aber erkennen, dass die Servofunktion im PICAXE BASIC firmwareseitig Einschränkungen hat. Ausserdem arbeitet der PICAXE nur mit Integern (Ganzzahlen), was die Auflösung ebenfalls einschränkt.
Eine andere Möglichkeit wäre gewesen, so eine Schaltung mit Hilfe von Arduino zu bauen. Was das genau ist, das setze ich an dieser Stelle mal voraus und gehe nicht weiter auf Arduino selbst ein. Leider bin ich immer noch recht unbegabt was die Programmierung angeht und Arduino ist schon mal garnicht meins. Alleine die Syntax, wer denkt sich so einen Mist eigentlich aus??? Meine Programmierunkenntnisse spiegeln sich für den Kenner auch im Code wieder. Es gibt zum Beispiel keine anständige Regelschleife à la PI oder gar PID. Der Fachmann wird sich die Haare raufen, aber für mich langts und es funktioniert. Das Dingen ist auch "Work in Progress", es wird also mehr oder weniger kontinuierlich weiterentwickelt.

Wie auch immer, vor ein paar Wochen habe ich dann bei Youtube ein Video eines Selbstbaulagereglers gefunden:


Freundlicherweise hat der Autor gleich einen Sketch und die Verdrahtung veröffentlicht. Da sollte sich doch etwas draus machen lassen... 
Die Schaltung basiert auf den allseits bekannten Modulen und Platinchen, die man so von Amazon oder Ebay kennt. Ich habe für das Inklinometer auf einen MPU6050 Klon zurückgegriffen, der Prozessor ist ein "Leonardo", oder auch Pro Micro genannt. Diese Platinen sind nicht teuer und ausreichend. Ich habe zwar mehr als die im Video erwähnten 5 Euro bezahlt, aber der Spass war es wert. Ausserdem sollte sich im Laufe des Baus zeigen, dass die erzielten Funktionen des Reglers kaum mit gekauften Reglern zu vergleichen sind. Soviel vorab. 

Um es mit den Worten von gefühlt jedem zweiten Youtube Selbstdarsteller zu sagen: "Lets get started!"

Es gibt eine grosse Einschränkung der Schaltung im Video: Der verwendete Stufenschalter schaltet zwischen keine, mittlere und grösserer Verstärkung um. Das gefiel mir so nicht, da muss was Besseres her. Also wurde im ersten Schritt ein Poti eingefügt, mit dem die Verstärkung des Inklinometers beeinflusst werden kann. Mit einem fest im Code hinterlegten Teiler kann man die Verstärkung nochmal beeinflussen, die sollte so aber für einen weiten Bereich funktionieren.
Damit man sehen kann, was das Dingen so macht und vor Allem, wie sich die Variablen ändern, wurden die schon vorhandenen Zeilen für die Ausgabe erweitert. Das ist ein grosser Pluspunkt beim PICAXE BASIC, bei dem man auch im laufenden Betrieb debuggen kann und leider ein grosses Mako bei BASCOM. Hier muss man auf jeden Fall ein Display dranpappen wenn man was an Variablen etc sehen will. Gefällt mir garnicht... Zurück zum Code. Schick wäre es ja, ein kleines OLED Display optional anzustecken um am See bei Bedarf die Variablen auslesen zu können. Diese Displays sind nicht teuer und ich hatte die von anderen dilettantischen Stümpereien hier noch rumliegen, also ran damit. Ohne viel Schnörkel werden nun einige Daten angezeigt. Wird das Display abgezogen, so wird auch der Datenstream aufs (nicht vorhandene) Display übersprungen und so wieder etwas Geschwindigkeit gewonnen. Schick wäre natürlich ein Menü mit dem man Einstellungen ohne PC ändern kann, aber da bin ich nun wirklich zu doof für und der Chip hat auch (vermutlich) zuwenig Speicherplatz (puuuuuh)...

PXL 20230906 140431250

Bei meinen alten analogen Lagereglern fand ich es immer gut, dass es eine Möglichkeit gab, um die Maximalausschläge des Servos zu begrenzen um so Gestänge und Servo zu schonen. Also wurde die Schaltung um zwei Potis erweitert, die genau diese Funktion nachbilden. Gleichzeitig wurde ein Jumper eingebaut, mit dem das Servo umgepolt werden kann, sodass hier nichts umgebaut werden muss oder man gar das Servo elektrisch/mechanisch umpolen muss.
Bis hierhin war der Funktionsumfang des Lagereglers schon mal ganz nett angewachsen. Jede Funktion wurde Schritt für Schritt hinzugefügt. Zwischendurch immer mal wieder auf dem Trockenen getestet und für gut befunden.
Nun wurde noch ein Resettaster angebaut, mit dem man bei Bedarf das Inklinometer resetten und somit nullen kann. Bei ebenem Kiel gedrückt wird die momentane Lage des Inklinometers als Null angenommen und bis zum abschalten der Spannung gespeichert. Ab und an ganz praktisch. Dennoch wird beim Einschalten der Platine die momentane Lage als waagerecht angenommen. Sollte sie es nicht sein, so kann man mit dem Knopf nachhelfen.

PXL 20230906 135959971.MP

Ich hatte mich die ganze Zeit gefragt, ob es möglich wäre, einen Drucksensor hinzu zu fügen. Im Land der aufgehenden Sonne hatte ich schnell ein paar Drucksensoren mit einem Druckbereich von 200kPa, sprich 10m Maximaltiefe, gefunden und flugs bestellt. Die Dinger haben ein analoges Ausgangssignal, welches von einem kleinen Chip auf der Platine praktischerweise aufbereitet wird. Wie nett... Dummerweise hatten die Dinger Lieferzeit und den gleichen Sensor bei Amazon zum achtfachen des Preises bei gleicher Lieferzeit zu bestellen fand ich ziemlich semidufte. Also nach temporären Ersatz gesucht und bin auf einer alten Koptersteuerung fündig geworden. Der Sensor hatte zwar etwas andere Daten und keinen Anschluss für einen Druckschlauch, aber da konnte ich mit einem kleinen Drehteil nachhelfen. Die Daten müssten dann halt beim neuen Chip angepasst werden, aber erstmal war ich heiss da drauf das Ding zum laufen zu bringen.

Was erstaunlich unspektakulär war...

PXL 20230906 140022086

Nachdem der Drucksensor an die Platine getackert war und auch die entsprechenden Variablen im Programm eingebaut wurden, konnte ich anhand der ausgeworfenen Zahlen auf dem Display die gemessenen Werte sehen. Diese wurden ins passende Verhältnis umgerechnet (das gute, alte Learning by Doing), und schon bewegte sich das Servo bei Druckbeaufschlagung. Ha, wie geil... Beim Start des Programms wird der momentane Luftdruck genommen und als Offset abgespeichert. Danach wird der Luftdruck erneut gemessen und der Offset abgezogen, sodass ich einen Wert von Null erhalte. Dieser Wert steigt, wenn ich den Druck erhöhe und fällt wenn der Druck sinkt. Er wird einfach nur in die Formel eingetragen, deren Resultat am Servo ausgegeben wird. Wie gesagt, keine PID oder PI Regelschleife! Dummerweise hatte ich hier einen Denkfehler gemacht. Durch Temperaturanstieg oder -Abfall konnte dieser Wert auch negativ werden, ebenfalls wenn man die Luft aus dem Sensor sog. Das hatte zur Folge, dass die Variable bei Temperaturabfall einen fiesen Übertrag erzeugte, der das Servo in den Endausschlag brachte. Eine Umdeklarierung der Variable brachte das korrekte Resultat.
Kaum war auch diese Hürde genommen, habe ich mir überlegt, ob man die Verstärkung auch per Sender einstellen kann. Der Prozessor hat mehrere Interrupt Eingänge mit denen der Empfänger ausgelesen werden kann. Das Resultat wird dann in einem Wert zwischen 0 und 180, korrespondierend zu 1ms und 2ms, abgespeichert. Ein auslesen eines zusätzlichen Empfängerkanals könnte also dazu genutzt werden, um das Poti auf der Platine zu ersetzen. Den dazu entsprechenden Wert könnte man nach erfolgreichem Abschluss der Probefahrten auslesen und am Poti einstellen, sodass der Kanal wieder für andere Dinge frei wäre wenn man dann Not an proportionalen Kanälen hat. Also wurde im Sketch der Wert des Verstärkungspotis durch den Wert des Empfängerausgangs ersetzt und siehe da, auch das funktionierte einwandfrei. Bei fehlendem Sendersignal ist die entsprechende Variable Null, in dem Fall wird aufs Poti umgeschaltet und dieser Wert abgefragt. Geht also automatisch.

Was nicht ganz so automatisch ging, war die Sache mit der Rückwärtsfahrerkennung. Es gibt einen weiteren Eingang, welcher parallel zum Fahrreglerausgang des Empfängers liegt. Hier wird die Rückwärtsfahrt erkannt und in dem Fall der Wert des Inklinometers mit -1 multipliziert und somit umgepolt. Damit sollte das Boot bei Rückwärtsfahrt nicht mit übers Heck abtauchen wie man das bisher so kannte

Bis hierhin hatte alles recht gut funktioniert, aber echte Tests standen natürlich noch aus. Zuerst einmal habe ich alle Komponenten bis auf das Display auf eine Lochrasterplatine gepackt. Um alles zu verkleinern hatte ich zuerst geplant, den Pro Micro gegen einen ATTiny84 zu ersetzen, aber der hätte nur einen Interrupt gehabt und somit hätte ich auf die Rückwärtsfahrerkennung und die Verstärkung vom Sender aus verzichten müssen. Ausserdem hat der viel zu wenig Speicher, bis zu dem Programmierstand hierhin benötige ich schon 23kB dank der verwendeten Bibliotheken z.B. für das I2C Inklinometer, das Display und die Servoansteuerung. Ein weiterer Vorteil des Pro Micro ist die USB Schnittstelle onboard, so spart man sich einen Programmieradapter und kann den Chip direkt aus der Arduino IDE flashen. Ich habe hier allerdings bemerkt, dass es ab und an Probleme mit dem Beschreiben gibt. Abhilfe hat hier ein Taster zwischen Reset und Minus geschaffen, der zuerst gedrückt wird, dann startet man mit gedrücktem Taster den Schreibvorgang bis im Statusfenster der IDE die Meldung kommt, dass das Kompilieren abgeschlossen wurde. Nun Taster loslassen und der Pro Micro wird beschrieben.

PXL 20230908 173946386PXL 20230908 173931570

Nach gefühlt ewigem Warten wurde nach einiger Zeit auch der Drucksensor geliefert. Der Sensor sitzt oben auf einer kleinen Platine, auf der Unterseite versteckt sich ein Chip, der das Ausgangssignal linearisiert und schmackhaft aufbereitet. Und das alles für äusserst schmalen Schekel, sehr nett vom Hersteller. Der Chip konnte auf den noch freien Platz der Platine aufgelötet werden und ersetzte den Testsensor 1:1.

Bis auf ein leichtes, aber ziemlich nerviges Servozittern funktionierte alles soweit. Die Herkunft des Servozitterns vermutete ich in einen schwankenden Wert des Inklinometers. Nachdem das Inklinometer aus der Ausgabezeile des Programms gelöscht wurde, verschwand das Zittern. Ein Indiz für die Richtigkeit meiner Vermutung. Ich habe dann einige Zeit mit der Suche nach einer Verbesserung des Inklinometersignal zugebracht. Tatsächlich war die Lösung recht einfach. Auch hier hatte ich es in der Deklaration der Variablen zu gut gemeint. Die Nachkommastellen schwankten wild hin und her, also wurde aus einem "float" ein "int" gemacht und somit die Nachkommastellen abgeschnitten. Schon wurde das Zittern deutlich weniger. In einem Forenbeitrag hatte ich darüber gelesen, einen Teil des alten Wertes zu dem neu eingelesenen Wert im Verhältnis 10% alt zu 90% neu hinzu zu addieren. Um dem letzten Zittern den Garaus zu machen hatte ich das in den Code eingebunden, aber das machte die Sache nicht wirklich besser, also wieder raus damit. Der Rest des Zitterns konnte im Acc Anteil des ausgelesenen Sensorsignals verortet werden. Nebenbei, zwischendurch habe ich die Arduino IDE auf neusten Stand (2.2.1) gebracht. Damit verschwand auch die Sache mit dem ab und an nicht funktionierenden Überspielen des Programms auf den Pro Micro. Danach wurde jedes Programm einwandfrei übertragen.

Weil die Hardware erstmal so stand, hab ich mich irgendwann Abends drangesetzt und eine Platine dazu in Eagle entworfen. Schnell wurde was gezeichnet und hier und da Schutzwiderstände und Kondensatoren eingestreut. Ziel war, die Platinen anständig fertigen zu lassen. Eine Testplatine hatte ich ja schnell nach dem Testaufbau auf Steckbrett schon gemacht. Die Dinger sollen zwar nicht verkauft werden, aber wenn das Ding gut läuft und ich mal eine weiteren Regler brauche, dann ist das einfach sich schnell was zu bestücken. Die alten, analogen Regler halten ja auch nicht ewig...
Nach ein paar Tagen trafen dann die Platinen aus Chinesien ein. Unglaublich, perfekte Qualität für WIRKLICH wenig Geld. Da lohnt sich das ätzen, isolationsfräsen, wasauchimmer so überhaupt nicht mehr. Ich hab für 5 Platinen inklusive Versand in TOP Qualität keine 10 Euro gezahlt. 

PXL 20230921 144942589

War ja klar, dass nach dem Bestücken der ersten Platine direkt ein Fehler auftrat: In Ermangelung eines passenden Bauteils für den Lagesensor hatte ich einfach beim layouten ein Ersatzbauteil genommen und hier prompt die beiden Datenleitungen vertauscht. Nun funktionierte der Regler überhaupt nicht, weil halt der Sensor in der Funktion abgefragt wird und das Programm bei Nichtfunktion stoppt. Naja, konnte man schnell mit 2 kleinen Drähten beheben, aber dennoch ärgerlich. Ich habe das zum Anlass genommen, die Platine zu überarbeiten und diesmal keinen Schnellschuss in Produktion gegeben. Nach 2-3 Wochen hatte ich abends immer wieder etwas am Layout geändert. Gleichzeitig habe ich die Schaltung und das Programm als zweite Variante auf einen reinen Lageregler mit wenig externen Komponenten abgespeckt. Hier lässt sich von den Potis her nur die Verstärkung und die maximalen Endstellungen des Servos einstellen, auf das OLED Display habe ich auch verzichtet. Hier kann man z.B mit einem einigermassen modernen Handy, passender kostenloser App und einem Kabel hervorragend die Werte auslesen. Als App habe ich "Serial USB Terminal" genommen, funktioniert einwandfrei und zeigt mir die seriellen Daten genauso an wie das Display. Auf die Möglichkeit einer externen Verstärkung über Sender habe ich aber weiterhin nicht verzichtet.

Screenshot 20231025 205937 Serial USB Terminal

Bis hierhin hatte der Regler noch keinen Tropfen Wasser gesehen, Schande über mein Haupt. Es gab ein paar Gelegenheiten, aber irgendwie hatte es nie gepasst. Ralf Schmitz wollte in seinem VIIc aus dem Nachlass von Andreas John den Regler mal testen, also wurde hier Premiere gefeiert. Ich hab den Regler beim nächsten Treffen mit zu Ralf geschleppt und wir haben das Dingen ins Boot eingebaut. Bis auf ein falsch herum laufendes Servo und anderer Kleinigkeiten fiel besonders das unruhig zitternde Servo auf. Hier musste dringend nachgearbeitet werden. Im Programm war zwar schon ein Filter eingebaut, der war der Rede nicht wert. Ich hatte schon von einem Kalman Filter gelesen, war aber angesichts meiner mangelhaften Kenntnisse in Programmierung, Mathe und dem Verständnis der Zusammenhänge überhaupt, nicht in der Lage, diesen Filter im Code zu implementieren. Tja, bis ich einen Kalmanfilter für Dummies als Library fand. Dieser liess sich auch leicht im Code einbauen und besteht im Prinzip nur aus einer Zeile mit Parametern. Diese habe ich dann erstmal mit Default Einstellungen benutzt und war jetzt schon schwer beeindruckt. Das Servo zuckte nur unmerklich. Die Werte des Sensors am seriellen Terminal veränderten sich quasi überhaupt nicht mehr. Ich war baff! Nun mussten die optimalen Werte für die drei Variablen gefunden werden. Hier wurden wieder nach dem bewährten Try and Error Prinzip die Variablen variiert und nach einiger Zeit war alles soweit, dass der nächste Versuch in Ralfs Boot gestartet werden konnte. Bei der Gelegenheit habe ich auch hier das OLED Display rausgeworfen.

Der komplette Funktionsumfang der Schaltung im Moment:
- Tiefenregler
- Servowegbegrenzung
- Verstärkung vom Sender aus einstellbar
- Taster für Nullung Lage
- Programmierung via PC
- Daten auslesen per Handy
- Umpolung des Servos bei Rückwärtsfahrt, ohne Empfänger muss Jumper gesteckt werden
- Automatische Umschaltung zwischen Empfängerverstärkung und Poti bei fehlendem Empfängersignal
- Leicht erhältliche Komponenten
- Kein spezieller Programmer notwendig
- Kalman Filter zur Sensorberuhigung
- Duo LED als Wasserwaage
- Mittelstellung Servo über separates Poti einstellbar
- Erweiterbar 

 

Der Zweiachsregler

lagexV02

In den kommenden Wochen habe ich immer weiter am Regler gebastelt. Dinge hinzugefügt und andere weggenommen. Da dieses ziellose Herumbasteln auf Dauer ziemlich sinnlos ist was Platinen angeht, habe ich eine der Lagereglerplatinen zum weiterentwickeln genommen und mit wild draufgepappten Potis und Jumpern erweitert. So entstand eine weitere Version des Lagereglers, diesmal mit Y-Achs Anteil, also ein Zweiachsregler. Zuerst wurde ein X-Mischer in den Code implementiert, eine Querachse wird mit dem Lageregleranteil verrechnet und auf die beiden Tiefenruderservos ausgegeben. Ein zuvor eingesetzter separater Hardware X-Mischer flog raus, der war nun überflüssig. Da hier keine Stiftleiste für das zweite Servo auf der Platine mehr vorgesehen war habe ich kurzerhand für die beiden Servos Servobuchsen mit Kabel angelötet. Schnell konnte ich nun über einen zweiten Knüppel die Servos in der Querachse ansteuern. Nun wurde noch das passende Signal aus dem Inklinometer dazugemischt und schon war der 2-Achsregler vom Prinzip her fertig. Leider musste ich feststellen, dass der Kalmanfilter bei Verwendung durch zwei Eingabequellen rumspackte. Ich habe dann den Kalmanfilter nur für die X-Achse vorgesehen und die Y-Achse durch eine separate Dämpfung aufgearbeitet. Das Ergebnis war völlig ok. Bei der Aktion fiel mir auch auf, dass der Großteil der Servozitterns durch das Eingangssignal vom Empfänger kam. Nachdem probeweise das Ergebnis der Ausleseroutine durch einen Festwert ersetzt wurde, bewegten sich die Servos in Ruhelage des Reglers keinen Millimeter mehr. Ein Zeichen dafür, dass das Inklinometer ruhig war und das Servozittern durch schwankende Werte vom Empfängersignal her rührten. Aber zurück zum Umbau der Testplatine. Auf der Platine waren nur zwei Potis vorgesehen. Wenn ich die Verstärkung der X-Achse und der Y-Achse UND die Endanschläge einstellen wollte, dann fehlte noch ein Poti, also wurde das fehlende Poti kurzerhand mit Heißkleber und Litze hinzugepfuscht. Es waren jetzt noch vier freie Eingänge auf dem Pro Micro frei, diese habe ich kurzerhand mit Pfostenleisten für Steckbrücken bestückt, somit kann man verschiedene Funktionen einstellen. Fürs Erste hatte ich da an Abschaltung des Y-Anteils, Abschalten des Mischers und Umpolung des X-Anteils gedacht. Mit einem weiteren Jumper sollte man zwischen Rückwärtsfahrerkennung und Verstärkung der X-Achse via Sender wählen können. Die ersten drei Funktionen wurden auf die Schnelle realisiert und so ging es tatsächlich zur ersten Probefahrt ins Freibad nach Gangelt während der Gangelter Modellbaumesse. Es war zwar schweinekalt, aber eisfrei und bestes Wetter. Also wurde kurzerhand das Boot ins Wasser geworfen und die erste Runde gedreht. Sofort sah ich, dass die Querregelung falsch herum reagierte. Der Y-Anteil musste umgepolt werden... Ist ja nicht so, als hätte ich bei den Vorbereitungen da nicht mindestens 2,5 Mal drauf geachtet ob es richtig rum ist. Verdammter Restalkohol... Um dennoch fahren zu können wurde kurzerhand die Y-Verstärkung auf Null gedreht und somit abgeschaltet. An den entsprechenden Jumper kam ich schlecht ran, hatte eine Spitzzange vergessen. So fiel mir dann auch auf, das der Jumper völlig unnötig ist da man es ja auch über das Poti erledigen kann. Die weitere Probefahrt verlief dann ohne Querachsreglung zur vollsten Zufriedenheit. Das Boot fuhr wie an der Schnur gezogen ohne pendeln. Endlich! Bei der Rückwärtsfahrt polt die Rückwärtsfahrerkennung wie gewünscht den X-Anteil um und das Servo läuft in die entgegengesetzte Richtung. Die Probefahrt wann dann schnell vorbei, es war einfach zu kalt. Aber ein guter Start und Motivation weiter zu machen. Wieder zurück auf der Messe habe ich als Erstes den Y-Anteil umgepolt damit dieser Fehler schon mal beseitigt ist.

lagexV02sch


Es war nun Zeit, eine neue Version der Lagereglerplatine zu erstellen. Diesmal wurden alle verfügbaren Pins ausgenutzt. In der Zwischenzeit waren zuvor bestellte Potis angekommen die man von oben bedienen konnte. Diese fielen kleiner aus als erwartet. Also war nun Platz für vier Potis auf der Platine, was ich auch genutzt habe. Zusammen mit einem Block aus 4 Jumpern für mögliche Funktionen, einer zusätzlichen Stiftleiste für ein zweites Servo und einer Stiftleiste um den Rückwärtsgang zu duplizieren und sich somit ein Y-Kabel zu sparen wurde ein weiteres und (hoffentlich letztes) Platinendesign für den Lageregler geroutet und für schockierende 2 Euro für 5 Platinen in Auftrag gegeben.

IMG 20231226 231948

Der Weihnachtsurlaub kann kommen, einige der Funktionen wandern dann in den Tiefenregler...

 

Der komplette Funktionsumfang der Lagereglerschaltung bis hier:
- Servowegbegrenzung für beide Servos
- Taster für Nullung Lage, automatische Nullung beim einschalten
- Programmierung via PC
- Daten auslesen per Handy
- Umpolung des Servos bei Rückwärtsfahrt (Defaulteinstellung) oder Verstärkung vom Sender aus einstellbar
- Leicht erhältliche Komponenten
- Kein spezieller Programmer notwendig
- Kalmanfilter zur Sensorberuhigung
- Duo LED als Wasserwaage für X-Achse
- verschiedene Funktionen über Jumper anwählbar (Inklinometer umpolen, abschalten, 2 Modi)
- X-Mischer mit 2-Achsregelung
- X und Y Achse separat in Verstärkung einstellbar

 

 

 

 Bald gehts weiter

 

 

Wir nutzen Cookies auf unserer Website. Einige von ihnen sind essenziell für den Betrieb der Seite, während andere uns helfen, diese Website und die Nutzererfahrung zu verbessern (Tracking Cookies). Sie können selbst entscheiden, ob Sie die Cookies zulassen möchten. Bitte beachten Sie, dass bei einer Ablehnung womöglich nicht mehr alle Funktionalitäten der Seite zur Verfügung stehen.