• 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.

Custom RC Steuerung auf Basis eines Arduino

s4scha

Mitglied
Registriert
23 Aug. 2021
Beiträge
137
Werte Mitstreiter,

da es neben den LEGO-eigenen Lösungen zur Steuerung und Motorisierung von Modellen hier in der Community zahlreiche Alternativlösungen gibt, wollte ich auch mal meinen Lösungsansatz vorstellen. Nicht unbedingt, um jemanden davon zu überzeugen, sondern eher als weitere Inspiration (oder Abschreckung) für Euch. Es gibt hier also nichts zu kaufen. ;)

Angefangen hat mein Wunsch, ein Technic Modell zu bauen und gebührend zu elektrifizieren, schon vor drei Jahren. Die Ausgangslage war ein doch ansehnlicher Fundus aus Power Functions Motoren. Aber leider blieb uns ja der SBrick nicht lange erhalten, um eine ordentliche Steuerung zu realisieren. Lösungen wie der BuWizz haben mich preislich abgeschreckt. So bin ich dann nach mehreren Iterationen von Modell und Technik beim Arduino und der RC Technik hängen geblieben, um die Elektronik zu realisieren. Mit Arduinos hatte ich schon getüftelt und die RC Technik ist ja gut verfügbar. Programmierung und Elektrotechnik sind mir keine Fremdwörter, weswegen das überhaupt als Lösung in Frage kam.

Das vorläufige Resultat ist eine komplette Steuerungseinheit auf Basis eines Arduino Nano:

20240501_114244181_iOS.jpg

20240501_114252791_iOS.jpg

20240501_114957758_iOS.jpg

Funktionen:
- 7-23V Eingangsspannung
- 16 Kanäle für den Anschluss von LEDs
- 10 Kanäle für Motoren
- 4 Kanäle für Servo Motoren bzw. ESCs
- UART Schnittstelle
- 2,4GHz Funkmodul

Hardware:
- 1x Arduino Nano
- 1x NRF24L01 Funkmodul
- 3x PCA9685 PWM Treiber
- 5x TB6612FNG Motortreiber
- 3x 74HC595 Schieberegister
- 1x Step-Down Converter auf 5V
- 1x Step-Down Converter auf 3,3V
- Etliche Widerstände und Kondensatoren

An den 16 LED Kanälen können die im LEGO Umfeld bekannten Mini SMD LEDs mit einer maximalen Aufnahme von 25mA je Kanal angeschlossen werden. Zwei Stück an einem Kanal gehen problemlos. Für mehr reicht die Leistung aber nicht mehr aus, um dann auch alle auf die maximale Helligkeit zu bekommen. Regeln lassen sich die LEDs annähernd stufenlos.
Die zehn Kanäle für Motoren können alle individuell angesteuert werden und verkraften jeweils einen durchgehenden Ausgangsstrom von 1,2A. Ich nutze für die Funktionen 12V N20 Motoren und dafür sind die Motor Treiber mehr als ausreichend.
Mithilfe von vier Servo Kanälen können beliebige Servo Motoren (ich verwende z.B. die Geekservo Servos) und ESCs angesteuert werden. Für den Antrieb nutze ich einen ESC, der zwei Motoren antreibt.
Die UART Schnittstelle muss man sich von der Funktion her wie einen USB Port vorstellen, mit dem man mehrere solcher Einheiten miteinander koppeln kann. Der Anwendungszweck hierfür ist irgendwann mal die Ansteuerung eines Anhängers.

Die einzelnen Hardwarekomponenten sind über zwei Trägerplatinen miteinander verbunden. Die Platinen habe ich nach stundentagewochenlanger Recherche selbst entworfen und über einen Anbieter aus Fernost herstellen lassen. Mein erster Ansatz war, die einzelnen Komponenten jeweils als fertige Boards zu kaufen und miteinander zu verbinden. Das ist auch problemlos möglich, kollidiert dann allerdings ab einem gewissen Umfang mit den Freiräumen, die man bei 1:16,6 so hat :). Deswegen sind es in der aktuellen Version dann die professionell teil-bestückten Platinen geworden. An die Technik vom Arduino, des Funkmoduls und dem Spannungsregler habe ich mich nicht rangetraut, deswegen sind das fertige Boards, die ich lediglich auf meine Platinen gelötet habe. Aus Platzgründen gibt es leider nur Dupont Pins und keine LEGO-kompatiblen Buchsen. Der Plug&Play Faktor, wenn es hier überhaupt einen gibt, ist also auf RC Technik geschränkt.

Dank des Arduino kann man alle Funktionen nach Belieben programmieren, wie z.B. eine gleichmäßige Beschleunigung des Modells, beliebige Ansteuerung der LEDs (Blinker, Blaulicht, Bremse, Rückfahrscheinwerfer, Standlicht, Scheinwerfer, usw.), Eingrenzung des Spannungsberichs für die Motoren, schaltbare Anhängerkupplung per Servo, etc. Der Kreativität sind eigentlich keine Grenze gesetzt. So etwas triviales wie, dass die vorderste Seitenmarkierungsleuchte gleichzeitig als Blinker fungiert, beispielsweise. Die erforderlichen Programmierkenntnisse sind auch nochmal eine Hürde bei der Verwendung dieser Komponenten. Mir war es aber recht wichtig, die einzelnen Funktionen auch ordentlich steuern bzw. anpassen zu können. Der Code ist auf der Fahrzeugeite derzeit fast 500 Zeilen lang und noch längst nicht fertig.

Passend zur Steuerungseinheit habe ich mir eine Fernsteuerung gebaut. Mithilfe von zwei 4D-Joysticks und neun Buttons kann ich alle Funktionen in Form von mehreren Modi (Fahren, Stützen, Ladekran und Anhänger) durchschalten und steuern. Mit dem 2" LCD Display kann man die Funktionen bequem den Buttons zuordnen und ein SD-Kartenleser ist für alle Fälle auch mit von der Partie.

20240501_114543707_iOS.jpg

Ich würde sagen, dass die Lernkurve ziemlich steil ist. Das Ganze ist sicherlich nichts, was man sich freitags überlegt und dann am Sonntag damit fertig ist. Es lassen sich etliche Funktionen abbilden, die nicht unbedingt für jeden wichtig/notwendig sind. Und es gehörte zumindest in meinem Fall ein gewisser Grad an Detailverliebtheit (man könnte auch Sturköpfigkeit sagen) dazu, überhaupt in Erwägung zu ziehen, die extra Meilen zu gehen, anstatt etwas fertiges zu nehmen und irgendwo Abstriche zu machen. Unzählige lange Abende und Rückschläge gehören dazu aber ich bin mit dem Endergebnis sehr zufrieden :)

Viele Grüße aus dem sonnigen Ruhrpott
Sascha
 

Pottbrick

Neumitglied
Registriert
25 Sep. 2021
Beiträge
9
Ort
Dortmund
Tolle Sache! Ich beschäftige mich eher mit Robotern, aber dafür arbeite ich auch den von dir erwähnten Komponenten. Versuche, das alles mit Micropython zu programmieren. Stellst Du das Basisboard auch anderen zur Verfügung?

Ebenfalls Gruß aus dem Pott, Werner
 

HauntedHouse

Hausgeist
Registriert
12 Aug. 2015
Beiträge
237
Ort
Wülfrath
Hast du das Basisboard selbst bestückt oder hat dein Lieferant die SMD-Teile verarbeitet?
Würde mich interessieren, wo du das hast machen lassen.
 

s4scha

Mitglied
Registriert
23 Aug. 2021
Beiträge
137
Die SMD Bauteile habe ich löten lassen, das wäre mir viel zu fummelig :wsntme: Ich habe die Platinen bei JLCPCB bestellt. Da habe ich mit der Software (EasyEDA) direkt die SMD Bauteile auf der Platine positioniert und bei der Bestellung "PCB Assembly" gewählt. Hat hervorragend funktioniert. Bei JLCPCB geht die Bestückung nur einseitig aber das hat für meine Zwecke ausgereicht. Die Platinen kommen dann so an:



20240503_055943689_iOS.png
20240503_055950524_iOS.png
 

Ts__

Eisenbahner
Registriert
6 Jan. 2016
Beiträge
3.460
Ort
Zwickau / Sachsen
Ich habe die Platinen bei JLCPCB bestellt. Da habe ich mit der Software (EasyEDA) direkt die SMD Bauteile auf der Platine positioniert und bei der Bestellung "PCB Assembly" gewählt.

Das klingt echt spannend und wäre was für meine Lichtplatinen. Die löte ich bisher selbst aus Lochrasterplatten, mit normalen Bauteilen (also kein SMD) bestückt. Als geätzte Platine mit SMD müsste das ganze auch kleiner ausfallen und wäre eben auch verkaufbar / weitergebbar.

Thomas
 

Lukas Enzenhofer

Mitglied
Registriert
9 Juni 2024
Beiträge
28
Hi Sascha, bin auch grad am überlegen, meinen Anhänger über einen Arduino Nano einzubinden, weißt du/oder jemand anderes hier ob man den über Brickcontroller 2 zum laufen bekommt…hab am LKW einen Buwizz verbaut, der soll auch so weiterlaufen, und am Anhänger möchte ich einen Zwangslenkung mittels eines Inkrementalgebers und eventuell eines Geekservos umsetzen. Der Ardunio soll dann über den verbleibenden Buwizz-Port den Strom bekommen….dachte ich mir…bis ich gestern Abend draufgekommen bin das er noch zwei Funktionen braucht, weil da geht sonst nix am Anhänger…also dachte ich auf einen komplett separat bespeißten Arduino Nano mit BT, der dann vielleicht (bitte um Hilfe) in Brickcontroller 2 eingebunden werden kann und ich alles mit dem einen Controller steuern kann. So kam ich auf den Thread hier…Möglicherweise gibt es schon jemanden der ähnliches vorhatte…würde mich über ein paar Tipps freuen.

LG Lukas
 

RR76

Urgestein
Registriert
8 Apr. 2019
Beiträge
1.242
Muss es ein Arduino sein?
Mit Legoino kannst Du mit einem esp32 einen PU Hub simulieren, programmieren kannst Du ihn mit der Arduino Software.
 

Lok24

Elektronikbahner
Registriert
11 Sep. 2019
Beiträge
1.956
Mit Legoino kannst Du mit einem esp32 einen PU Hub simulieren,
Ganz sicher?
Ich dachte der schickt nur die Befehle zum LEGO PU Hub?
(Zumindest habe ich meine immer dazu genutzt)

Und würde ein Buwizz die verstehen?

@Lukas Enzenhofer , was soll denn in Anhänger, willst Du für den Arduino Motortreiber anschließen?
Wie realisierst Du die Rückmeldung?
 

s4scha

Mitglied
Registriert
23 Aug. 2021
Beiträge
137
@Lukas Enzenhofer
BrickController 2 kann ja eine ganze Reihe von Systemen ansteuern, SBrick, BuWizz, etc.
Du könntest jetzt ein weiteres Endgerät, nennen wir es mal BT-Arduino, per Pull&Merge in den Code von BrickController 2 einfließen lassen. So könntest Du dann deinen BT-Arduino in der App ansteuern. Das dürfte aber die kompliziere Variante sein.

Was auch noch geht, was schon erwähnt wurde, einen ESP, M5 oder Arduino per Programmierung so tun zu lassen, als wäre er ein Technic Hub. Das hat natürlich den Vorteil, dass die BrickController App den Typ Technic Hub schon ansprechen kann. Das ist jetzt auch kein Selbstläufer, aber zumindest gibt es schon Leute, die genau das gemacht haben. Das Stichwort lautet hier Hub Emulation.

Links:
https://github.com/GianCann/ATS/blob/master/ESP32_LEGO/PUPHubEmulator.ino

https://github.com/corneliusmunz/legoino/blob/master/examples/HubEmulation/HubEmulation.ino

https://www.eurobricks.com/forum/forums/topic/179180-powered-up-hub-emulator-with-esp32/page/2/
 

Lok24

Elektronikbahner
Registriert
11 Sep. 2019
Beiträge
1.956
Ja, Legoino kann einen Hub ersetzen oder einen Hub ansteuern,
ah, danke, das war mir nicht bekannt. Aber man braucht dann die zusätzliche HW für Motoren und Sensoren?
ob man damit auch eine Lego Fernsteuerung ersetzen kann müsste ich nachlesen
Gewiss, man kann beliebige Befehle im LWP 3.0 senden.
Meine Programme koppeln sich mit Hub(s) und FB(s) , mit den FBs werden die Hubs dann (über den ESP, der Im Regal liegt) bedient.

Vermutlich nicht, aber das ist ja nicht das Ziel.
Ich habe das Ziel nicht verstanden. Der Nano soll als Hub funktionieren und auch über BrickController gesteuert werden?
 

Lukas Enzenhofer

Mitglied
Registriert
9 Juni 2024
Beiträge
28
Guten Abend,

Danke für die viele Rückmeldung, da gibt’s ja ordentlich Aufholbedarf meinerseits…mein Wunsch wäre ein Tiefbettauflieger der einmal die Zylinder steuert die am Rahmen des LKWs auflegen wenn das Tiefbett abgekoppelt ist, das Tiefbett in der Höhe verstellen kann, sprich zwei Motoren, würde grundsätzlich Legomotoren präferieren, und eine Zwangslenkung die über die Position der Sattelplatte angesteuert wird, nachdem Letzteres mit einem Buwizz nicht realisierbar ist (glaube ich?!), dachte ich mir dass ich die Zwangslenkung über einen Arduino regeln könnte dachte mir dann, um keinen zusätzlichen Buwizz zu benötigen, steuere ich die zwei anderen Funktionen auch über den Arduino. So meine Denke zumindest. Da der Lastwagen über PF Motoren und einen Buwizz & Brickcontroller 2 läuft, dachte ich mir will ich den Arduino auch in BC2 einbinden um zum Beispiel die Lenkung im Rückwärtsgang auszuschalten, usw…
Ich hoffe das macht die Sache jetzt klarer nachvollziehbar, ich widme mich mal den ganzen Unterlagen die ich von euch bekommen habe, Danke nochmals, bin sehr glücklich!

LG Lukas
 

Lok24

Elektronikbahner
Registriert
11 Sep. 2019
Beiträge
1.956
Vielen Dank.
Das ist ganze ist doch erstmal ganz neutral nur ein eigenes System, ein Sensor (vorne, Sattelplatte), ein Motor hinten (Lenkung).
Kein Buwizz, kein BC2. Und: es muss autark laufen.

dachte ich mir will ich den Arduino auch in BC2 einbinden um zum Beispiel die Lenkung im Rückwärtsgang auszuschalten, usw…

Das erklärts's für mich.
Ein simples Hub täte es da auch?
 

Lukas Enzenhofer

Mitglied
Registriert
9 Juni 2024
Beiträge
28
Wenn ich das hinbekomme das es autark läuft wäre das schonmal super, jedoch wäre die Steigerung das ich das mithilfe des verbleibenden buwizz ausgangs vom LKW ein Signal on/off über BC2 empfange, um so die Lenkung aktiv oder inaktiv zu setzen…und dann brauche ich noch was für die anderen Funktionen…also wäre eine Möglichkeit die über einen weiteren Buwizz/Sbrick/PU Hub zu steuern…das wäre meine zweite Wahl,

Die erste Wahl wäre wie gesagt einen Hub zu bauen, der einerseits die Logik betreiben kann für die Zwangslenkung, die zwei PF/PU Motoren betreiben kann und über meinen BT Controller gesteuert werden kann, muss nicht BC2 sein, wär halt eine super Oberfläche zum einstellen der motoren…und da kam ich halt auf den Arduino.
 

RR76

Urgestein
Registriert
8 Apr. 2019
Beiträge
1.242
Das klingt nach drei Motoren und einem Sensor.

Das kannst Du entweder mit Legoino steuern, dafür kannst Du ein Poti oder ähnliches als Sensor für die Lenkung nutzen. Über BC2 steuerst sendest Du das Signal für den Fahrmotor an Legoino und wenn er "Rückwärts" empfängt stellt er die Lenkung auf neutral.

Oder Du versuchst das gleiche mit einem Technic Hub und PyBricks, als Sensor kannst Du z.B. einen Winkelmotor nutzen. Ob PyBricks mit BC2 ansteuerbar ist weiß ich nicht, ich vermute ja, aber da sind andere besser im informiert als ich.
 
Oben