Beginnerarduino

Bluetooth RC Car with Arduino

Build a smartphone-controlled RC car using Arduino, motor driver, and Bluetooth module.

3-4 hours
$20-35
Sarah Mitchell
Bluetooth RC Car with Arduino

Parts List

  • Arduino Uno
  • L298N Motor Driver
  • HC-05 Bluetooth Module
  • DC Motors (x4)
  • Car Chassis Kit
  • Battery Pack (7.4V)

Step-by-Step Instructions

1

Assemble Chassis

Attach the four DC motors to the car chassis using the included mounting brackets and screws. Press-fit the wheels onto the motor shafts, ensuring they spin freely without wobble. Secure the battery pack to the chassis base and route the power wires toward the motor driver location.

2

Wire Motor Driver

Connect the two left-side motors to motor output A and the two right-side motors to motor output B on the L298N driver module. Wire the driver's input pins IN1-IN4 to Arduino digital pins 5, 6, 7, and 8 for direction control, and connect the ENA and ENB pins to PWM pins 9 and 10 for speed control. Connect the driver's 12V input to the battery pack and its 5V output to the Arduino Vin pin.

3

Connect Bluetooth

Wire the HC-05 Bluetooth module's TX pin to Arduino pin 10 (SoftwareSerial RX) and RX pin to Arduino pin 11 through a voltage divider to step down to 3.3V logic. Connect VCC to 5V and GND to ground. Power on the HC-05 and pair it with your smartphone using the default PIN 1234 or 0000.

4

Program Controls

Write an Arduino sketch that reads single-character commands from the Bluetooth serial interface and maps them to motor actions: 'F' for forward, 'B' for backward, 'L' for left, 'R' for right, and 'S' for stop. Add PWM speed control by accepting numeric values to adjust motor speed dynamically. Install a Bluetooth RC controller app on your phone and configure the button layout to send the matching characters.

#include <SoftwareSerial.h>
SoftwareSerial BT(10, 11);

void setup() {
  BT.begin(9600);
  pinMode(5, OUTPUT); pinMode(6, OUTPUT);
  pinMode(7, OUTPUT); pinMode(8, OUTPUT);
  pinMode(9, OUTPUT); pinMode(10, OUTPUT);
}

void forward() {
  digitalWrite(5, HIGH); digitalWrite(6, LOW);
  digitalWrite(7, HIGH); digitalWrite(8, LOW);
}
void backward() {
  digitalWrite(5, LOW); digitalWrite(6, HIGH);
  digitalWrite(7, LOW); digitalWrite(8, HIGH);
}
void stopMotors() {
  digitalWrite(5, LOW); digitalWrite(6, LOW);
  digitalWrite(7, LOW); digitalWrite(8, LOW);
}

void loop() {
  if (BT.available()) {
    char cmd = BT.read();
    switch(cmd) {
      case 'F': forward(); break;
      case 'B': backward(); break;
      case 'S': stopMotors(); break;
    }
  }
}