Gesteuerter Roboter per Gestensteuerung – Bauen Sie Ihren eigenen Motion-Sensing-Bot
Komponenten und Zubehör
| Komponente | Menge |
|---|---|
| Arduino UNO | 1 |
| Arduino Nano R3 | 1 |
| RF-433 Sender/Empfänger Modul | 1 |
| HT12 Encoder & Decoder | 1 |
| Adafruit ADXL335 Analog-Beschleunigungssensor | 1 |
| Motor Shield für Uno | 1 |
| DC-Motoren | 4 (2 Paare parallel) |
Benötigte Werkzeuge
- Lötkolben
Projektbeschreibung
Der gesten-gesteuerte Roboter ist ein klassisches Hobby- und Studentenprojekt, um Mikrocontroller-Wissen praktisch anzuwenden. Das Konzept: Die Handflächen-Orientation steuert die Bewegung des Roboter-Autos.
1. ADXL335 Beschleunigungssensor
Der Sensor misst die Beschleunigung einschließlich der Erdbeschleunigung g. Durch Neigung der Hand ändert sich der Winkel der X/Y-Achsen zur Vertikalen, wodurch eine Komponente von g auf diese Achsen wirkt – messbar als Orientierung.
Der ADXL335 misst bis zu 3g und wird über seine Achsen-Pins an die analogen Eingänge des Arduino Nano angeschlossen. Er liefert Spannungswerte proportional zur Beschleunigung (0–3,3V → ADC-Werte 0–1023).
Testcode für ADXL335:
void setup() {
pinMode(A0, INPUT); // X-Achse
pinMode(A1, INPUT); // Y-Achse
pinMode(A2, INPUT); // Z-Achse
Serial.begin(9600);
}
void loop() {
Serial.print(" X= "); Serial.println(analogRead(A0));
Serial.print(" Y= "); Serial.println(analogRead(A1));
Serial.print(" Z= "); Serial.println(analogRead(A2));
delay(1000);
}
Führen Sie diesen Code aus, um die Werte für Vorwärts, Rückwärts, Links, Rechts zu ermitteln.
2. RF-433 Sender & Empfänger
Überträgt Steuerbefehle vom Handgelenk (Nano) zum Roboter (Uno) per 433 MHz Funk (Amplitudenmodulation, Reichweite ~10 m).
Sender-Schaltung (Handgelenk-Seite)
Besteht aus RF-Sender und HT12E-Encoder. Der Encoder hat 4 Dateneingänge (Pins 6–9 am Nano), die die 4 Bewegungen codieren: HIGH = Befehl, alle LOW = Stillstand. Adress-Pins A0–A7 auf GND (gleiche Adresse bei Sender & Empfänger).
Empfänger-Schaltung (Roboter-Seite)
Spiegelbildlich zum Sender, aber Dateneingänge als Eingänge am Uno (analoge Pins, da Motor Shield fast alle digitalen Pins belegt).
3. Motor Shield
Verwendet Adafruit AFMotor-Library (GitHub). Beispiel:
#include
AF_DCMotor motor(4);
void setup() {
Serial.begin(9600);
motor.setSpeed(200);
motor.run(RELEASE);
}
void loop() {
motor.run(FORWARD);
for (int i=0; i<255; i++) { motor.setSpeed(i); delay(10); }
for (int i=255; i>0; i--) { motor.setSpeed(i); delay(10); }
motor.run(BACKWARD);
// ... analog rückwärts
motor.run(RELEASE);
delay(1000);
}
4. Alles zusammenfügen
Da das Motor Shield fast alle digitalen Pins belegt, werden die Empfänger-Daten an den analogen Pins A2–A5 des Uno eingelesen. Der finale Schaltplan zeigt die komplette Verdrahtung.
Stromversorgung: 9V-Batterie an Motor Shield. Der Autor empfiehlt 2–3 9V-Batterien parallel für ausreichend Strom bei 4 Motoren (je 2 Motoren pro Seite parallel an Motor-Ausgänge 3 & 4).
Finaler Code
Arduino Nano (Sender-Seite)
int x_axis = 0, y_axis = 0;
int forward = 9, backward = 10, right = 11, left = 12;
void setup() {
pinMode(A0, INPUT);
pinMode(A1, INPUT); // Hinweis: Original nutzt A3 für Y, hier A1 korrigiert
pinMode(forward, OUTPUT);
pinMode(backward, OUTPUT);
pinMode(right, OUTPUT);
pinMode(left, OUTPUT);
Serial.begin(9600);
}
void loop() {
x_axis = analogRead(A0);
y_axis = analogRead(A1);
Serial.print(" X = "); Serial.println(x_axis);
Serial.print(" Y = "); Serial.println(y_axis);
// Alle Ausgänge zuerst LOW
digitalWrite(forward, LOW);
digitalWrite(backward, LOW);
digitalWrite(right, LOW);
digitalWrite(left, LOW);
if (y_axis >= 390) {
Serial.println("Vorwärts");
digitalWrite(forward, HIGH);
} else if (y_axis <= 310) {
Serial.println("Rückwärts");
digitalWrite(backward, HIGH);
} else if (x_axis >= 380) {
Serial.println("Rechts");
digitalWrite(right, HIGH);
} else if (x_axis <= 320) {
Serial.println("Links");
digitalWrite(left, HIGH);
}
delay(200);
}
Arduino Uno (Empfänger/Roboter-Seite)
#include
AF_DCMotor motor_right(3);
AF_DCMotor motor_left(4);
int forward=0, backward=0, right=0, left=0;
void setup() {
pinMode(A2, INPUT); // Vorwärts
pinMode(A3, INPUT); // Rückwärts
pinMode(A4, INPUT); // Rechts
pinMode(A5, INPUT); // Links
Serial.begin(9600);
motor_right.setSpeed(255);
motor_left.setSpeed(255);
motor_right.run(RELEASE);
motor_left.run(RELEASE);
}
void loop() {
forward = digitalRead(A2);
backward = digitalRead(A3);
right = digitalRead(A4);
left = digitalRead(A5);
if (forward == HIGH) {
motor_right.run(FORWARD);
motor_left.run(FORWARD);
Serial.println("Vorwärts");
}
if (backward == HIGH) {
motor_right.run(BACKWARD);
motor_left.run(BACKWARD);
Serial.println("Rückwärts");
}
if (right == HIGH) {
motor_right.run(FORWARD);
motor_left.run(RELEASE);
Serial.println("Rechts");
}
if (left == HIGH) {
motor_right.run(RELEASE);
motor_left.run(FORWARD);
Serial.println("Links");
}
if (left==LOW && right==LOW && forward==LOW && backward==LOW) {
motor_right.run(RELEASE);
motor_left.run(RELEASE);
}
delay(100);
}
Fotos & Videos
Im Originalprojekt sind mehrere Abbildungen des Aufbaus und der Funktionsweise enthalten.
Herstellungsprozess
- Smartes Sparschwein: Münzprüfer mit Arduino Nano steuern
- Arduino Power Control Center: N-FET, P-FET, Relais & RTC Kit
- LED per Bluetooth mit Arduino steuern – Einfache DIY-Anleitung
- Autonomer Linienfolger-Roboter mit Arduino UNO
- Einfacher Taschenrechner mit Arduino UNO – Einsteigerprojekt
- DIY Arduino Luftbefeuchter-Steuerung mit Relais – Sichere Hochspannungs-Installation
- Sprachgesteuerter Roboter mit Arduino Nano bauen
- Tragbares Persistence-of-Vision-Display mit Arduino UNO und ATtiny85 bauen
- Arduino Uno & Bluetooth: Fernsteuerung eines Autos – Schritt-für-Schritt-Anleitung
- 25-kHz-4-Pin-PWM-Lüftersteuerung mit Arduino Uno – Bau, Code & Test