Lagesensor integrieren

Moin zusammen,
hat jemand sich eventuell schonmal Gedanken gemacht, ob es möglich wäre, einen Lagesensor oder Ähnliches in das System zu integrieren, um zu erkennen, ob der Bus in Waage steht?
Ich bin leider kein Programmierer, um dies umzusetzen. Allerdings finde ich die Idee ganz interessant.

Vielleicht hatte sich ja schon jemand die Idee und hast es eventuell umgesetzt :wink:.

Viele Grüße,
Malte

Und dann gleich die Stützen elektrisch ansteuern :smiley:

sollte mit dem MPU6050 relativ leicht zu implementieren sein.

Hier ist ein Projekt dazu.

1 Like

Ich habe auch mal angefangen mich mit dem Sensor zu beschäftigen habe aber mit der Mathe noch so meine Probleme.

Ich will zwar keine Hubstüzen daran Anschliesen sonder die Lage darstellen aber der MPU6050 ist schon ein sehr Interessanter Chip.

Die in dem Verlinkten Artikel beschriebene Mathe ist zu einfach für genaue Dinge. Das sieh man schon wenn man mal die Treiber für den Ardunio und den MPU6050 sich ansieht.

Da ich aus der C++ Welt komme habe ich auch damit ein bisschen was angefangen leider ist es nicht Fertig.

Falls es jemanden Interessiert. Die Daten dann in den MQTT zu schieben ist ja wirklich einfach…

1 Like

Moin,
Hubstützen wollte ich auch nicht ansteuern, wobei es schon sehr nett wäre. Mir geht es ebenfalls nur um die Darstellung l, so das ich sehen kann, ob der Bus einigermaßen in Waage ist.
Wie schon erwähnt, ist das leider überhaupt nicht mein Element, aber ich versuche mich mal damit zu beschäftigen, da es echt interessant ist.

Was bedeutet denn zu ungenau? Wäre der Bus nicht ansatzweise in Waage oder sind es nur wenige Zentimeter/Millimeter?

Viele Grüße und Entschuldigung für die laienhaften Fragen :grimacing:.

Hört auf jeder Fragt auf seinem Level was er versteht und das auch Ok so. Ist nicht jeder so tief drin. Wichtig ist nur das verstehen wollen und mit denken zu mindestens für mich.

Mir fehlt in dem Code die Initialisierung das heißt das wenn die Parameter mit dem Chip nicht übereinstimmen dann kommt einfach müll raus.
Der Beschleunigungsanteil wird nicht Berücksichtigt das bedeutet das wären der Fahrt oder wenn er sich bewegt die Daten nicht stimmen können. Und jeder weiß das das betreten von einem Bus schon schaukeln auslöst. Das ja normal.

Ich fände es halt Verschwendung wenn man die Sachen die der Chip kann brach liegen lässt. Der ist nämlich in ganz vielem drin. Der kann so gut sein das er selbst in Drohnen zur Lage Erkennung ein gesetzt wird oder auch in Händys für die Bildschirm Drehung.

Was nutzt dir die Anzeige in Units ? Müsste ja schon etwas sein mit dem auch was Verstehen kann.
Aber selbst in Grad wird es schwierig wenn es ein Grad ist und der Chip ist in der Mitte verbaut wie viel cm muss ich dann unter das Radlegen ? Bzw die Hubstütze aus fahren ? Bzw die auf der gegen überliegenden Seite ablassen ?

Das was ich noch nicht Testen konnte viel Einfluss hat das Auto auf den Sensor und kann man das Kompensieren da so ein Sensor ja von Magnetfeld der Erde abhängt. Und im Auto gibt es genung ander Magnetfelder.

Wo ich ehrlich gesagt keine Idee habe ist wie man den Sensor gerade ins Fahrzeug bekommt. So das man ihn Kallibieren kann. Wie stelle ich fest das das Fahrzeug gerade steht.

Jedoch der Sensor Kostet eher nichts und Software kann man immer Tauschen. Also ausprobieren.
Vielleicht sind wie so oft meine Ansprüche halt zu hoch und so wird Software nicht fertig…

So genau kann der sein…

Moin,
Ok, die Genauigkeit scheint da wirklich ein Problem zu sein, so dass man es vernünftig anwenden kann.
Ich versuche mich demnächst mal da reinzufuchsen und vielleicht kommt ja was brauchbares raus :wink:.
Vielen Dank nochmal für die ganzen Informationen :+1:.

Viele Grüße

Interessante idee!
Bzgl gerade verbauen.
Muss man doch garnicht?
Man müsste doch nur einmal Kalibrieren.
Also Bus gerade ausrichten und dann dem chip sagen, das dies die null-lage is?

Natürlich kann man das mit dem Kalibrieren auch machen dann muss du aber die Werte wo speichern und immer umrechnen. Aber wie stelle ich das Auto gerade ? So ein Fläche zu finden ist glaube ich nicht so ganz einfach.

Wie könnte das dann im PeKaWay dargestellt, eingebunden werden?

In das Display weiß ich nicht aber in die UI vom NodeRed bestimmt.
Da kann man vieles rein Basteln.
Wichtiger wäre es ja erst mal gescheite Daten zu haben.

Habe es nicht ganz gesehen und es ist ein andere Sensor aber der MPU ist auch ein i2C ding…

Oder eine Microcotroller da zwischen

1 Like

D.h. das UI ist das, was über WLAN übertragen wird ? Also das Dashboard von PeKaWay ? Das wäre super und würde bedeuten man kann das Dashboard anpassen ?

So habe ich das verstanden. Was man nicht Anpassen kann ist das Display das über die Schnittstelle an geschlossen wird das Close Source. Aber ich meine die WebUI ist von NodeRed und an den kommst du ja ran.

Habe mir mal einen mpu-6050 zugelegt.
Allerdings bekomme ich es nur zum laufen wenn ich direkt an den pi gpio anschließe. Sobald ich den Pi auf das relaisboard packe und am pinout anschließe geht nichts.
Ich habe gesehen, das schon Geräte vom relaisboard am i2c auf Adresse 0x48, 0x4b und 0x68 sind. Vielleicht kann @Karl erklären was das genau ist?
Der Mpu-6050 ist standardmäßig auch auf 0x68 was ich als erstes in Verdacht hatte als Problem. Wenn ich jetzt den ad0 pin auf high setze um den mpu-6050 auf Adresse 0x69 zu setzen funktioniert trotzdem keine Kommunikation auf dem i2c. Direkt am Pi funktioniert es aber.
In git gibt es eine Abbildung von der pinout Belegung die ist allerdings mit j14 gekennzeichnet. Auf meinem relaisboard steht dort j18
https://git.pekaway.de/Karl/campercontrol/-/raw/master/Downloads/Documents/GPIO-Pinout_Zeichenfl%C3%A4che_1_Kopie.jpg

Ist vielleicht einfach die pinbelegung auf meinem relaisboard anders? @Karl ?

j14 und j18 sind gleich belegt.
Ist einmal Steckplatz fürs PI und einmal die nochmal rausgeführt für genau diese Sachen.

Bei den neuen VANPI BOARDS ist die j4 und j2… Siehe Doku.

Auf dem I2C Bus laufen 2 ADS für den Shunt und die Levelsensoren. (0x48, 0x4b) Auf der 0x68 läuft die nicht implementierte RTC.

Warum es unter der Adresse 0x69 nicht läuft kann ich nicht sagen. Mit welcher Library benutzt du den MPU6050?

Ok danke schonmal für die infos.
[Edit]
Die pinbelegung ist gespiegelt wenn man von oben (logoseite)
Auf das relaisboard schaut :slight_smile:

Kommunikation zum mcu-6050 funktioniert jetzt mit Relaisboard über i2c auf adresse 0x69.

1 Like

Hallo zusammen, ich versuche es gerade mit dem GY-271:

Unter Python läuft er am I2C mit der Adresse 1e:

python3

Python 3.7.3 (default, Oct 31 2022, 14:04:00)
[GCC 8.3.0] on linux
Type “help”, “copyright”, “credits” or “license” for more information.

hmc5883l = i2c_hmc5883l.i2c_hmc5883l(1)
hmc5883l.setContinuousMode()
hmc5883l.setDeclination(2, 15)
print(hmc5883l)

Axis X: 241.04
Axis Y: 161.92
Axis Z: 2.76
Declination: 2° 15’
Heading: 36° 8’

@Vincent kann man in Node-Red nicht direkt Python laufen lassen mit node-red-contrib-python-function ?
Habe mal das script dort eingetragen, läuftz aber nicht:
grafik

grafik

Kenne die Node nicht, hat aber auch das letzte Update vor 3 1/2 Jahren bekommen und benutzt laut GIthub auch nicht die Node-RED API für den Editor (Support for monaco in node-red 2.0.0 · Issue #15 · arnauorriols/node-red-contrib-python-function · GitHub), heißt spätestens mit NR4 wird das nicht mehr funktionieren (ohne Update). Dann wird nämlich gänzlich vom ACE-Editor auf den Monaco-Editor umgestellt: Version 3.0 released : Node-RED

Aber würde mal raten, dass diese Node eventuell den falschen Python Interpreter benutzt, weil die Library nicht gefunden wird…?

Du kannst den Python Code in eine Datei schreiben, ausführbar machen und dann mit einer Exec-Node starten. Eventuell mit einem Timeout und/oder einer Funktion die das Script wieder beendet, damit der RAM nicht voll läuft etc.

Und wie bekomme ich dei Werte dann in NodeRed ? (Variabeln) ?

Mit dem “print” übergibst du die Werte aus dem Python Script, dann kannst du sie hinter der Exec-Node weiter verarbeiten

@Vincent OK, habe es so gemacht.
Bekomme als payload folgenden Wert:

msg.payload : string[81]

“Axis X: 233.68↵Axis Y: 169.28↵Axis Z: 1.84↵Declination: 2° 15’↵Heading: 38° 10’↵↵”

Wollte diesen nun extrahieren, bekomme es aber nicht hin. Werde mit JASON + Change, noch als function.

Anbei meine test nodes:

[{"id":"b6aaa53e0f2a6a6a","type":"debug","z":"0d480fc2f6a2fd31","name":"debug 29","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"false","statusVal":"","statusType":"auto","x":1340,"y":480,"wires":[]},{"id":"fd7ed752c3b8e12e","type":"inject","z":"0d480fc2f6a2fd31","name":"","props":[{"p":"payload"},{"p":"topic","vt":"str"}],"repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"","payload":"","payloadType":"date","x":160,"y":480,"wires":[["1cb6f8c46233fe1d"]]},{"id":"1cb6f8c46233fe1d","type":"exec","z":"0d480fc2f6a2fd31","command":"sudo timeout 5 python3 /home/pi/quick2wire-python-api/GY-271.py","addpay":"","append":"","useSpawn":"false","timer":"","winHide":false,"oldrc":false,"name":"","x":500,"y":480,"wires":[["fd5b7003ac65d3f5","b67bc9b08b4f18e4"],[],[]]},{"id":"fd5b7003ac65d3f5","type":"function","z":"0d480fc2f6a2fd31","name":"set result","func":"if (msg.payload.includes(\":\")) {\n\n    var lines = msg.payload.split(/\\r?\\n/);\n    var outp = [];\n    outp[0] = { payload: lines[0] };\n    outp[1] = { payload: lines[1] };\n    outp[2] = { payload: lines[2] };\n    outp[3] = { payload: lines[1] };\n    outp[4] = { payload: lines[2] };\n    return [outp];\n\n}\nelse {\n    msg.payload = \"Test2 \"\n    return msg\n}\n","outputs":1,"noerr":0,"initialize":"","finalize":"","libs":[],"x":880,"y":480,"wires":[["b6aaa53e0f2a6a6a"]]},{"id":"b67bc9b08b4f18e4","type":"debug","z":"0d480fc2f6a2fd31","name":"debug 30","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"false","statusVal":"","statusType":"auto","x":880,"y":360,"wires":[]}]

Könntest du mir helfen die Werte in Zahlen und Vraiablen zu extrahieren oder mir ein Beispiel geben?