• Herzlich willkommen!

    Das Team von »Doctor Brick« heißt Euch herzlich willkommen und wünscht Euch viel Spaß hier!
    »Doctor Brick« ist eine anerkannte Community (RLOC) für erwachsene LEGO Enthusiasten, auch AFOLs (= Adult Fans Of LEGO) genannt.
    Wir können uns hier über alle Belange des LEGO Hobbys austauschen wie z.B. Set- und Teilefragen, Vorstellung und Rezensionen von Legobauten.
    Bitte beachtet die Nutzungsbedingungen und den Verhaltensleitfaden.

[WIP] Alles um Lego Powered UP ( Tips, Tuning und alternative Software)

Ruppie

Mitglied
Registriert
9 März 2020
Beiträge
161
Ort
Duisburg
Arbeitet ausser mir hier im Forum noch jemand mit Legoino?

Die Library ist ein guter Ansatz, aber beim Anfahren von bestimmten Positionen hänge ich gerade.

Und der L Motor muss entweder einen oder vier Nullpunkte haben. Die C+ App fährt die gezielt an. Weiss jemand, wie man die anspricht? Eine absolute Position scheinen L und XL nicht zu haben.


Hallo, die Legoino Bibliothek st eine guter Ansatz für quick and dirty tests.
die Idee dahinter ist prima, die Umsetzung "under construction".

Wie Werner schreibt, der Chat oder Githib Contact mag helfen


Die Bibliothek entbindet dich nicht davon sich mit dem ESP32 , BLE und insbesondere dem LEGO Wireless Protokoll zu befassen.

In der Bibliothek gab es zuletzt etwas verwirrung zur Verwendung der Klassen und Objekte. Schau mal hier:
https://github.com/corneliusmunz/legoino
und

Betrachte insbesondere die Beispiele zum Boosthub, huer sind kurze Schnipsel für "Fahre eine Zeit, Fahre einen Winkel gegeben.
Der Punkt ist: Wenn ich mit meinem Technik HUB als Klasse den BoostHub verwende kann ich auch diese Finktionen nutzen und habe sogar 4 Ports.
Die Verwirrung ist, das diesese in der Technic Hub Klasse hier noch nicht implementiert ist.

Meine Empfehlung:
- Boosthub Object verwenden / auch mit Technik Hub

besser:
- Die Basisklasse Lpf2Hub mit eigenen Anpassungen.

https://github.com/corneliusmunz/legoino/pull/6

Gruß
 

Ruppie

Mitglied
Registriert
9 März 2020
Beiträge
161
Ort
Duisburg
Die ersten Fehler habe ich gefunden, aber jetzt wird's seltsam.

Ich lasse den Motor seine Position ermitteln und um die entsprechende Gradzahl zurückdrehen. Das funktioniert.
Danach kann ich auch eine absolute Gradzahl anfahren.
Die scheint auch zu stimmen.

Lasse ich jetzt den Motor wieder zurückfahren fährt er beim jedem weiteren Versuch, eine absolute Position anzufahren, eine 45° Position an, mal links, mal rechts.

Lasse ich den ersten Schritt weg fährt er auch keine absolute Position an :rage:

Hallo,
meine erste Frage lautet: Woher weißt du das die Positionierung, funktioniert?
Ich gehe davon aus, das du den Motor Entrechend eingestellt hast , das er dir die Winkel zurückliefert ?!

Zur Positionierung am Startup (Topgear..):
Ich dachte auch immer das die Grundstellung ohne Spannung 0° ist, offenbar falsch, man kann auch den absoluten Winkel messen.
Der absolute Winkel ist immer 0--359°, wenn man den schon nach Anlegen der Spannung messen kann ist verständlich was der HUB macht.

Was man bei der Positionierung aber auch immer machen kann (Auszug aus meinem C Programm)

SendData_a={0x0b,0x00,0x81,0x01,0x11,0x51,0x02,0x5a,0x00,0x00,0x00};


Hiermit initialisiert man die aktuelle Position von etwas (Motor Encoder : 0x02) auf einen bestimmten Wert, hier 90° = 0x5a,0x00,0x00,0x00.

Ab dann kann man Postionen = Winkel anfahren mit:
SendData_b={0x0e,0x00,0x81,0x01,0x11,0x0d,0x96,0x00,0x00,0x00,0x46,0x64,0x7e,0x00};

Zu beachten wäre, das die Positionioergenauigkeit von der Verstellgeschwindigkeit abhängt.
Daher habe ich in meiner FB für das Topgearcar dynamisch gelöst.
Da ich hier "Sollwinkel = Einschlagwinkel der Lenkung an FB" , Istposition, Sollposition des Motors kenne, fahre ich die letzten 10 Grad mit max 5% Listung an.
Ausserdem habe ich trotzdem leider eine Abweichung zwischen Soll ist von ca. 1-2°.


Fazit:

In der Liguino Bibliothek: einfach schauen, wo da die "Befehle zum Hub" .. "Schreibe irgendwas" implementiert sind im Zweiffel in der Basisklasse zu finden
Da ich die Lego Apps nicht verwende, kann ich nicht sagen wie es dort geht.

Hoffe das hilft irgendwie weiter, und beantwortet das eine oder andere .
Gru0
 

Ruppie

Mitglied
Registriert
9 März 2020
Beiträge
161
Ort
Duisburg
Mal was am Rande: Welchen BLE Sniffer verwendet ihr.

Ich benutze Whireshark gemäß der folgenden Anleitung:


nRF Sniffer for Bluetooth LE


Das Interessante,Auszug
Supported devices
  • nRF52 Development Kit (PCA10040)
  • nRF52840 Development Kit (PCA10056)
  • nRF51 Development Kit (PCA1002:cool1:
  • nRF51 Dongle (PCA10031)
  • nRF51822 Evaluation Kit (PCA10001)
  • nRF51422 Evaluation Kit (PCA10003) v3.0.0 or later
  • nRF51822 Development Kit dongle (PCA10000)

Ihr benötigt nicht zwingend ein Produkt von Nordic., das geht auch

Adafruit Wireless Bluefruit LE Friend Bluetooth Low Energy (BLE 4.0) nRF51822 v3.0
habe ich aber nicht getestet.


Ich habe ein nRF52840 Development Kit (PCA10056), weil ich momentan noch auf Basis dieser Boards entwickle:

1. Adafruit nrf52840 feaher express
2. Arduino Nano 33 BLE

Pfiffiger Weise kann man den Segger JTAG Debugger des nrf52840 SDK , mittels PIN-Header auch für die beiden kleinen Boards verwenden.

Kleine Einschränkung;
Das BLE Plugin funktioniert unter WIn10 /64 bit bei mir nicht mit der aktuellen Version von Wireshark, mit Version 3.0.7 geht es ;-)

Was verwendet ihr so ?

Gruß

Marc
 

Ruppie

Mitglied
Registriert
9 März 2020
Beiträge
161
Ort
Duisburg

gatewalker

Urgestein
Registriert
7 Okt. 2018
Beiträge
1.766
Ort
Niederösterreich Bezirk Zwettl
@Ruppie sehr interessant was du da schreibst. Überhaupt mit dem Drehwinkel auslesen.

Interpretiere ich das richtig das du dein TopGear Rally Car über einen ESP32 steuerst und diesen dann direkt mit zb einen Bluetooth Gamecontroller?
Geht das dann auch in "Echtzeit" ohne Verzögerung?

Bezüglich der Ungenauikeit von 1-2° das wir einfach dem Getriebe und der Lagerung der drehendenden Teile geschuldet sein. Beim den Lego Spike Motoren gibt Lego hier auch eine Genauikeit von 3 Grad an.
 

RR76

Urgestein
Registriert
8 Apr. 2019
Beiträge
1.151
Ich hab mir aus den beiden Klassen eine eigene für den Technic Hub gebaut und dort die absolute Position eingefügt. Nachdem ich endlich meinen Tippfehler gefunden habe funktioniert das auch. PU kennt noch einen zweiten Befehl für zwei absolute Positionen, ich hatte durch meinen Tippfehler versehentlich den verwendet. Mit den Parametern vom "richtigen" Befehl passieren sehr seltsame Dinge.
Jetzt kann ich absolute Positionen exakt anfahren und habe auch nicht mehr das Problem dass der Motor auch bei sehr kurzen Wegen zu weit fährt.
Wenn der Motor in einem gewissen Bereich bleibt ist Null auch immer an der gleichen Stelle. Wenn man den Hub stromlos macht und den Motor in Richtung 90, 180 oder 270° dreht sucht er sich beim nächsten Mal den nächstgelegenen Nullpunkt. Davon gibt's vier. Ob das auch bei Trennen der Verbindung und Abschalten passiert bin ich mir nicht sicher.

Wenn ich das nächste mal am PC bin kann ich die entsprechenden Zeilen posten.

Das ganze ist so simpel dass ich mit einem esp32 mit Batterieanschluss von MakerShop, einem Joystick aus einem Gamepad und ganz wenigen Zeilen Code den 42099 jetzt so steuern kann wie ich es mir von Lego vorgestellt hätte: Fernsteuerung einschalten, Hub einschalten, Fahren.

Sobald ich den esp32 in das Gamepad gelötet habe will ich versuchen, ein möglichst frei programmierbares Gamepad zu programmieren, das sich ähnlich wie BC2 mehrere Konfigurationen merkt. Wenn das interessant ist sollten wir dazu aber einen neuen Thread öffnen, sonst findet man hier nichts mehr.

Mit Wireshark und Debugger hab ich mich noch nicht beschäftigt.
 

Lok24

Elektronikbahner
Registriert
11 Sep. 2019
Beiträge
1.451
Das ganze ist so simpel dass ich mit einem esp32 mit Batterieanschluss von MakerShop, einem Joystick aus einem Gamepad und ganz wenigen Zeilen Code den 42099 jetzt so steuern kann wie ich es mir von Lego vorgestellt hätte: Fernsteuerung einschalten, Hub einschalten, Fahren.

Das klingt in der Tat sehr spannend.
Vielleicht machst Du mal einen Thread auf und zeigst mal ein Bild von der Hardware und das gesamte Programm?

Danke.
 

Ruppie

Mitglied
Registriert
9 März 2020
Beiträge
161
Ort
Duisburg
@Ruppie sehr interessant was du da schreibst. Überhaupt mit dem Drehwinkel auslesen.

Interpretiere ich das richtig das du dein TopGear Rally Car über einen ESP32 steuerst und diesen dann direkt mit zb einen Bluetooth Gamecontroller?
Geht das dann auch in "Echtzeit" ohne Verzögerung?

.

Nö nicht ganz richtig verstanden, siehe hier: BLE Fernbediehung für TopGearCar

Das LEGO Modell ist dabei vollständig unangetastet. Wie mit Werner im 1000 Steine Forum erörtet ging es mir erst einmal um den Nachweis, das man nach Offenlegung des Protokolles, fehlende
Fernbedienungen recht einfach erstellen kann.

Wie bei LEGO war der Ansatz auch: Vorhandenes eben neu zusammensetzen.
Ich habe lediglich in der Fernbedienung den Controller und Sendeeinheit gegen das Adafruit nrf52840 Board getauscht.

Das Prinzip sollte auch "Keep it simple " sein. Mit der FB kann man das Auto fahren, mehr nicht.
Im Zweifel kann man noch eine Profilumschaltung einbauen um Wahlweise verschiedene Autos zu fahren, wenn hierfür verschiedenen profile nötig sind.


PS: Wegen dem Encoder und somit automatische Justierung der Lenkung, habe ich derzeit noch 2 Stellpoties übrig, ich benutze nur die für Lenkung und Gas zur Zeit.
Wenn ma nlangeweile hat kann man die Sensoren im Hub noch als Spurhalteassitent verwenden ;-)

Bin aber momentan woanders dran.
 

Ruppie

Mitglied
Registriert
9 März 2020
Beiträge
161
Ort
Duisburg
Sobald ich den esp32 in das Gamepad gelötet habe will ich versuchen, ein möglichst frei programmierbares Gamepad zu programmieren, das sich ähnlich wie BC2 mehrere Konfigurationen merkt. Wenn das interessant ist sollten wir dazu aber einen neuen Thread öffnen, sonst findet man hier nichts mehr.


Gute Idee mit de, Hardware Foren Bereich .

Das mit dem frei programmieren Pad ist ja etwa meine vorgeschlagene Lösung mit "ESP Only" was auch ausreichend ist.
Allerdings gibt es da im Zweifel ein Problem mit den freien Ports für Perepherie, I2C oder SPI Port Expander helfe dann ;-)
Bezüglich Speicher und Konfiguration: Das Flash des ESP ist Groß genug, habe mich noch nicht befasst, ob dies aber nur für Firmare ist, oder auch als Dateiablage verwendet werden könnte.
Ansonsten wäre ein Micro SD Karten Slot spannend. Ich Glaube der ESP32 hat keinen USB Port ?", Aber es sollte andere Beispiele für FAT Filesystem mit SDCARD geben.

Ich muss noch nachsehen, wie die SD Card Anbindung hier war: Olimex ESP32-EVB

Gruß


Ansonsten baue ich gerade an einem eigenem HUB der zu LEGO kompatibel ist.
Der Trick soll sein das man diesen etwa als Technic Hub , später auch Spike Hub, an die originalen Apps anmelden kann.


Momentan kämpfe ich noch mit den simplen Basics: Ich bekomme über die serielle Schnittstelle den Motor nicht in den Messmodus,
siehe Analyse von Philo zum Seriellen Protokol ;-)

Wer diesbezüglich Erfahrungen hat ;-)

Aber erstmal ein Hardware Thread bauen, wegen übersichtlichkeit.

Bis dann, dann
Marc
 

RR76

Urgestein
Registriert
8 Apr. 2019
Beiträge
1.151
Die IO Ports reichen aus, auf meinem Board sind es 17.
21 brauche ich für das Gamepad, plus evtl. 2 für SPI. Wenn SPI nicht auf den analogen Ports liegt ist das ohne viel Zusatzhardware machbar.

@gatewalker
Du könntest den esp32 einfach an irgendeine Stromversorgung angeschlossen, zB vom Hub, in den Trailer legen. Er ersetzt dann das Smartphone und steuert über Bluetooth einen Hub. Das ist vermutlich nicht so schnell wie Spike aber wenn das die einzige Aufgabe ist vermutlich besser als die PU App. Ich mach die nächsten Tage mal einen Testaufbau.
 

carver0510

Urgestein
Registriert
20 Mai 2016
Beiträge
895
Also ich bin hier seit einiger Zeit ein stiller Mitleser, aber ich muss sagen das hier eine sehr interessante Diskussion los gebrochen sind. Hier werden viele tolle Aspekte angesprochen!

Ich habe mich erst vor kurzem mit Powered Up beschäftigt und natürlich ist es erst mal schon eine Umstellung, wenn man von den Power Functions kommt! Vor allem, wenn man (aktuell) die Motoren wie gewohnt "stacken" kann. Aber mit dem neuen PU ist Lego echt ein toller Wurf gelungen, denn es bietet viele Möglichkeiten und da die ganze Kommunikation offen und nicht verschlüsselt ist, können wir AFOLs auch damit super arbeiten :) Auch wenn man noch raus finden muss, wie man den Messmodus der Motoren aktiviert ;)

Aber alleine die Möglichkeit, dass die Motoren ihre Position zurück geben können, sehe ich in der ganzen Geschichte als einen riesigen Vorteil und ich freu mich schon auf das neue System :) Und wenn es dann noch kleinere Hubs gibt, an die man z.B. normale ModellbauLipos anschließen kann, dann bin ich rundum Glücklich :)
 

carver0510

Urgestein
Registriert
20 Mai 2016
Beiträge
895
Ne ich habe mich mit dem Messmodus auf diesen Kommentar bezogen :)

Momentan kämpfe ich noch mit den simplen Basics: Ich bekomme über die serielle Schnittstelle den Motor nicht in den Messmodus,
siehe Analyse von Philo zum Seriellen Protokol ;-)

Das Beispiel habe ich aber auch gesehen und das ist wirklich super! Schöne neue Welt :D Es gibt so viele schöne Möglichkeiten!
 

Ruppie

Mitglied
Registriert
9 März 2020
Beiträge
161
Ort
Duisburg
Auch wenn man noch raus finden muss, wie man den Messmodus der Motoren aktiviert ;)

Damit wir uns nicht falsch verstehen, ich meinte nicht über das Bluetooth Protokoll.

Wie beschrieben es geht hierum:https://www.philohome.com/wedo2reverse/protocol.htm

Wie Philo schreibt hat es sich mit dem Handshake in der Initalisierungsphase nicht sehr gekümmert.
Der Trick ist:
Kommunikation startet offenbar mit 2400 bps, und wird dann "irgendwie", besser "irgendwann" umgeschaltet auf 115200.
Beides kann ich bestätigen, aber der Algorithmus hierzu ist mir nicht klar.

Die Frage lautet vereinfacht, ob Arduino, mein nrf52480 oder im Falle der ESP32;
Wenn , beispielsweise ein neuer Powered Up L Motor unmittelbar am Seriellen Port "meines" Microcontrollers angeschlossen ist,
wie genau muss ich dann vorgehen, um das Messdatenprotokoll von den Sensoren zu erhalten.



PS:
Genaueres zu meinen Beobachtungen werde ich noch mal ins Eurobricks Forum schreiben.


Wenn man im 2400 bps Modus ist und den Motor anschließt, bekomme ich lediglich "das Begrüssungstelegramm" zyklisch, das pauschale Senden des Befehls 0x02 bring hier alleine (in meinem Fall nix.
Daher Wiederhole ich die Frage: Wer hat erfolgreich den Motor / Sensor an einem eigenem Controller betrieben

Wie gesagt: Soll ja ein eigener LEGO Kompatibler Hub werden , am Ende.

Danke nochmals und Grüße
 

RR76

Urgestein
Registriert
8 Apr. 2019
Beiträge
1.151
Dazu hab ich noch gar nichts probiert, ich kann aber mal einen Logiktester mitlaufen lassen.
 

Lok24

Elektronikbahner
Registriert
11 Sep. 2019
Beiträge
1.451
Ja, das sind wohl dieselben, die das auch für das EV3 liefern.
Lego hatte ja diesen Weg (Micro-Python-Programm -> Hub laden -> autark arbeiten) bereits im letzten Jahr angekündigt.
 

RR76

Urgestein
Registriert
8 Apr. 2019
Beiträge
1.151
Egal von wem es kommt, das wäre für so einige Anwendungen die perfekte Lösung wenn alle Hubs das können.
 

Lok24

Elektronikbahner
Registriert
11 Sep. 2019
Beiträge
1.451
Egal von wem es kommt, das wäre für so einige Anwendungen die perfekte Lösung wenn alle Hubs das können.
Ja, das stimmt. Inwieweit LEGO da Auftraggeber ist oder nur Distributor weiß ich auch nicht.
Das Micropython von pybricks habe ich schon getestet, das findet sich auf der LEGO Education Seite.
 
Oben