RC Fahrtenregler für Lego Kettenfahrzeug
Auf dem Markt gibt es viele verschiedene Module an Motortreibern. Diesmal
verwende ich einen recht einfachen, der zur Ansteuerung bis zu vier PWM
Signale verwendet. Der Motorschield für den Arduino hingegen benötigt noch
eine Steuerung eines Shiftregister 74HC595. Ich weiß, das geht auch ohne,
aber ich beziehe mich diesmal auf fertige Module, die kompakt aufgebaut
sind.
Aber nur ansteuern wäre diesmal zu langweilig und daher habe ich hier als
Ziel, den Lego Technic Stunt-Racer damit zu betreiben. Wer das Modell kennt,
weiß, dass dieser mit einer Infrarot Fernbedienung ausgeliefert wird und das
eher nur in der Wohnung funktioniert.
Benötigt wird:
Modul MX1508 (DC Motor Treiber)
Arduino Mini Pro (5V Ausführung)
2x Servo Kabel
2x Lego Power Function Verlängerungskabel
Lego Technic Fahrzeug mit Power Function
Zwei Kanal Fernsteuerung und ein Empfänger mit PWM Signal Ausgängen.
Betrieb mit Funk-Fernsteuerung
Der Microcontroller soll zwei PWM Signale verarbeiten, so das damit zwei
Motoren gesteuert werden können. Als Fernsteuerung soll links der Stick für
die Geschwindigkeit sein und rechts der Stick für das Lenken. Also wie bei
jedem anderen RC Auto.
Pin Belegung Power Function Kabel
Für die Umsetzung reicht es zu wissen, welche Leitung von den vier was ist.
Bei der Suche war immer die Beschriftung 9V, 0V, C1 und C2 gegeben, weshalb
ich das ebenfalls übernehme.
Für den nächsten Schritt müssen die beiden Power Function Kabel so
abgeschnitten werden, dass die Verbindung für das eigene Projekt passen.
Motor Treiber MX1508
Den verwendeten Motor Treiber MX1508 findet man fälschlicherweise auch unter
L298N. Der Motor Treiber L298N funktioniert ebenfalls für dieses Vorhaben,
ist allerdings etwas übertrieben und ist auch eher was für größere Projekte
geeignet.
Daten:
Betriebsspannung 2V bis 10V
Signal Spannung für IN1 bis IN4 1,8V bis 5V
Ausgangspannung für Motor-A und Motor-B 2V bis 10V
Betriebsstrom 1,5A
Maximaler Kurzstrom 2,5A
Aufbau der Schaltung
Der folgende Schaltplan zeigt, wie die Power Function Kabeln mit dem
Motortreiber verbunden werden. Die Schaltung funktioniert auch mit einem
Lipo Akku. Daher kommt neben dem Power Function Stecker noch ein JST
Anschluss. Der Arduino Mini Pro wird über die Spannungsversorgung
mitbetrieben und über den Pin RAW angeschlossen.
Der fertige Motortreiber
Anders als auf dem Bild zuvor habe ich noch einen weiteren Anschluss für die Spannungsversorgung angebracht. Das Ermöglicht auch zwei Zellen Lipo Akkus zu verwendend, anstatt der Lego Powerfunction Battery Box. Links auf dem Bild sind vier Leitungen mit Steckern, die für den Anschluss eines Empfängers da sind.
Diesmal beschreibe ich nicht den Aufbau des Programmcode, sondern gehe auf einen fertigen Motortreiber von mir ein. Für das Zielprojekt soll die Eingabe der Fernsteuerung links für die Geschwindigkeitsregelung sein und rechts das Lenken. Also ganz klassisch. Natürlich ginge auch eine Steuerung, wie sie bereits von Lego Power Function mit der Infrarot Fernbediendung vorgegeben wird.
Einstellung für den Lego Technic Stunt-Racer
// Set this value true, for show all Value on Serial Monitor.
bool mSerialMonitor = false;
// 0 = Car, Input 1 for speed and input 2 for steer
// - Alternate: Tracked vehicle, Input 1 for speed motor A and
// Input 2 for speed motor B
// 1 = Tracked vehicle, Input 1 for speed and input 2 for steer
int mVehicleMode = 1;
// invert steering direction, only tracked vehicle
boolean mVehicleModeSteerInvert = false;
// Tolerance range in which no reaction should take
// place when sticks are in the middle position.
int mDeathbandPlusMinus = 10;
// change direction signal output for motor A
boolean mReverseA = true;
// middel state of the input signal. Example: stick on neutral position
int mInputMiddleA = 1500;
// minimum value of input signal. Example: stick is move complete down
int mInputMinA = 1000;
// minimum value of input signal. Example: stick is move complete up
int mInputMaxA = 2000;
// change direaction sinal output for motor B
boolean mReverseB = false;
// middel state of the input signal. Example: stick on neutral position
int mInputMiddleB = 1500;
// minimum value of input signal. Example: stick is move complete down
int mInputMinB = 1000;
// minimum value of input signal. Example: stick is move complete up
int mInputMaxB = 2000;
Lego Technic Stunt-Racer Umbau
Damit der Empfänger und der Motor Treiber nicht einfach so rum hängen,
sollte der Aufbau etwas geändert werden. Der Lego Technic Infrarot Empfänger
wird entfernt. Wie nun der Umbau aussieht, ist zweitrangig, Hauptsache die
Elektronik ist gut verstaut. Der folgende Umbau ist ein Beispiel.
Wort zum Schluss
Die Motoren lassen sich noch mit einer höheren Spannung betreiben.
Allerdings steigt dann auch die Belastung der Lego Teile in Form von
Verschleiß, wegen der fehlenden Kugellager.
Dann noch der hier verwendete Motor Treiber MX1508: Wegen einer falsch
ausgewiesenen Information zu L298N, dachte ich zunächst, dass eine höhere
Spannung möglich sei. Nach dem ich später für den Blog Eintrag mehr
Informationen über den verwendete Komponente suchte, stieß ich auf die
richtigen Werte. Zugegeben, ich hatte bereits mit der Fehlinformation den
Aufbau mit einem 3S Akku betrieben. Allerdings nur kurz. Für den Betrieb mit
einer hören Spannung würde dann der Motor Treiber L293D gehen, aber dann
könnten Probleme mit dem maximalen Strom geben, wenn XL-Motoren verwendet
werden.
Arduino Code - Motortreiber für MX1508
Kommentare