Mittwoch, 24. Juni 2020

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.

 



Programmcode einstellen

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

Github - Powerfunction-MotorDriver

 


Montag, 8. Juni 2020

Mit Remote-Atom auf Raspberry pi entwickeln

 

Visual Studio Code läuft auf dem Raspberry Pi nicht sonderlich gut, geschweige denn stabil. Auf dem Betriebssystem Raspbian sind noch die vorinstallierten Interpreter, aber die reichen nur für kleine Sachen.

Bei der Suche im Internet stieß ich auf die Möglichkeit, dass man per Remote den Code entwickeln kann, also am PC schreibt und die Ziel Codedatei auf dem Raspberry Pi bearbeitet.

 

Benötigt:

 

Ziel "Run my edit code"

Am PC soll eine Code Datei bearbeitet werden, die sich auf dem Raspberry Pi befindet. Der Programmcode soll traditionell ein "Hello World" werden und soll dann auch auf dem Raspberry Pi ein "Hello World!" über die Konsole anzeigen.

 

Installation Atom

Herunterladen und installieren. Im Anschluss wird das Paket "Remote-Atom" benötigt.

 


 


SSH Remote und Tunnel einstellen

Bevor auf den Raspberry die Code Remote Verbindung eingerichtet wird, muss die Verbindung per SSH hergestellt werden. Allerdings reicht die einfache SSH Verbindung mit Putty nicht aus, denn für die Verbindung ist die Einstellung eines Tunnels erforderlich. Hier muss der Port 52698 hinzugefügt werden, damit auf dem Raspberry Pi wiederum von der Code Datei eine Verbindung zum Server Remote-Atom hergestellt werden kann.


Adresse einrichten


Port für Tunnel eintragen und...


... hinzufügen



Zurück auf Session und Speichern

 

Ist die Einstellung gespeichert, kann dann auch gleich die SSH Verbindung zum Raspberry Pi hergestellt und mit dem nächsten Schritt fortgesetzt werden.

 

Installation von rmate auf Raspbian

Auf der Packages Seite zu Remote-Atom ist bereits beschrieben, wie man die Verbindung startet. Jedoch der Vollständigkeit halber füge ich die Befehle hinzu, mit dem die Vorbereitung funktioniert.


 sudo curl -o /usr/local/bin/rmate https://raw.githubusercontent.com/aurora/rmate/master/rmate  

 

 sudo chmod +x /usr/local/bin/rmate 

 

Falls der Name rmate nicht zusagt, kann rmate umbenannt werden in ratom.

 

 sudo mv /usr/local/bin/rmate /usr/local/bin/ratom 

 

Code Datei erstellen

Falls keine Code Datei vorliegt, kann in einem Zielordner eine Datei erstellt werden.

 

 touch myHelloWorld.go  

... oder wie im folgenden Beispiel




Remote Verbindung starten

Auf dem PC kann nun in der Anwendung ‚Atom‘, das installierte Remote-Atom unter 'Packages > Remote Atom > Start Server' gestartet werden.

Über Putty kann nun auf dem Raspberry die Verbindung zur einer Datei hergestellt werden.
Am besten zum Pfad wechseln, wo sich die Zieldatei befindet und dann folgenden Befehl eingeben:

 

ratom myHelloWorld.go

 

... oder wie im folgenden Beispiel





Anschließend auf dem PC mit dem Programm ‚Atom‘ das installierte Package starten. Hier sollte sich kurz danach ein neuer Tab öffnen, welcher den Inhalt der Code Datei enthält.



Let's GO

Da aktuell mein Thema die Programmiersprache GO ist, ist der auszuführende Beispiel auch in Code Go geschrieben.

 


Nun können wir mit Putty den Code auf dem Raspberry starten. Dazu folgenden Befehl eingeben und mit Enter ausführen.

go run myHelloWorld.go

Wenn der Code ausgeführt wurde, sollte in der Konsole nun das 'Hello World!' zu lesen sein.


 

Praktisch

Die Installation eines Code Editor ist auf dem Raspberry Pi mit Raspbian nicht nötigt. Vielleicht nur dann, wenn nicht immer ein PC oder Notebook mit Netzwerkverbindung vorliegt. Die Verbindung geht praktisch mit jeder textbasierten Datei und man braucht weniger eine Desktop Version von Raspbian.

Ameisen Simulation und andere Dinge

Wer lange sich schon mit C# beschäftig, hat sicherlich schon mal was von AntMe gelesen oder gehört. Diese Idee hatte ich aufgegriffen und mi...