Lego Power Functions mit Arduino & Bluetooth steuern
Komponenten und Zubehör
| Arduino UNO | × | 1 |
| L293D Dual H-Brücke (DIP-Gehäuse, lange Pins!) | × | 1 |
| Steckbrett | × | 1 |
| 9 V Block-Batterieclip mit Hohlstecker | × | 1 |
| Lego Power Functions Verlängerungskabel (Art. 8886) | × | 3 |
| HC-05 Bluetooth Modul | × | 1 |
Projektbeschreibung
Steuerung von Lego Power Functions Motoren & Servos per Arduino & Bluetooth-App (MIT App Inventor). Getestet mit Lego 9398 4×4 Crawler (1 Servo Lenkung, 2 L-Motoren Antrieb).
Power Functions Verkabelung verstehen
Verlängerungskabel (8886) durchtrennen → „Breakout-Kabel“ mit Lego-Stecker an einer, Pins an der anderen Seite.
- C1, C2 – Motoranschlüsse (Polarität schaltbar für Vor/Rückwärts)
- GND – Masse (Minuspol Batteriebox)
- Servo: Alle 4 Adern nutzen (hellgrauer Stecker)
- Batteriebox: Nur 9 V & GND (dunkelgrauer Stecker, männlich)
- Motor: Nur C1 & C2 (hellgrauer Stecker)
L293D H-Brücke für Motor & Servo
Arduino: 5 V, max. 30 mA. Lego Motoren: 9 V, >100 mA. Lösung: **L293D** (2 H-Brücken auf einem Chip).
- Seite 1 (Pins 1A, 2A, EN1,2): **2 Motoren parallel** (oder 2. L293D für unabhängige Steuerung)
- Seite 2 (Pins 3A, 4A, EN3,4): **Servo**
- **Wichtig:** 9 V (Lego) & 5 V (Arduino) **niemals verbinden!** Nur **alle GND zusammenführen**.
Pin-Belegung (Arduino → L293D)
| Funktion | Arduino Pin | L293D Pin |
|---|---|---|
| Motor Richtung 1A | 2 | 1A |
| Motor Richtung 2A | 5 | 2A |
| Motor PWM (EN1,2) | 9 | EN1,2 |
| Servo Richtung 3A | 6 | 3A |
| Servo Richtung 4A | 8 | 4A |
| Servo PWM (EN3,4) | 3 | EN3,4 |
L293D Logik
- EN High + 1A High + 2A Low → Motor vorwärts
- EN High + 1A Low + 2A High → Motor rückwärts
- EN High + 3A High + 4A Low → Servo links
- EN High + 3A Low + 4A High → Servo rechts
- PWM auf EN-Pins: 0–255 (490 Hz)
Arduino-Steuerlogik (Auszug)
// Globale Variablen
int motorSpeed = 0; // 0..255
int motorDirection = 1; // 1=vorwärts, 0=rückwärts
int steering = 0; // 0..255
int steeringDirection = 0; // 0=links, 1=rechts
void SetMotorControl() {
// Motor
if (motorDirection == 1) { digitalWrite(2, HIGH); digitalWrite(5, LOW); }
else { digitalWrite(2, LOW); digitalWrite(5, HIGH); }
analogWrite(9, motorSpeed);
// Servo
if (steeringDirection == 0) { digitalWrite(6, HIGH); digitalWrite(8, LOW); }
else { digitalWrite(6, LOW); digitalWrite(8, HIGH); }
analogWrite(3, steering);
}
Android App mit MIT App Inventor 2
- Auf Handy: **MIT AI2 Companion** aus Play Store installieren
- Am PC: appinventor.mit.edu öffnen (Firefox/Chrome), Google-Login
- Meine App importieren (GitHub Link unten) oder neu erstellen:
- Designer: Joystick in Pad (unten), Bluetooth Client, Labels
- Blocks: Touch-Drag Event → X/Y in -100..+100 mappen → String
"RC,steering,speed\n"per Bluetooth senden
- App auf Handy testen (Companion scannt QR-Code)
Bluetooth HC-05 an Arduino
- VCC → 5 V (modultolerant bis 6 V)
- GND → GND
- TXD → Arduino RX (Pin 0) **direkt** (3,3 V wird als HIGH erkannt)
- RXD → Arduino TX (Pin 1) **über Spannungsteiler** (3× 1 kΩ → 3,3 V)!
- Beim USB-Upload: RX/TX Kabel abziehen!
Pairing
- Bluetooth am Handy an, App starten, „Bluetooth connect“
- Gerät „HC-05“ suchen, Code „1234“ → „connected“ (grün)
Bluetooth-Kommandos empfangen & parsen
#define INPUT_SIZE 30
void loop() {
char input[INPUT_SIZE + 1];
byte size = Serial.readBytesUntil('\n', input, INPUT_SIZE);
input[size] = 0; // C-String Terminator
// Format: "RC,steering,speed\n"
char* command = strtok(input, ","); // "RC"
char* RCsteering = strtok(NULL, ","); // -100..100
char* RCspeed = strtok(NULL, ","); // -100..100
int iRCsteering = atoi(RCsteering);
int iRCspeed = atoi(RCspeed);
// Auf 0..255 skalieren (×2,55)
steeringDirection = (iRCsteering > 0) ? 1 : 0;
steering = int(2.55 * abs(iRCsteering));
motorDirection = (iRCspeed > 0) ? 1 : 0;
motorSpeed = int(2.55 * abs(iRCspeed));
SetMotorControl();
}
Ausblick
- Ultraschallsensoren → autonomer Mars-Rover
- Mehr Befehle & Funktionen
- **Wichtig:** Bluetooth-Reichweitenüberwachung → Auto-Stopp bei Signalverlust
- Für bewegte Modelle: Adafruit Motor Shield (Schraubklemmen) + Sensor Shield statt Steckbrett
Code & Ressourcen
Vollständiger Arduino-Sketch: Legocar_v3_bluetooth (siehe Code-Bereich)
GitHub (Arduino-Code, Fritzing-Schaltplan, App-Inventor-Quellcode):
github.com/Notthemarsian/Lego-car-Arduino
Schaltplan
Fritzing-Datei im GitHub-Repo: Lego rc car v2.fzz
Herstellungsprozess
- SaaS meistern: Strategien, um Kontrolle zu behalten und die Cloud zu nutzen
- Ableitung von Exponentialfunktionen zur Basis e
- Stammfunktionen von Exponentialfunktionen zur Basis e
- Zuverlässigkeit von Kraftübertragungskomponenten steigern: Bewährte Strategien für Bergbau, Fertigung & Industrie
- Elektro-Schalttafeln: Design-Grundlagen für Sicherheit & ROI
- Windkraft: Umwandlung von Luftbewegung in sauberen Strom
- UK-Hersteller verlieren 2,5 Mio. £ durch Behebung von Designfehlern in Automatisierungsprojekten
- Zuverlässige Strom- & Klimaanlagen-Miete für nahtlose Klimakontrolle
- Acht bewährte Schritte zur Diagnose und Behebung Ihres Prozessleitsystems
- Spannungsregelung in der Bahnverarbeitung meistern: Wesentliche Komponenten erklärt