Bluetooth-gesteuerter Hindernisvermeidungs-Roboter: Smartes Ferngesteuertes Fahrzeug
Bauteile und Zubehör
| Arduino Nano R3 | 1 |
| SparkFun Dual H-Brücke L298 | 1 |
| Ultraschallsensor HC-SR04 | 1 |
| HC-05 Bluetooth-Modul | 1 |
| RGB-LED (Common Anode) | 1 |
| Logic Level Converter (bidirektional) | 1 |
| Widerstand 330 Ω | 1 |
| Steckbrett | 1 |
| Breadboard-Stromversorgung 5 V/3,3 V | 1 |
| DC-Motor 12 V | 2 |
| Jumper-Kabel (Männlich/Weiblich) | 1 |
Apps und Online-Dienste
- Arduino IDE
- Arduino BlueControl (Play Store)
Über das Projekt
Ein Smartphone steuert den Roboter per Bluetooth. Nach 12 Jahren Pause baute ich während des Covid-19-Lockdowns meinen ersten Arduino-Roboter. Elektronik & Robotik sind meine Hobbys.

Der HC-05 empfängt Befehle aus der ArduinoBlueControl-App und leitet sie per serieller Kommunikation an den Arduino Nano weiter. Dieser steuert über den L298N-Treiber zwei Getriebemotoren für Vorwärts, Rückwärts, Links, Rechts.



Ein Logic Level Converter verbindet HC-05 (3,3 V) mit Arduino Nano (5 V). Der HC-SR04 misst Entfernungen; bei Hindernis < 20 cm stoppt der Roboter. Eine RGB-LED zeigt den Status an.

Chassis: 2-Rad-Plattform mit zwei Getriebemotoren. Schaltung auf Steckbrett mit 3,3 V/5 V Versorgung. Der L298N treibt die Motoren an (PWM an ENA/ENB für Geschwindigkeit).


Kurzes Video zeigt den Roboter in Aktion. Er lässt sich für Home Automation, fahrerlose Transportsysteme etc. erweitern.
Code
/* Bluetooth Controlled Obstacle Avoidance Robot
Prepared by: Alok Talukdar, Date: 09.05.2020 */
#include <SoftwareSerial.h>
#define IN1 5 // right motor
#define IN2 4
#define IN3 3 // left motor
#define IN4 2
#define ENA 9 // PWM right
#define ENB 10 // PWM left
#define redLED 8
#define greenLED A0
#define blueLED 11
const int trigPin = 6;
const int echoPin = 7;
int i, j, k = 0;
float duration, distance;
SoftwareSerial mySerial(12, 13); // RX, 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 Common Anode: HIGH = aus
digitalWrite(blueLED, HIGH);
digitalWrite(greenLED, HIGH);
}
void loop() {
while (mySerial.available()) {
data = mySerial.readStringUntil('\n');
}
btVal = data.toInt();
switch (btVal) {
case 1: forward(); setLED(0, 255, 1); dist(); break; // grün
case 2: reverse(); setLED(255, 0, 0); break; // rot
case 3: left(); break;
case 4: right(); break;
case 5: stoprobot(); setLED(255, 0, 1); break; // blau
default: setLED(255, 255, 1); break; // weiß
}
}
void setLED(int r, int g, int b) {
analogWrite(redLED, r);
digitalWrite(greenLED, g);
digitalWrite(blueLED, b);
}
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
if (distance < 20) {
stoprobot(); setLED(255, 0, 1); // blau = Stopp
}
delay(1000);
}
Schaltplan

Herstellungsprozess
- Visionsbasierter Hindernis-vermeidender Mobiler Roboter auf Raspberry Pi
- Bluetooth-gesteuerter Raspberry Pi Roboter mit Audio-Feedback bauen
- Internet-gesteuerter Video-Streaming-Roboter mit Arduino & Raspberry Pi bauen
- Gesten-gesteuerter Roboter mit Raspberry Pi
- WLAN-gesteuerter Roboter mit Raspberry Pi & Android Smartphone bauen
- Sprachgesteuerter Roboter mit Windows 10 IoT Core auf Raspberry Pi 2 bauen
- WLAN-gesteuerter Raspberry Pi Roboter mit Python bauen – Schritt-für-Schritt
- ROObockey: Präzisionsunterstützter ferngesteuerter Street-Hockey-Roboter
- KI-gestütztes Hindernisvermeidungssystem mit Arduino und Ultraschallsensoren
- Sprachgesteuerter Roboter mit Arduino Nano bauen