Bluetooth Robot met Obstakelvermijding: Slimme Remote-gecontroleerde Voertuig
Onderdelen en Benodigdheden
| Onderdeel | Aantal |
|---|---|
| Arduino Nano R3 | 1 |
| SparkFun Dual H-Bridge Motor Driver L298 | 1 |
| Ultrasonische Sensor HC-SR04 | 1 |
| HC-05 Bluetooth Module | 1 |
| RGB Diffused Common Anode LED | 1 |
| SparkFun Logic Level Converter Bi-Directional | 1 |
| Weerstand 330 ohm | 1 |
| Breadboard | 1 |
| Breadboard Voeding 5V/3.3V | 1 |
| DC Motor 12V | 2 |
| Male/Female Dupont-draden | 1 set |
Apps & Online Services
- Arduino IDE
- Arduino BlueControl (beschikbaar in Play Store)
Over dit Project
Dit project gebruikt een mobiele telefoon om via Bluetooth met een robot te communiceren. Ik wilde al lang een robot bouwen en via telefoon besturen. Na meer dan 12 jaar nam ik de uitdaging aan tijdens de Covid-19 lockdown. Elektronica en robotica is een van mijn favoriete hobby's.

De robot ontvangt Bluetooth-signalen van de telefoon via de HC-05 module en stuurt de motoren aan. Ik gebruikte de ArduinoBlueControl app voor besturing.



De Arduino Nano is het hart. Hij ontvangt signalen van de HC-05 via seriële communicatie en stuurt de motoren aan via de L298N motor driver voor vooruit, achteruit, links en rechts.

Let op: TX en RX van de HC-05 correct met de Arduino Nano verbinden. Een logic level converter wordt hiervoor gebruikt.
De robot gebruikt de HC-SR04 ultrasonische sensor voor obstakeldetectie. Bij een obstakel tijdens vooruitrijden stopt de robot. Een RGB LED toont de robotstatus.

De robot is gemonteerd op een 2-wiel chassis met getande aandrijvingsmotoren. De elektronica zit op een breadboard met voeding (3.3V en 5V). De Arduino Nano kan motoren niet direct aansturen (te veel stroom), daarom de L298N. PWM signalen van de Nano regelen de motortempo via ENA en ENB pinnen van de L298N.


Hier is een korte video van de robot in actie:
[Video embed]
Hopelijk vind je mijn Bluetooth-gestuurde obstakelvermijdingsrobot leuk! Deze kan uitgebreid worden voor thuisautomatisering, winkelvloer voertuigen, en nog veel meer.
Code
Bluetooth Gestuurde Robot - Arduino Code
/* Bluetooth Controlled Obstacle Avoidance Robot
Prepared by: Alok Talukdar
Date: 09.05.2020 */
#include <SoftwareSerial.h>
// L298 Motor pinnen
#define IN1 5 // rechter motor
#define IN2 4 // rechter motor
#define IN3 3 // linker motor
#define IN4 2 // linker motor
#define ENA 9 // PWM rechter motor
#define ENB 10 // PWM linker motor
// RGB LED pinnen
#define redLED 8
#define greenLED A0
#define blueLED 11
// HC-SR04 Ultrasonische sensor
const int trigPin = 6;
const int echoPin = 7;
int i, j, k = 0;
float duration, distance;
// HC-05 Bluetooth
SoftwareSerial mySerial(12, 13); // 12 → RX, 13 → TX
String data;
int btVal;
void setup() {
pinMode(trigPin, OUTPUT);
pinMode(echoPin, INPUT);
mySerial.begin(9600);
pinMode(IN1, OUTPUT); pinMode(IN2, OUTPUT);
pinMode(IN3, OUTPUT); pinMode(IN4, OUTPUT);
pinMode(ENA, OUTPUT); pinMode(ENB, OUTPUT);
pinMode(redLED, OUTPUT); pinMode(blueLED, OUTPUT); pinMode(greenLED, OUTPUT);
digitalWrite(IN1, LOW); digitalWrite(IN2, LOW);
digitalWrite(IN3, LOW); digitalWrite(IN4, LOW);
analogWrite(redLED, 255); // RGB LED common anode = uit
digitalWrite(blueLED, HIGH);
digitalWrite(greenLED, HIGH);
}
void loop() {
while (mySerial.available()) {
data = mySerial.readStringUntil('\n');
}
btVal = data.toInt();
switch (btVal) {
case 1: forward(); digitalWrite(greenLED, LOW); analogWrite(redLED, 255); digitalWrite(blueLED, HIGH); dist(); break;
case 2: reverse(); digitalWrite(greenLED, HIGH); analogWrite(redLED, 255); digitalWrite(blueLED, LOW); break;
case 3: left(); break;
case 4: right(); break;
case 5: stoprobot(); digitalWrite(greenLED, HIGH); analogWrite(redLED, 0); digitalWrite(blueLED, HIGH); break;
default: digitalWrite(greenLED, HIGH); analogWrite(redLED, 255); digitalWrite(blueLED, HIGH); break;
}
if (mySerial.available() < 0) { /* geen data */ }
}
// Motor controle functies
void forward() {
for (i = 0; i <= 100; i++) {
analogWrite(ENA, i); analogWrite(ENB, i);
digitalWrite(IN1, HIGH); digitalWrite(IN2, LOW);
digitalWrite(IN3, LOW); digitalWrite(IN4, HIGH);
}
}
void reverse() {
for (j = 0; j <= 100; j++) {
analogWrite(ENA, j); analogWrite(ENB, j);
digitalWrite(IN1, LOW); digitalWrite(IN2, HIGH);
digitalWrite(IN3, HIGH); digitalWrite(IN4, LOW);
}
}
void left() {
analogWrite(ENA, 127); analogWrite(ENB, 0);
digitalWrite(IN1, HIGH); digitalWrite(IN2, LOW);
digitalWrite(IN3, HIGH); digitalWrite(IN4, HIGH);
}
void right() {
analogWrite(ENA, 0); analogWrite(ENB, 127);
digitalWrite(IN1, HIGH); digitalWrite(IN2, HIGH);
digitalWrite(IN3, LOW); digitalWrite(IN4, HIGH);
}
void stoprobot() {
analogWrite(ENA, 0); analogWrite(ENB, 0);
digitalWrite(IN1, LOW); digitalWrite(IN2, LOW);
digitalWrite(IN3, LOW); digitalWrite(IN4, LOW);
}
void dist() {
digitalWrite(trigPin, LOW); delayMicroseconds(2);
digitalWrite(trigPin, HIGH); delayMicroseconds(10);
digitalWrite(trigPin, LOW);
duration = pulseIn(echoPin, HIGH);
distance = (duration * 0.0343) / 2; // cm, geluidssnelheid 340 m/s
if (distance < 20) { // < 20 cm → STOP
stoprobot();
digitalWrite(greenLED, HIGH); analogWrite(redLED, 0); digitalWrite(blueLED, HIGH);
}
delay(1000);
}
Schema's
Schakelingsschema van de robot.

Productieproces
- Visie-gebaseerde Obstakel-Vermijdende Mobiele Robot op Raspberry Pi
- Bouw een Bluetooth-gecontroleerde Raspberry Pi Robot met Audio Feedback
- Bouw een Internet-gecontroleerde Video-streamende Robot met Arduino & Raspberry Pi
- Gebaren-gecontroleerde Robot Aangedreven door Raspberry Pi
- Bouw een WiFi-gecontroleerde Robot met Raspberry Pi & Android Smartphone
- Bouw een Spraak-gecontroleerde Robot met Windows 10 IoT Core op Raspberry Pi 2
- Bouw een Wi-Fi-gecontroleerde Raspberry Pi Robot met Python – Stap-voor-stap Gids
- ROObockey: Precisie-geassisteerde Remote-gecontroleerde Straathockey-robot
- AI-gestuurd obstakelvermijdingssysteem met Arduino en ultrasone sensoren
- Bouw een Stemgecontroleerde Robot met Arduino Nano
- Ethernet-gestuurde robotarm: Remote control gemaakt simpel