Bluetooth Arduino Car With No Soldering (L298N + HC-06)

by troniction in Circuits > Arduino

17 Views, 0 Favorites, 0 Comments

Bluetooth Arduino Car With No Soldering (L298N + HC-06)

3-arduino-car-angle.jpg
4-arduino-car-top-view.jpg

This is a four-wheel car you drive from an Android phone over Bluetooth. It has a horn, a reversing beep, and ten speeds. Nothing is soldered. Every connection is a screw terminal or a jumper wire that pushes onto a pin.

I wrote it for someone who has never done this before. That might be a parent and a kid at the same table. Each step says why, not just which hole, because the reason is usually what's missing when a kit stalls halfway.

Before you buy anything: you need an Android phone. The HC-06 module uses "classic" Bluetooth, and iPhones cannot connect to it. No app changes that.

  1. Time: two evenings, about 90 minutes each
  2. Cost: about $90 in parts bought singly (US prices, August 2026)
  3. Age: 12 and up, with an adult for the battery and the code upload
  4. Skills: none. It assumes you know nothing.


Supplies

  1. Arduino Uno R3 + USB cable ×1 — A clone is fine; it runs the same code
  2. L298N motor driver module ×1 — Screw-terminal version. This is what makes it solder-free
  3. HC-06 Bluetooth module ×1 — With header pins already attached
  4. 4WD chassis: 2 plates + 4 wheels ×1 — Or a full 4WD kit, but only if its photos show motors with wires already attached
  5. TT gear motors, pre-wired (Adafruit #3777) ×4 — This exact part. #3801/#3802 look identical and ship with no wires
  6. Active buzzer module ×1 — On a small board with pins, not a bare buzzer
  7. 18650 battery holder (2-cell) with leads ×1 — Bare leads go straight into the screw terminals
  8. 18650 rechargeable cells, button-top ×2 — Not sold loose on Amazon; buy from a battery specialist
  9. 18650 charger ×1
  10. Jumper wires, male-to-female and female-to-female ×~30
  11. Small Phillips screwdriver ×1
  12. 1 kΩ and 2 kΩ resistors, one each — optional, recommended: the voltage divider in Step 5
  13. Mini breadboard (170 holes) — optional, holds the divider so it stays solder-free

Software: Arduino IDE 2 (free) on any laptop, and the free Serial Bluetooth Terminal app on the phone.

How It Works (two Minutes, Worth It)

fig-h-bridge.png

Four parts do all the work:

  1. Arduino Uno is a small computer with no screen. You load instructions once over USB, and it runs them every time it has power.
  2. L298N motor driver does the pushing. An Arduino pin can supply about 20 mA; a gear motor wants a few hundred. Wire a motor straight to a pin and you get a dead Arduino, not a slow car. The battery feeds the driver directly, and the Arduino only tells it which way and how fast.
  3. HC-06 is a Bluetooth radio that pretends to be a wire. Press forward in the app and the phone sends the letter F. The Arduino reads that one letter and acts. That's the whole protocol.
  4. The buzzer beeps when you reverse. It also plays Happy Birthday on request, which is mostly a way to learn what tone() does.

How a motor runs backwards: inside each half of the L298N is an H-bridge, four switches in a square with the motor across the middle. Close one diagonal pair and current flows one way; close the other and it flows back. The motor never changes, only the path through it.

Build the Chassis

Mount the four motors and wheels on the lower plate, following your chassis kit's own instructions. Kits differ, so this step follows yours.

Note which way the motors face. The two on the left side point the opposite way from the two on the right. That matters in Step 3.

Leave the top plate off for now. You'll want room for your hands.

Motors to the Motor Driver (the Fiddly One)

fig-step1-motors-to-driver.png

The motors work in pairs: the two left motors drive together, and so do the two right ones.

  1. Left pair → OUT1 / OUT2
  2. Right pair → OUT3 / OUT4

Loosen each screw terminal, push the wire in, and tighten it. The coloured insulation should go right up to the opening and stop there, with nothing bare showing.

This is the step that catches everyone. Because the two sides face opposite ways, wiring all four "the same" makes one side spin backwards, and the car turns in circles instead of driving forward. So one pair goes in straight and the other goes in crossed.

If you get it wrong, nothing breaks. You swap two wires on one side and carry on. You'll find out in Step 10.

Motor Driver to the Arduino

fig-step2-driver-to-arduino.png
fig-pwm.png

Six male-to-female jumper wires, straight across:

  1. Arduino 5 → L298N ENA
  2. Arduino 6 → L298N ENB
  3. Arduino 9 → L298N IN4
  4. Arduino 10 → L298N IN3
  5. Arduino 11 → L298N IN2
  6. Arduino 12 → L298N IN1

First, pull the two small jumper caps off ENA and ENB on the L298N, if yours has them. They tie those pins to 5V, which overrides the Arduino and leaves the car stuck at full speed.

Why pins 5 and 6? IN1–IN4 choose direction. ENA and ENB choose speed, using PWM: the pin switches on and off thousands of times a second, and on for a quarter of the time feels to a motor like a quarter of the power. Only some Uno pins can do that (3, 5, 6, 9, 10, 11). Put ENA/ENB anywhere else and every speed becomes full speed, with no error to tell you.

Bluetooth Module to the Arduino

fig-step3-hc06-divider.png

Four wires. Two carry power, two carry the conversation, and those two cross:

  1. HC-06 VCC → Arduino 5V
  2. HC-06 GND → Arduino GND
  3. HC-06 TXD → Arduino 0 (RX) (the module talks, the Arduino listens)
  4. HC-06 RXD → Arduino 1 (TX) (the Arduino talks, the module listens)

TX means "this pin talks". Wire TX to TX and both sides shout past each other. Nothing breaks, and the car just never answers.

About the RXD wire. The Arduino's TX pin puts out 5 V, and the HC-06's RXD pin is a 3.3 V input. The car in these photos has that wire connected directly, and it has run that way for years. But that runs a 3.3 V pin above its rating, so I recommend the by-the-book fix: a voltage divider. It's two resistors on a mini breadboard, and still no soldering:

  1. Arduino pin 1 (TX) → 1 kΩ → a row on the mini breadboard
  2. That same row → HC-06 RXD
  3. That same row → 2 kΩ → GND

5 V × 2k ÷ (1k + 2k) ≈ 3.3 V, which is what the module expects. The diagram above shows it. The other data wire (HC-06 TXD → Arduino pin 0) needs nothing, because 3.3 V is already enough for the Arduino to read as HIGH. The full reasoning is here: Do you need a voltage divider?

⚠️ The upload trap. The HC-06 sits on pins 0 and 1, the same line the USB cable uses to program the board. Before every upload, unplug the two data wires (TXD and RXD). Plug them back in afterwards. Leave them in and the upload fails with an error about the programmer not responding, which tells you nothing about the real cause.

The Buzzer

fig-step45-buzzer-battery.png

Three wires: the buzzer's I/O pin to Arduino pin 2, VCC to 5V, GND to GND. (Some buzzer boards label them S, +, − instead. Same three jobs.)

The Battery — Always Last

Leave the cells out of the holder for this step.

  1. Red (+) → L298N +12V and Arduino Vin
  2. Black (−) → L298N GND and Arduino GND

The same two leads feed both boards. That second pair does two jobs: it powers the Arduino once the USB cable comes out, and it gives the Arduino and the driver a shared ground. Without a shared ground, the driver can't make sense of the Arduino's signals at all.

Every other wire carries almost no current. These carry all of it, which is why they go in last, every time.

Battery safety. 18650 cells aren't AA batteries. A shorted cell gets hot enough to burn. Check polarity every time, charge on a hard surface and never unattended overnight, and stop using any cell that's dented, swollen or warm for no reason. The adult owns this step.

Six Checks Before Power-On

This step prevents the only expensive mistakes in the build. Do it every time, including when you're sure.

  1. Battery polarity: red to +12V, black to GND. The wrong way round kills the driver.
  2. No stray strands. One loose whisker touching the next terminal is a short.
  3. Grounds tied together: Arduino GND and driver GND.
  4. Pins 0 and 1 carry only the HC-06's data wires, and those come off for uploads.
  5. Motor wires seated: tug each one gently.
  6. Car on a box, wheels off the table, so a wiring mistake spins wheels, not the car off the desk.

Then put the cells in. Nothing should get warm. If anything does, take the cells out and recheck check 1.

Upload the Code

This is the adult step. It isn't dangerous, but it means installing software. Budget twenty minutes.

  1. Install Arduino IDE 2 from arduino.cc.
  2. Download the two attached files, troniction-arduino-car.ino and pitches.h. Put them together in a folder named troniction-arduino-car.
  3. Open the .ino. Choose Tools → Board → Arduino Uno and the right Port.
  4. Unplug the HC-06's TXD and RXD wires. (Step 5 explains why.)
  5. Click Upload and wait for "Done uploading".
  6. Plug TXD and RXD back in.

If the upload fails straight away, try a different USB cable. Some cables only charge and carry no data.

What the code listens for. Each button sends one character:

  1. F: forward
  2. B: reverse, with the beep
  3. L / R: turn left / right
  4. 0–9: speed, from slow to fast
  5. q: full speed
  6. V: horn
  7. X: Happy Birthday
  8. anything else, e.g. S: stop

The speeds start at 150 of 255, not at 0. Below about 150 the motors buzz but the car doesn't move, so the slowest useful speed is the floor.

One behaviour to know: the car keeps doing the last thing it was told. F drives until the next character arrives. The horn and the song also repeat until you send something else. That's why stopping is its own button.

Pair the Phone and Drive

  1. Put the cells in and switch on. The HC-06's LED blinks fast. That means it's powered and waiting.
  2. On the phone: Settings → Bluetooth → pair with HC-06. The PIN is usually 1234, sometimes 0000.
  3. Install Serial Bluetooth Terminal (by Kai Morich, free) from Google Play.
  4. Settings → Send → Newline: set it to None. ⚠️ This matters. The app normally adds a line ending after each character, and the car treats that line ending as "stop". Leave it on and every button makes the car twitch and halt.
  5. Devices → Bluetooth Classic → HC-06. The module's LED stops blinking once connected.
  6. Long-press the macro buttons (M1, M2, …) along the bottom and set them to F, B, L, R, S, 5, V.
  7. With the wheels still off the table, press F.

If it turns instead of going forward, one pair of motor wires is the wrong way round (Step 3). Swap the two wires on the side that spins backwards. Everyone gets this wrong once.

Then put it on the floor. This is the whole point. Take the video.

If It Doesn't Work

  1. Two wheels spin backwards: Swap one motor pair's wires (Step 3)
  2. Nothing moves, no sound: Battery polarity, or a loose screw terminal
  3. Motors buzz but don't turn: Speed too low, or the cells are flat
  4. Phone can't find the car: HC-06 not powered, or already paired to another phone
  5. Connected, but nothing happens: TX/RX not crossed (Step 5), or the app's newline isn't None (Step 10)
  6. Car moves for a blink, then stops: The app's newline setting (Step 10)
  7. Upload fails: programmer not responding: HC-06 data wires still on pins 0/1 (Step 5)
  8. Beeping won't stop: It's the reverse beep. Send any other command

Longer answers to the Bluetooth ones, free:

  1. HC-05/HC-06 not showing up on the phone
  2. Upload hangs while the Bluetooth module is connected
  3. The pairing code: 1234 or 0000
  4. Do you need a voltage divider?


What Next

The car is a platform. The sketch already has empty hooks for front lights (W/w). Wiring two LEDs to them is a good first change. After that, add an ultrasonic sensor so it stops before hitting things, or write your own phone app so the letters are yours.

The same build is also written up as a free illustrated book, Build a Car With Your Kid, with every step laid out for a parent and a kid working together: troniction.com/book.

If you want to go deeper into the Bluetooth side (iPhone support, BLE, your own controller), that's Arduino Bluetooth — Make It Connect, $9: troniction.com/bluetooth.

Questions go in the comments. I read them.