The “I Built It From Scratch” Moment – Arduino Bluetooth RC Car
Remember those remote control cars you played with as a kid?
You opened the box. Put in batteries. Pushed the throttle. And it moved.
Magic.
But you never knew how it worked.
Now imagine this: You build the car yourself. You solder nothing (yet). You write the code. You pair your phone via Bluetooth. You push a button on your screen. And YOUR car moves.
That’s not magic. That’s engineering.
And it’s easier than you think.
This tutorial will guide you through building a complete 4WD Bluetooth-controlled Arduino car. You’ll learn about motor drivers, PWM speed control, power distribution, and wireless communication.
And by the end, you’ll have a car that you can control from your phone. No expensive RC transmitter needed.
What You’ll Build – Arduino Bluetooth RC Car
| Component | What It Does |
|---|---|
| Arduino Nano | The brain – processes commands and controls motors |
| L298N Motor Driver | Powers the motors – handles high current from batteries |
| HC-06 Bluetooth Module | Receives wireless commands from your phone |
| 4WD Chassis + 4 Motors | The body and wheels – moves the car |
| 3x 18650 Batteries | Power source – 11.1V total |
| L7805 Voltage Regulator | Steps down 11.1V to 5V for Arduino and Bluetooth |
| Switch | Turns the whole system on/off |
What you’ll learn:
✅ How H-bridge motor drivers work (IN pins control OUT pins)
✅ PWM speed control (analogWrite on digital pins!)
✅ Power distribution for robotics projects
✅ Bluetooth communication (HC-06 paired with phone)
✅ Differential steering for 4WD vehicles
How the L298N Motor Driver Works (The IN/OUT Relationship) – Arduino Bluetooth RC Car
Before we wire anything, you need to understand how the L298N translates Arduino signals into motor movement.
The Basic Rule: IN pins control OUT pins. The L298N amplifies Arduino’s 5V signals to deliver battery voltage (11.1V) to your motors.
For One Motor:
| IN1 | IN2 | OUT1 | OUT2 | Motor Behavior |
|---|---|---|---|---|
| LOW | LOW | LOW | LOW | Stop (coast) |
| HIGH | LOW | HIGH | LOW | Forward |
| LOW | HIGH | LOW | HIGH | Backward |
| HIGH | HIGH | HIGH | HIGH | Brake |
For 4WD Differential Steering:
To turn left, you need:
Left wheels backward (or slower)
Right wheels forward
To turn right, you need:
Left wheels forward
Right wheels backward (or slower)
Your code handles this logic automatically based on which button you press.
Power Distribution (Critical for Stability!) – Arduino Bluetooth RC Car
With 3×18650 batteries in series, you get 11.1V (3.7V × 3). Here’s how to distribute it:
| Component | Voltage | Power Source |
|---|---|---|
| L298N (Motors) | 11.1V direct | Battery (via switch) |
| L7805 → Arduino 5V | 5V regulated | From 11.1V battery |
| L7805 → HC-06 VCC | 5V regulated | From 11.1V battery |
| HC-06 TX/RX | 5V logic | Direct to Arduino pins |
Important: Common ground is essential! Connect L298N GND, Arduino GND, L7805 GND, and battery negative together.
Complete Wiring Table – Arduino Bluetooth RC Car
Power Connections
| From | To | Wire Color (suggested) |
|---|---|---|
| Battery Positive (+) | Switch | Red |
| Switch | L298N 12V | Red |
| Switch | L7805 Input (Pin 1) | Red |
| Battery Negative (-) | L298N GND | Black |
| Battery Negative (-) | L7805 Ground (Pin 2) | Black |
| L7805 Output (Pin 3) | Arduino 5V | Orange |
| L7805 Output (Pin 3) | HC-06 VCC | Orange |
| Arduino GND | L298N GND | Black |
| Arduino GND | L7805 GND | Black |
L298N to Arduino (Control Signals)
| L298N Pin | Arduino Pin | Function |
|---|---|---|
| ENA | D10 | PWM speed – Right motors |
| IN1 | D9 | Right motors direction A |
| IN2 | D8 | Right motors direction B |
| IN3 | D7 | Left motors direction A |
| IN4 | D6 | Left motors direction B |
| ENB | D5 | PWM speed – Left motors |
L298N to Motors (4WD)
| L298N Terminal | Connected To |
|---|---|
| OUT1 | Right Front Motor (+) |
| OUT2 | Right Front Motor (-) |
| OUT3 | Left Front Motor (+) |
| OUT4 | Left Front Motor (-) |
For 4WD, wire rear motors in parallel with front motors:
Right Rear Motor (+) → same as Right Front Motor (+)
Right Rear Motor (-) → same as Right Front Motor (-)
Left Rear Motor (+) → same as Left Front Motor (+)
Left Rear Motor (-) → same as Left Front Motor (-)
HC-06 Bluetooth to Arduino
| HC-06 Pin | Arduino Pin |
|---|---|
| VCC | 5V (from L7805) |
| GND | GND |
| TX | D0 (RX) |
| RX | D1 (TX) |
⚠️ Important: Remove HC-06 RX/TX wires when uploading code! D0/D1 are used for USB programming.
L7805 Voltage Regulator Wiring – Arduino Bluetooth RC Car
The L7805 steps down 11.1V to stable 5V for Arduino and Bluetooth.
Pinout (flat side facing you, pins down):
| Pin | Function | Connect To |
|---|---|---|
| Pin 1 (left) | Input (7-25V) | Battery Positive (after switch) |
| Pin 2 (center) | Ground | Battery Negative |
| Pin 3 (right) | Output (5V) | Arduino 5V, HC-06 VCC |
Add capacitors for stability:
0.33µF between Pin 1 and Pin 2
0.1µF between Pin 3 and Pin 2
The Complete Code – Arduino Bluetooth RC Car
Full code available on GitHub: [Link to your GitHub repository]
Troubleshooting
| Problem | Likely Cause | Fix |
|---|---|---|
| Car doesn’t move | ENA/ENB jumpers still on | Remove the jumper caps |
| Car moves opposite direction | Motor polarity reversed | Swap motor wires or swap HIGH/LOW in code |
| One side doesn’t move | Loose connection on that channel | Check IN pins and OUT terminals |
| Bluetooth not connecting | HC-06 not paired | PIN is 1234, ensure VCC is 5V |
| Upload fails | HC-06 connected to D0/D1 | Disconnect HC-06 before uploading |
| Car moves erratically | Missing common ground | Connect all GNDs together |
| Motors twitch but don’t spin | Low battery voltage | Recharge 18650 batteries |
| Speed control not working | ENA/ENB jumper still on | Remove the jumper caps |
Make It Your Own (Upgrades)
| Upgrade | Difficulty | What You’ll Need |
|---|---|---|
| LED Headlights | ⭐ Easy | White LEDs + resistors |
| Obstacle Avoidance | ⭐⭐ Medium | HC-SR04 ultrasonic sensor |
| Speed Display | ⭐⭐ Medium | OLED display |
| Battery Voltage Monitor | ⭐⭐ Medium | Voltage divider circuit |
| Follow Mode | ⭐⭐⭐ Hard | Ultrasonic sensor + logic |
| Line Following | ⭐⭐⭐ Hard | IR sensors |
What You Learned
| Concept | Why It Matters |
|---|---|
| H-bridge motor control | IN pins control OUT pins – amplifies Arduino signals |
| PWM speed control | analogWrite() on PWM-enabled digital pins |
| Power distribution | Separate high-current (motors) from low-current (logic) |
| Voltage regulation | L7805 steps down 11.1V to stable 5V |
| Bluetooth communication | HC-06 sends/receives serial data |
| Differential steering | Opposite wheel directions for turning |
🎥 Watch the Complete Video Tutorial
See the full build process – assembly, wiring, code explanation, and live demo – on YouTube:
📺 Build a 4WD Bluetooth Arduino Car with PWM Speed Control
👉 Don’t forget to Subscribe to Roborear on YouTube for more robotics projects every week!
Your Turn
This project taught me that you don’t need expensive RC equipment to build a fast, responsive car. A $5 Bluetooth module and your phone are all you need.
Now go build yours. Drive it around. Chase your cat. Scare your roommate.
Then add sensors. Add lights. Make it follow lines.
That’s how you learn.
Frequently Asked Questions (FAQ)
1. Why isn't my speed control working? My car only moves at full speed.
This is the most common mistake. The L298N module has small jumper caps on the ENA and ENB pins. When these jumpers are in place, the enable pins are permanently connected to 5V, making the motors run at full speed regardless of your PWM code.
The fix: Remove the jumper caps from ENA and ENB. Then connect these pins to Arduino PWM-capable pins (D5 and D10) using jumper wires. Now analogWrite() will control the speed properly.
The code maps speed levels 1-9 to PWM values 50-255. Level 0 stops the car completely. If you want even slower minimum speed, change the map() function to start at a lower value like 30 instead of 50.
2. Why does my car turn in the wrong direction? When I press 'L', it turns right.
This is a wiring or code mapping issue. You have three options to fix it:
Option 1 (Easiest): Swap the motor wires connected to OUT1/OUT2 and OUT3/OUT4 on your L298N.
Option 2 (Software): In the code, swap the turnLeft() and turnRight() functions:
// Swap the code in these functions // turnLeft() should have code from turnRight() // turnRight() should have code from turnLeft()
Option 3 (Hardware): Swap the IN1/IN2 and IN3/IN4 pins on the Arduino side.
Your code’s labeling is just a naming convention – what matters is that pressing ‘L’ makes the car physically turn left. Adjust until it works.
3. Can I run this on a single 18650 battery or a power bank?
Single 18650 (3.7V): No, this won’t work. The L298N needs at least 7V to operate properly. The Arduino can run on 5V, but the motors won’t have enough power to move the car.
Power bank (5V): No, 5V is insufficient for the L298N. The motors will stall even with no load.
Recommended setup: Use 2x 18650 in series (7.4V) or 3x 18650 in series (11.1V) for the motors. Use the L7805 to step down the voltage to 5V for Arduino and Bluetooth.
Alternative: Use a 2S LiPo battery (7.4V) instead of 18650s. It’s lighter and provides higher discharge current. If you use 2S, you can skip the L7805 if your L298N has a 5V output (some modules do). Check your L298N module – some have a built-in 5V regulator that can power the Arduino when the input is above 7V.



