CI
This is Part 1. The build continues in Part 2. Watch Part 2

Arduino Bluetooth Controlled Car

Description

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.

Components Required

ComponentQuantity
Arduino UNO1
L298N Motor Driver1
HC-05 Bluetooth Module1
BO Motors4
BO Motor Tyres4
12V Battery1
Cardboard (Chassis)1
Switch1
WiresAs required
Jumper WiresAs required

Pin Connection Table

L298N Motor Driver → Arduino UNO

L298N PinArduino Pin
IN1D8
IN2D9
IN3D10
IN4D11
5VVIN
GNDGND

HC-05 Bluetooth Module → Arduino UNO

HC-05 PinArduino Pin
TXRX (Pin 0)
RXTX (Pin 1)
VCC5V
GNDGND

Battery → L298N Motor Driver

BatteryL298N Terminal
Positive (+)12V Input
Negative (−)GND

Motor Output Connections

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.

Bluetooth App Used

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.

Arduino Code

// 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;
    }
  }
}