Preview build — page text is a draft awaiting human review. Code badges come from real compiles. The flasher is real but not yet hardware-tested; the Playground is still a preview.
Bluetooth RC Car: the finished build
UnoRobotics

Bluetooth RC car controlled from your phone (Arduino Uno + HC-05)

Drive a robot car from your phone over Bluetooth.

Difficulty
Medium
Build time
3 h
Parts cost
₹1,724 · $20
Verified — core avr 1.8.8, 3 Nov 2026Compile-only

Community draft — report a mistake

Parts list

PartQtyApprox.Buy
Arduino Uno R3 (compatible)1₹450Buy Arduino Uno R3 (compatible)
L298N dual motor driver1₹150Buy L298N dual motor driver
2WD robot chassis kit with 2 BO gear motors and wheels1₹450Buy 2WD robot chassis kit with 2 BO gear motors and wheels
2× 18650 Li-ion cells + holder with switch (7.4 V)1₹350Buy 2× 18650 Li-ion cells + holder with switch (7.4 V)
Jumper wires1₹40Buy Jumper wires
HC-05 Bluetooth module1₹280Buy HC-05 Bluetooth module
1 kΩ + 2 kΩ resistors1₹4Buy 1 kΩ + 2 kΩ resistors
Total₹1,724

Affiliate disclosure: “Buy” links may earn FlashReady a small commission at no extra cost to you. Prices are indicative.

Wiring

Arduino Uno R3Only the pins used are shown · 5 V logic2× 18650 Li-ion pack (7.4 V)HC-05 Bluetooth serial moduleL298N dual H-bridge motor driver1k│2k+-5VGNDA0A1A2A3D5D6D10D11EN (not connected)VCCGNDTXDRXDSTATE (not connected)IN1IN2IN3IN4ENAENB12VGND5VOUT1 → Left motor (+)OUT2 → Left motor (−)OUT3 → Right motor (+)OUT4 → Right motor (−)
Every connection
Arduino Uno R3Part · pinWireNotes
—L298N dual H-bridge motor driver · OUT1—To Left motor (+) (not drawn)
—L298N dual H-bridge motor driver · OUT2—To Left motor (−) (not drawn)
—L298N dual H-bridge motor driver · OUT3—To Right motor (+) (not drawn)
—L298N dual H-bridge motor driver · OUT4—To Right motor (−) (not drawn)
5VHC-05 Bluetooth serial module · VCCred
GNDHC-05 Bluetooth serial module · GNDblack
D10HC-05 Bluetooth serial module · TXDyellowHC-05 TXD → Uno RX (SoftwareSerial)
D11HC-05 Bluetooth serial module · RXDgreenVia 1 kΩ / 2 kΩ divider — Uno TX is 5 V; the HC-05 RXD is 3.3 V
D5L298N dual H-bridge motor driver · ENAorangePWM speed, left motor (remove the ENA jumper)
A0L298N dual H-bridge motor driver · IN1yellow
A1L298N dual H-bridge motor driver · IN2green
D6L298N dual H-bridge motor driver · ENBpurplePWM speed, right motor (remove the ENB jumper)
A2L298N dual H-bridge motor driver · IN3blue
A3L298N dual H-bridge motor driver · IN4cyan
5VL298N dual H-bridge motor driver · 5VredL298N’s regulator feeds the Uno’s 5V pin (5V-EN jumper on, battery ≤ 12 V); battery + to the 12V terminal
GNDL298N dual H-bridge motor driver · GNDblackCommon ground: battery −, L298N and Uno
2× 18650 Li-ion pack (7.4 V) · +L298N dual H-bridge motor driver · 12VredThrough the battery holder’s switch. The L298N drops about 2 V, so the motors see ~5.4 V
2× 18650 Li-ion pack (7.4 V) · -L298N dual H-bridge motor driver · GNDblackBattery −, L298N GND and Uno GND all join here

Board quirks: The L298N loses about 2 V inside, so a 7.4 V pack gives the motors roughly 5.4 V — that’s normal. Disconnect the HC-05 from D0/D1 if you ever wire it there — it blocks uploads. This build uses SoftwareSerial on D10/D11 so uploads always work. Li-ion 18650 cells can catch fire if shorted or over-discharged: use a holder with a switch, protected cells, a proper Li-ion charger, and never leave the car charging unattended.

Code

bluetooth-rc-car.inoArduino C++Open in PlaygroundOpen in PlaygroundFlash
// Bluetooth RC car — Arduino Uno + HC-05 + L298N + 2 DC gear motors.
// Drive from an Android "Bluetooth RC car" app that sends F, B, L, R, S and 0–9 for speed.
// HC-05 TXD → D10, HC-05 RXD ← D11 through a 1 kΩ / 2 kΩ divider (HC-05 logic is 3.3 V).
// L298N ENA → D5, IN1 → A0, IN2 → A1, ENB → D6, IN3 → A2, IN4 → A3.
#include <SoftwareSerial.h>

SoftwareSerial bt(10, 11);                     // RX, TX
constexpr uint8_t ENA = 5, IN1 = A0, IN2 = A1;
constexpr uint8_t ENB = 6, IN3 = A2, IN4 = A3;
int speed = 180;
unsigned long lastCommand = 0;

void motor(uint8_t en, uint8_t a, uint8_t b, int s) {
  digitalWrite(a, s >= 0 ? HIGH : LOW);
  digitalWrite(b, s >= 0 ? LOW : HIGH);
  analogWrite(en, abs(s));
}

void drive(int left, int right) {
  motor(ENA, IN1, IN2, left);
  motor(ENB, IN3, IN4, right);
}

void setup() {
  const uint8_t outputs[] = {ENA, IN1, IN2, ENB, IN3, IN4};
  for (uint8_t p : outputs) pinMode(p, OUTPUT);
  drive(0, 0);
  bt.begin(9600);                              // HC-05 default data-mode baud rate
}

void loop() {
  if (bt.available()) {
    char c = bt.read();
    lastCommand = millis();
    if (c >= '0' && c <= '9') speed = map(c - '0', 0, 9, 90, 255);
    switch (c) {
      case 'F': drive(speed, speed); break;
      case 'B': drive(-speed, -speed); break;
      case 'L': drive(-speed / 2, speed); break;
      case 'R': drive(speed, -speed / 2); break;
      case 'S': drive(0, 0); break;
    }
  }
  // Fail-safe: stop if the phone goes quiet (out of range, app closed).
  if (millis() - lastCommand > 1000) drive(0, 0);
}

Compiled for uno on avr 1.8.8 · 3 Nov 2026

How it works

The HC-05 is a Bluetooth Classic serial module: whatever your phone app sends arrives as characters on its TXD pin. Most “Bluetooth RC car” apps send single letters — F, B, L, R for the arrows, S for stop — and digits 0–9 for speed.

The Uno listens on a SoftwareSerial port (D10/D11) so the hardware serial pins stay free for uploads and debugging. The HC-05 works at 3.3 V logic, so the Uno’s 5 V TX goes through a 1 kΩ / 2 kΩ divider before reaching its RXD.

The L298N contains two H-bridges. IN1/IN2 and IN3/IN4 set each motor’s direction; PWM on ENA and ENB sets its speed. Its on-board regulator also turns the battery into 5 V for the Uno.

A fail-safe stops the motors if no command has arrived for a second — so walking out of range or closing the app never leaves the car racing across the floor.

Troubleshooting

The phone pairs but the car doesn’t move

Pair with PIN 1234 (or 0000), then connect inside the app. The HC-05 LED blinks fast when unconnected and twice every few seconds when connected.

One wheel turns backwards

Swap that motor’s two wires on OUT1/OUT2 (or OUT3/OUT4). No code change needed.

The Uno resets when the motors start

The L298N drops about 2 V and the motors pull a surge on start-up. Use healthy, fully charged cells, keep the 5V-EN jumper fitted, and add a 470 µF capacitor across the Uno’s 5V and GND.

Upgrades

  • Add an HC-SR04 so the car refuses to drive into walls.
  • Add headlights and a horn controlled from the app.
  • Swap to an ESP32 and drive it from a web page instead.

↑↓ to move · Enter to open