M1 Rover: Autonome Outdoor-robot voor Ruw Terrein
Onderdelen en Benodigdheden
| Onderdeel | Aantal |
|---|---|
| SparkFun Dual H-Bridge Motor Driver L298 | 1 |
| DC-motor (standaard) | 4 |
| Arduino UNO | 1 |
| LED (standaard) | 8 |
| Weerstand 221 ohm | 8 |
| Servo (Tower Pro MG996R) | 1 |
| Ultrasoon Sensor HC-SR04 | 1 |
Apps en Online Services
- Arduino IDE
- Microsoft Visual Studio 2015
- Microsoft Windows 10 IoT Core
Over dit Project
Na het bouwen van diverse indoor-robots besloot ik een outdoor-robot te ontwikkelen die in ruw terrein kan navigeren. Ik noem het de "M1-Robot".
De M1-robot stuurt eenvoudig vier DC-motoren aan via een Arduino, wat het een ideaal hart maakt voor krachtigere robotica-projecten. Daarom ontwierp ik de 4-wiel-aangedreven M1 vanaf nul als off-road voertuig.
Het is niet alleen een RC-auto; het kan geprogrammeerd worden voor zelfstandig rijden volgens instructies, of worden bestuurd vanaf een externe computer. Ook bediening via game-controllers en aangepaste joysticks is mogelijk.
Stap 1: Ontwerp
Het ontwerpen van een eigen product of prototype is leuk, maar wordt complexer wanneer je het in levensgrootte wilt maken. Ik koos Google SketchUp 2017 als krachtig en gebruiksvriendelijk ontwerphulpmiddel, waarmee je blauwdrukken kunt exporteren naar lasersnij- of 3D-printmachines.
De eerste drie weken besteedde ik aan het ontwerpen en bouwen van de romp. Als materiaal gebruikte ik een 3 mm dik houten plaatje. De wiring was niet ideaal – door tijdtekort werd alles in de romp gestopt.
De naam M1Rover paste goed, omdat ik van plan ben versies M2, M3, etc. te ontwikkelen. Het is als kit ontworpen: je hoeft het alleen met schroeven te monteren.
Stap 2: Onderdelen en Kenmerken
- Tot 3 uur looptijd!
- Ontworpen voor Arduino Uno, Mega en Nano
- 5V-9V DC werkspanning
- 3 mm dik houten chassis
- 68 mm diameter wielen met L298N Dual H-Bridge Motor/Stepper driver
- 9V batterijen voor DC-motoren
- 9V batterijen voor Arduino
- 7 LED-lichten (voor en achter)
- HC-06 Bluetooth-module
- Arduino Sensor Shield v5.0
- Ultrasoon sensor HC-SR04
Stap 3: Motorcontroller
H-bruggen worden typisch gebruikt voor het regelen van motorsnelheid en -richting, maar kunnen ook voor andere projecten dienen zoals het dimmen van krachtige LED-arrays.
- Zorg dat alle ground-verbindingen samengevoegd zijn: Arduino, voeding en motorcontroller.
- PWM-pins zijn optioneel als je geen PWM-besturing nodig hebt.
Stap 4: Chassis Monteren
Het chassis is met een lasersnijder in meerdere delen uitgesneden. Omdat het als kit is ontworpen, volgen de onderdelen eenvoudig de monteringsinstructies.
Ontwerp was ook belangrijk: een RC-auto heeft voor- en achterlichten nodig. Aan de voorzijde plaatste ik 4 witte LEDs, elk met een 220-ohm weerstand. Achteraan zitten 2 rode LEDs, ook met 220-ohm weerstanden. Deze LEDs zijn via dezelfde applicatie te besturen.
Stap 5: Schakelingen
De schakeling was lastig omdat veel elektronische onderdelen tegelijkertijd bestuurd moeten worden. Let op de juiste volgorde van aansluiting.
Componenten in de schakeling:
- Arduino Sensor Shield 5.0
- Arduino Uno R3 met L298N Dual H-Bridge Motor/Stepper driver
- 9V batterij voor DC-motoren
- 7 LED-lichten (2 achter, 4 voor)
- HC-06 Bluetooth-module
- Ultrasoon sensor HC-SR04
- Servomotor 9g
- Actieve buzzer
- 4 DC-motoren met wielen
Stap 6: Software
Bij het schrijven van de code voor de M1-robot hield ik rekening met veel factoren. Met GUI-software kun je meer informatie over de robotstatus krijgen.
De basiscode voor de starterkit, te besturen via mobiel of laptop over Bluetooth:
int frontled = 3;
int rearled = 4;
int outPin1 = 5; // motor1
int outPin2 = 6; // motor1
int outPin4 = 11; // motor2
int outPin3 = 12; // motor2
char bt = 0;
int buzzerPin = 2;
const int pingPin = 9; // Trigger Pin Ultrasoon Sensor
const int echoPin = 8; // Echo Pin Ultrasoon Sensor
void setup() {
Serial.begin(9600);
pinMode(outPin1, OUTPUT);
pinMode(outPin2, OUTPUT);
pinMode(outPin3, OUTPUT);
pinMode(outPin4, OUTPUT);
pinMode(frontled, OUTPUT);
pinMode(buzzerPin, OUTPUT);
}
void loop() {
if (Serial.available() > 0) {
bt = Serial.read();
digitalWrite(frontled, 1);
long duration, inches, cm;
pinMode(pingPin, OUTPUT);
digitalWrite(pingPin, LOW);
delayMicroseconds(2);
digitalWrite(pingPin, HIGH);
delayMicroseconds(10);
digitalWrite(pingPin, LOW);
pinMode(echoPin, INPUT);
duration = pulseIn(echoPin, HIGH);
inches = microsecondsToInches(duration);
cm = microsecondsToCentimeters(duration);
if (cm > 10) {
if (bt == 'F') { // vooruit
digitalWrite(outPin1, HIGH);
digitalWrite(outPin2, LOW);
digitalWrite(outPin3, HIGH);
digitalWrite(outPin4, LOW);
} else if (bt == 'B') { // achteruit
digitalWrite(outPin1, LOW);
digitalWrite(outPin2, HIGH);
digitalWrite(outPin3, LOW);
digitalWrite(outPin4, HIGH);
} else if (bt == 'S') { // stop
digitalWrite(outPin1, LOW);
digitalWrite(outPin2, LOW);
digitalWrite(outPin3, LOW);
digitalWrite(outPin4, LOW);
} else if (bt == 'R') { // rechts
digitalWrite(outPin1, HIGH);
digitalWrite(outPin2, LOW);
digitalWrite(outPin3, LOW);
digitalWrite(outPin4, LOW);
} else if (bt == 'L') { // links
digitalWrite(outPin1, LOW);
digitalWrite(outPin2, LOW);
digitalWrite(outPin3, HIGH);
digitalWrite(outPin4, LOW);
} else if (bt == 'I') { // vooruit-rechts
digitalWrite(outPin1, HIGH);
digitalWrite(outPin2, LOW);
digitalWrite(outPin3, LOW);
digitalWrite(outPin4, HIGH);
} else if (bt == 'G') { // vooruit-links
digitalWrite(outPin1, LOW);
digitalWrite(outPin2, HIGH);
digitalWrite(outPin3, HIGH);
digitalWrite(outPin4, LOW);
}
} else {
digitalWrite(buzzerPin, HIGH);
delay(500);
digitalWrite(buzzerPin, LOW);
delay(500);
}
}
}
long microsecondsToInches(long microseconds) {
return microseconds / 74 / 2;
}
long microsecondsToCentimeters(long microseconds) {
return microseconds / 29 / 2;
}
De Arduino-code werkt met elke controller omdat alle elektronica via seriële poortcommando's werkt. Je kunt Bluetooth, PC of mobiel gebruiken.
- C# Windows-applicatie (screenshot bijgevoegd)
Stap 7: Pakketten
STARTER
Dit M1-robotpakket bevat basiscomponenten, terwijl de bovenplaat eenvoudige montage van sensoren, manipulators of computerhardware toelaat. Sluit sensoren aan op de ingebouwde voeding en je kunt beginnen.
EXPLORER
Het Explorer-pakket maakt basale indoor- en outdoor-autonome functionaliteit mogelijk. In plaats van een IP-camera gebruikte ik een mobiele telefoon die via IP-adres verbonden is met internet.
MAPPING
Deze uitvoering voegt GPS-tracking toe voor outdoor-gebruik. Het is fascinerend om de coördinatenpaden in realtime te volgen.
MANIPULATIE
Interactie met de omgeving via een robotarm en een tweevingsgreper van 50 mm.
Belangrijke tip over servos:
Niet alle servos hebben een volledige 180-graden rotatie. Veel hebben dat niet. Je kunt een test schrijven om de mechanische grenzen te bepalen. Gebruik servo.writeMicroseconds in plaats van servo.write; dit geeft een basisbereik van 1000-2000. Veel servos ondersteunen zelfs 600-2400.
Test verschillende waarden tot je een "buzz" hoort dat aangeeft dat de grens bereikt is. Blijf binnen die grenzen. Je kunt limieten instellen met servo.attach(pin, min, max).
Als je de min en max microseconden in attach instelt, kun je gewoon servo.write gebruiken. Het gebruikt map() om 0-180 graden om te zetten naar microseconden.
Let op: als je de servo aan de eindstop houdt, trekt het hoge stroom en verhit het snel – je kunt een servo makkelijk "verbranden" door het zo te belasten.
Bepaal het echte bewegingsbereik en zorg dat de code er niet voorbij probeert te duwen. De Arduino-functie constrain() is hier handig voor:
servo.write(constrain(angle, 10, 160)); // begrens de hoek tot 10..160 graden
Productieproces
- Raspoulette: Zonnestroom-gevoede Autonome Koeienpoort Systeem Prototype
- Bouw een Windows IoT Core Rover met Raspberry Pi 2 – Beginner tot Gevorderde Gids
- Simple Pi Robot – Bouw een 2-WD Autonome Rover met Raspberry Pi
- Bouw je eigen UFO Attack Game met Arduino UNO & MAX7219 Display
- 3D RGB Arduclock – Bluetooth LED Tijdstuk met Real-Time Clock
- Uitgebreide bibliotheek voor bipolaire stappenmotoren met Arduino
- Riviergezondheidsmonitor: Arduino-gebaseerd Waterkwaliteitssysteem
- DIY Gitaar Speed Pick & Stomp Pedal – Bouw Je Eigen 3D-Gemotoriseerde Plektron
- Lineaire motoren begrijpen: Van elektrische energie naar nauwkeurige lineaire beweging
- Servomotoren Uitgelegd: Hoe Ze Werken en Waarom Ze Belangrijk Zijn
- Variabele-reluctantiemotoren: typen, werking en toepassingen