This project shows how to build a Bluetooth controlled car using an Arduino UNO, an L298N motor driver, and an HC-05 Bluetooth module. The car receives commands wirelessly from a smartphone over Bluetooth and moves forward, backward, left, or right based on the command received.
The Arduino reads incoming Bluetooth signals through serial communication and drives the motors accordingly using the L298N driver, which handles the higher current needed to run the BO motors. This is a great beginner-friendly robotics project to learn about serial communication, motor control, and wireless interfacing.
| Component | Quantity |
|---|---|
| Arduino UNO | 1 |
| L298N Motor Driver | 1 |
| HC-05 Bluetooth Module | 1 |
| BO Motors | 4 |
| BO Motor Tyres | 4 |
| 12V Battery | 1 |
| Cardboard (Chassis) | 1 |
| Switch | 1 |
| Wires | As required |
| Jumper Wires | As required |
| L298N Pin | Arduino Pin |
|---|---|
| IN1 | D8 |
| IN2 | D9 |
| IN3 | D10 |
| IN4 | D11 |
| 5V | VIN |
| GND | GND |
| HC-05 Pin | Arduino Pin |
|---|---|
| TX | RX (Pin 0) |
| RX | TX (Pin 1) |
| VCC | 5V |
| GND | GND |
| Battery | L298N Terminal |
|---|---|
| Positive (+) | 12V Input |
| Negative (−) | GND |
The two left-side BO motors are connected in parallel to the left output terminal (OUT1/OUT2) of the L298N, and the two right-side BO motors are connected in parallel to the right output terminal (OUT3/OUT4). Connecting each side's motors in parallel allows both wheels on that side to move together in sync.
This project uses the "Arduino Car" Bluetooth control app to send movement commands (F, B, L, R, S) from your smartphone to the HC-05 module.
// Creative Inventions
// Subscribe to my Youtube channel
char data; // Variable to store received data
void setup() {
Serial.begin(9600); // Start serial communication at 9600 baud rate
// Set motor control pins as output
pinMode(8, OUTPUT);
pinMode(9, OUTPUT);
pinMode(10, OUTPUT);
pinMode(11, OUTPUT);
}
void loop() {
if (Serial.available() > 0) { // Check if data received
data = Serial.read(); // Read received data
// Control motor movement based on received data
switch (data) {
case 'F': // Move Forward
digitalWrite(8, HIGH);
digitalWrite(9, LOW);
digitalWrite(10, HIGH);
digitalWrite(11, LOW);
break;
case 'B': // Move Backward
digitalWrite(8, LOW);
digitalWrite(9, HIGH);
digitalWrite(10, LOW);
digitalWrite(11, HIGH);
break;
case 'R': // Turn Right
digitalWrite(8, LOW);
digitalWrite(9, HIGH);
digitalWrite(10, HIGH);
digitalWrite(11, LOW);
break;
case 'L': // Turn Left
digitalWrite(8, HIGH);
digitalWrite(9, LOW);
digitalWrite(10, LOW);
digitalWrite(11, HIGH);
break;
case 'S': // Stop
digitalWrite(11, LOW);
digitalWrite(10, LOW);
digitalWrite(9, LOW);
digitalWrite(8, LOW);
break;
}
}
}