← All Projects

Bluetooth Controlled Car with HC-05

302 viewsFebruary 28, 2026
ArduinoBluetoothHC-05Robot CarL298NMobile

Build a smartphone-controlled RC car using Arduino, an HC-05 Bluetooth module, and the L298N motor driver. Control forward, backward, left, right, and stop from any Bluetooth serial terminal app on your phone.

Components & Supplies

×1Arduino Uno R3
×1HC-05 Bluetooth Module
×1L298N Motor Driver Module
×2DC Gear Motor (3-6V)
×1Robot Chassis Kit (2WD)
×14x AA Battery Holder

Circuit Connections

ComponentPinPinComponent
ArduinoD0 (RX)TXHC-05
ArduinoD1 (TX)RXHC-05
Arduino5VVCCHC-05
ArduinoGNDGNDHC-05
ArduinoD5 (PWM)ENAL298N
ArduinoD10 (PWM)ENBL298N

Overview

This Bluetooth car receives single-character commands over serial from a phone app: 'F' for forward, 'B' for backward, 'L' for left, 'R' for right, and 'S' for stop. The HC-05 Bluetooth module creates a wireless serial bridge, so you can use any Bluetooth terminal app (like Serial Bluetooth Terminal on Android).

The L298N dual H-bridge drives two DC motors with independent speed and direction control.

arduinoBluetooth Car Sketch
#include <SoftwareSerial.h>

SoftwareSerial bluetooth(0, 1); // RX, TX

const int enA = 5, in1 = 6, in2 = 7;
const int enB = 10, in3 = 8, in4 = 9;
const int speed = 180;

void setup() {
  bluetooth.begin(9600);
  pinMode(enA, OUTPUT); pinMode(in1, OUTPUT); pinMode(in2, OUTPUT);
  pinMode(enB, OUTPUT); pinMode(in3, OUTPUT); pinMode(in4, OUTPUT);
}

void forward() {
  analogWrite(enA, speed); analogWrite(enB, speed);
  digitalWrite(in1, HIGH); digitalWrite(in2, LOW);
  digitalWrite(in3, HIGH); digitalWrite(in4, LOW);
}
void backward() {
  analogWrite(enA, speed); analogWrite(enB, speed);
  digitalWrite(in1, LOW); digitalWrite(in2, HIGH);
  digitalWrite(in3, LOW); digitalWrite(in4, HIGH);
}
void left() {
  analogWrite(enA, 0); analogWrite(enB, speed);
  digitalWrite(in3, HIGH); digitalWrite(in4, LOW);
}
void right() {
  analogWrite(enA, speed); analogWrite(enB, 0);
  digitalWrite(in1, HIGH); digitalWrite(in2, LOW);
}
void stopCar() {
  analogWrite(enA, 0); analogWrite(enB, 0);
}

void loop() {
  if (bluetooth.available()) {
    char cmd = bluetooth.read();
    switch (cmd) {
      case 'F': forward(); break;
      case 'B': backward(); break;
      case 'L': left(); break;
      case 'R': right(); break;
      case 'S': stopCar(); break;
    }
  }
}