Gebarenbestuurde Robot: Bouw Je Eigen Bewegingssensende Bot
Onderdelen en Benodigdheden
| Onderdeel | Aantal |
|---|---|
| Arduino UNO | 1 |
| Arduino Nano R3 | 1 |
| RF-433 Zender/Ontvanger Set | 1 |
| HT12 Encoder/Decoder | 1 |
| Adafruit ADXL335 Analoge Versnellingsmeter | 1 |
| Motor Shield voor Uno (Adafruit) | 1 |
| DC Motor (standaard) | 4 (2 paren parallel) |
Benodigde Tools
- Solderbout
Over dit Project
De gebarenbestuurde robot is een klassiek project voor hobbyisten en studenten om microcontroller-kennis praktisch toe te passen. De oriëntering van de handpalm bestuurt de beweging van de robotwagen. Hieronder wordt de werking per component uitgelegd.
1. ADXL335 Versnellingsmeter
De ADXL335 meet versnelling inclusief zwaartekracht 'g'. Door de kanteling van de hand verandert de hoek van de X- en Y-as ten opzichte van de verticale, waardoor een component van 'g' op die assen meetbaar is. Dit geeft de handoriëntatie aan.
De sensor meet tot 3g en wordt aangesloten op de analoge pinnen van de Arduino Nano (op de handpalm gemonteerd). De uitgangsspanning (0-3.3V) wordt gelezen als 0-1024 waarden (10-bit ADC). Verschillende kantelingen geven verschillende waarden per as, welke gemapt worden op robotbewegingen.
Testcode ADXL335:
void setup() {
pinMode(A0, INPUT); // X-as
pinMode(A1, INPUT); // Y-as
pinMode(A2, INPUT); // Z-as
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);
}
2. RF-433 Zender en Ontvanger
De RF-module (433 MHz, Amplitude Modulatie) verzendt commando's van de Arduino Nano (polshand) naar de Arduino Uno (robot). Bereik ca. 10 meter.
Zender Schakeling (met HT12E Encoder):
- Adrespinnen A0-A7: allemaal LOW (GND)
- Datapinnen (D0-D3) → Arduino Nano digitale pinnen 6-9
- Pin 9 (D0) HIGH = Vooruit
- Pin 10 (D1) HIGH = Achteruit
- Pin 11 (D2) HIGH = Links
- Pin 12 (D3) HIGH = Rechts
- Alle LOW = Stilstand
Ontvanger Schakeling (met HT12D Decoder):
- Identieke adresinstelling als zender
- Datapinnen → Arduino Uno analoge pinnen A0-A3 (om digitale pinnen vrij te houden voor Motor Shield)
- LED op pin 17 (met 1kΩ) voor verbindingscontrole
3. Motor Shield (Adafruit)
Gebruikt de AFMotor bibliotheek. Voorbeeld:
#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); }
// ... etc
}
4. Alles Combineren
De Motor Shield gebruikt bijna alle digitale pinnen, dus de ontvangerdata wordt ingelezen op analoge pinnen A0-A3. De motoren worden in paren parallel aangesloten (linker/rechter zijde) op motor aansluitingen 3 en 4 van de shield. Voor voldoende stroom worden 2-3× 9V batterijen parallel aangesloten op de shield voeding.
Finale Code
Arduino Nano (Zender/Zijkant)
int x_axis = 0, y_axis = 0;
int forward = 9, backward = 10, right = 11, left = 12;
void setup() {
pinMode(A0, INPUT);
pinMode(A3, OUTPUT); // Let op: originele code had A3 als OUTPUT, waarschijnlijk A1 bedoeld voor Y-as
pinMode(forward, OUTPUT);
pinMode(backward, OUTPUT);
pinMode(right, OUTPUT);
pinMode(left, OUTPUT);
Serial.begin(9600);
}
void loop() {
x_axis = analogRead(A0);
y_axis = analogRead(A3); // Controleer pin!
Serial.print("X = "); Serial.println(x_axis);
Serial.print("Y = "); Serial.println(y_axis);
if (y_axis >= 390) { digitalWrite(forward, HIGH); Serial.println("Vooruit"); }
else if (y_axis <= 310) { digitalWrite(backward, HIGH); Serial.println("Achteruit"); }
else if (x_axis >= 380) { digitalWrite(right, HIGH); Serial.println("Rechts"); }
else if (x_axis <= 320) { digitalWrite(left, HIGH); Serial.println("Links"); }
else {
digitalWrite(forward, LOW);
digitalWrite(backward, LOW);
digitalWrite(right, LOW);
digitalWrite(left, LOW);
}
delay(200);
}
Arduino Uno (Ontvanger/Robot)
#include
AF_DCMotor motor_right(3);
AF_DCMotor motor_left(4);
int forward=0, backward=0, right=0, left=0;
void setup() {
pinMode(A0, INPUT); // Vooruit
pinMode(A1, INPUT); // Achteruit
pinMode(A2, INPUT); // Rechts
pinMode(A3, 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(A0);
backward = digitalRead(A1);
right = digitalRead(A2);
left = digitalRead(A3);
if (forward == HIGH) {
motor_right.run(FORWARD);
motor_left.run(FORWARD);
Serial.println("Vooruit");
}
if (backward == HIGH) {
motor_right.run(BACKWARD);
motor_left.run(BACKWARD);
Serial.println("Achteruit");
}
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);
}
Foto's en Video's
Meerdere afbeeldingen van het gebouwde robot en schakelingen beschikbaar op de projectpagina.
Productieproces
- Slimme spaarpot bouwen: Muntenacceptor besturen met Arduino Nano
- Arduino Power Control Center: N-FET, P-FET, Relais & RTC Kit
- Een LED bedienen via Bluetooth met Arduino – Eenvoudige DIY Handleiding
- Bouw Een Autonome Lijnvolgende Robot Met Arduino UNO
- Bouw een eenvoudige rekenmachine met Arduino UNO – Makkelijk project
- DIY Arduino Luchtbevochtiger Controller met Relais – Veilige Hoogspanningsopstelling
- Bouw een Stemgecontroleerde Robot met Arduino Nano
- Een draagbaar Persistence-of-Vision-display bouwen met Arduino UNO en ATtiny85
- Arduino Uno & Bluetooth voor afstandsbediening van auto: stap-voor-stap handleiding
- Arduino robotarm besturen via speciale Android-app
- 25 kHz 4-pins PWM-ventilatorbesturing met Arduino Uno – Bouw, Code & Test