Programmable RC Car: How-To Guide
August 2012
|
| Introduction Software Hardware - How-to Guide |
Introduction
This Programmable RC Car is a modified $9 toy bought online. Complex control sequences can be programmed or it can be controlled using the keyboard (or gamepad). This guide will show you how to build one yourself! This is an excellent beginner electronics project (with some soldering required).
All software and hardware schematics are open-source. The software is written in Java and runs on Mac, Windows, and Linux. This project uses an Arduino (via USB). A similar project I completed in 2003 used the PC parallel port.
Software
RC Controller GUI

Clicking on the Serial Port text box will open a selection dialog which lists all detected serial ports. The Arduino UNO lists itself as a usb modem as shown above (on Mac).
Programming a Control Sequence
(sequence.txt)
# Programmable Sequence File
#
# Directions
# FF = Forward, FR = Forward & Right, BB = Backward, etc.
# SS = Stop
#
# FL FF FR
# LL SS RR
# BL BB BR
#
# Invalid Directions: FB, LR
#
# Format:
# <Direction>, <Speed: Range 0 - 255>, <Duration in Milliseconds>
#
# Ex: FF, 255, 100
# Drives forward at full speed (255) for 100 ms
#
FL, 255, 250
FR, 255, 400
FL, 255, 100
The file sequence.txt is included with the software. Complex control sequences can be programmed using the syntax shown above. Lines that start with # are comments.
Arduino Code
This code receives data from the Arduino's serial port, processes it, and controls the Arduino's pins to drive the RC car.
Download
The source code is well commented and should be easy to undertand. The GitHub repo contains source code and compiled binaries.
Some Software Details
The cross-platform RXTX Comm library is used for serial port detection and communication. The GUI sends commands to the Arduino through through the serial port, which intereprets the commands and controls the RC car.
Loading Arduino Code
See this getting started guide for how to load the code onto an Arduino board.
Speed Control - Pulse Width Modulation (PWM)
Speed control is achieved using PWM. This basically simulates pressing the buttons really fast, but varying the ratio of the on and off button state to modulate speed.
Hardware
Parts Required
Part |
Quantity |
Part Number |
Cost |
Source |
| RC Car* | 1 |
20644 |
8.99 |
|
| Arduino (model UNO used) | 1 |
1050-1024-ND |
26.56 |
|
| ULN2803A IC | 1 |
497-2356-5-ND |
0.93 |
|
| DIP Chip Socket | 1 |
A100207-ND |
0.28 |
|
| Solder Board | 1 |
V2025-ND |
6.26 |
|
| Male 0.1" Header (8 pin) | 2 |
609-3264-ND |
0.27 x 2 |
|
| Female 0.1" Header (8 pin) | 1 |
S7006-ND |
0.85 |
|
| Total (USD) | $44.41 |
*This project can be completed using any RC car that has a remote with 4 directional controls.
Note
You will also need a few wires, solder and (optionally) zipties. I also recommend buying a few extra of the cheap components above in case any are damaged during project construction.
Tools Required
- Soldering Iron
- Multimeter
- Screw Driver
- Optional: wire stripper, wire cutter, hot glue gun
How-To Guide
Step 1 - Disassemble the Remote
There are a few screws to remove. One of them is in the battery compartment.
Step 2 - Remove PCB
You'll need to de-solder the battery connection wires to remove the PCB from the remote's plastic case. Remove the screws holding in the PCB and it should come away freely.
Step 3 - Solder Wires to Remote PCB
Solder 2 wires to where the battery connections meet the PCB. I chose white for +3V and black for GND.
Next, solder 1 wire to each button location. You'll have to find the right pad to solder to. You can determine which pad is correct by testing pads near/underneath the physical button switches seen on the other side of the PCB. When the button is pressed, the correct pad will be connected to GND through the switch. By using a multimeter's resistence setting or it's continuity mode, you can determine which pads get connected to GND on the button press.
You should have 6 wires connected to your PCB. This is the most difficult part of this project.
Step 4 - Build the Circuit and Test!
Note
The Arduino's 3.3V is close enough to the remote's 3V batteries that we won't bother with voltage regulation.
This schematic was created using Upverter - a great (and free) online tool for building open-source hardware. Feel free to fork and improve the design!
You should have the Arduino code loaded on to your board. If not, scroll up to the software section and complete that step. Build the circuit as shown above. Make sure the RC car is charged and will move when you push a button on the remote. If it doesn't, check that your circuit has power.
Run the software and GO! After launching the software and selecting your serial port, you should be able to drive the car using the computer.
Step 4 - Start to Assemble the Arduino Shield
Place the header connectors in the black Arduino connectors and solder in place as shown.
Insert the chip socket roughly in the middle of the board and solder it in place as shown.
Tip
Use a chip socket when using an integrated circuit (IC) in a prototyping design. This saves lots of time in the event that the IC is damaged or doesn't work as expected.
Step 5 - Solder Chip -> Arduino Connections
Solder the chip to Arduino connections as listed below and shown above.
Arduino |
ULN2803A |
3.3V |
Pin 10 (Vs) |
GND |
Pin 9 (GND) |
Digital Pin 9 |
Pin 2 |
Digital Pin 10 |
Pin 3 |
Digital Pin 11 |
Pin 4 |
Digital Pin 12 |
Pin 5 |
Step 6 - Wire Up the Cable
Solder 4 long wires (~20 cm) connected to pins 2 - 4 of the UNL2803A IC. Solder 2 long power wires as shown above.
This is a good time to re-test your circuit and ensure that all connections have been made correctly. You can make the clean up cable wires with zipties as shown above.
Step 7 - Solder Male Connector
Tip
Tinning the wires and connector pins as shown above makes soldering to connectors easier.
The order of the of the wires from right to left is 3.3V (white), GND (black), Arduino Pins 9 (blue), 10 (blue), 11 (blue), and 12 (blue).
Step 8 - Re-assemble the Remote
Place the PCB back in the remote case, re-solder the battery connection wires, and secure the PCB with the screws removed earlier.
Fully re-assemble the rest of the remote. This is a good time to re-test your circuit to ensure no connections have come loose.
Tip
I removed some plastic from the inside of the case to allow more space for the wires to exit the remote. Also, the unmodified remote had a plastic cover covering the charging port that I did not reuse when reassembling the remote.
Step 9 - Assemble Female Connector
Following the same procedure outlined in Step 7, cut the wires to length and solder them to the female connector. I used hot glue to attach the connector to the remote case. The wire ordering shown in the right picture is from left to right is 3V (white), GND (black), Forward Switch (blue), Backward Switch (blue), Left Switch (blue), and Right Switch (blue).
Step 10 - Plug In and Go!
Plug in your shield cable to your remote's connector, plug in your USB Arduino, fire up the software, and GO!
Questions or Comments?
Comment below or contact me at .


Comments
Thank you for the reply on the last comment. I run this program on my mac. The arduino software recognized the Arduino as a usb bodem, and i type the name in the port.txt, but the rc_car program refuses to recognize the board port. Any ideas? Doing this for a school project
Posted by Brennan on 2013-04-25 @ 18:09
Awesome project... built a bread board version with an RC car bought at a local electronic store.
Posted by Jeff Leish on 2013-04-19 @ 18:14
@godeck
22 AWG, but just about any gauge will do.
Posted by Jon on 2013-04-18 @ 17:49
What gauge wire is used in this? thanks
Posted by Brennan on 2013-04-18 @ 09:45
Disregard Q1. I did not realize there was a show more comments button.
Posted by godeck on 2013-04-5 @ 11:11
I have a couple questions regarding this very cool project.
1. What is the purpose of ULN2803A?
2. Why do you use arduino in this? I guess because USB does not have enough pins? Could two transistors be used in place of the arduino?
3. Very cool project. Perhaps you could get another car on a different channel to use for sensor feedback :D
Posted by godeck on 2013-04-4 @ 16:15
Dear Sir,
I Want to learn make rc car and rc boat can you help me this is my dream that if you give the time for tuscan
Thanks
Amzad khan
Posted by amzad on 2013-03-14 @ 00:32
aleluya
Posted by aaa on 2013-02-14 @ 21:42
sir where i can download the programmable RC car controller...
Posted by eddie on 2013-01-9 @ 02:53
this is just an awesome project related to what I was looking for.. :-)
actually, I was looking for some circuit that could connect the car from the internet through some data-card or sim card so that the car can be always connected with the internet anywhere and a person can handle the car being at home or some specific position..
this is gonna be really a great help for me in my final year project.. and my project will not be only confined to controlling a car but there is a lot more to it..
sir please help.. I'll always be grateful to u.. please..
sir, I've even lot more ideas n I'm really interested in these all things. I need a guide to just give me a helping hand. please..
my e-mail- upkarsingh12@yahoo.com
Posted by upkar on 2012-12-25 @ 11:54
this is just an awesome project related to what I was looking for.. :-)
actually, I was looking for some circuit that could connect the car from the internet through some data-card or sim card so that the car can be always connected with the internet anywhere and a person can handle the car being at home or some specific position..
this is gonna be really a great help for me in my final year project.. and my project will not be only confined to controlling a car but there is a lot more to it..
sir please help.. I'll always be grateful to u.. please..
sir, I've even lot more ideas n I'm really interested in these all things. I need a guide to just give me a helping hand. please..
my e-mail- upkarsingh12@yahoo.com
Posted by upkar singh on 2012-12-25 @ 11:52
I have made one like that and it works fine :-)
Greet!!
Posted by Andy on 2012-11-19 @ 11:09
@Jamie
You can find x86-64 versions of the RXTX library here:
http://www.cloudhopper.com/opensource/rxtx/
Source:
http://rxtx.qbang.org/wiki/index.php/Download
Posted by Jon on 2012-11-18 @ 19:31
Cannot get this to work on windows 7 64bit when i open the GUI it will not let me pick a Com port
Any help?
Posted by Jamie on 2012-11-18 @ 12:10
hey i want to construct a rc car ............please send me detail and procedures and requirement for its construction
Posted by vivek on 2012-10-17 @ 22:42
@Andy
To do this project you need to build the circuit that includes with ULN2803A, compile and run the Java software on a PC, and load the Arduino code onto an Arduino microcontroller.
There is no software that runs on the ULN2803A.
Posted by Jon on 2012-10-17 @ 12:02
I do not understand the software installation in the ULN2803A IC
I made the Wifi robot there it was no problem to install the software in that IC.
can you explane it a little better please?
Posted by Andy on 2012-10-17 @ 09:14
You have been doing a great work so far, sharing even the most minute detail. I have been successful in a few of your projects here, such as the PC controlled RC car, whose GUI made in Visual Basic taught me how to command the parallel port. I have been able to built an entire program out of it to control individual pins and switch my entire room's electrical appliance. I appreciate your work. No matter how busy you are, please never give up on this page.
I saw somewhere you wrote that you were working on a CNC machine. If you require any help, please feel free to contact me in my mail address. I would be happy to return you a favor! :)
Posted by Zaman on 2012-09-26 @ 23:08
@Louis
Q1: The RC switch requires a path to GND. You could provide that with the Arduino alternating pin state between INPUT and LOW.
Q2: Yes. The ULN2803A requires a HIGH on the INPUT to provide a LOW on the output.
Posted by Jon on 2012-09-5 @ 22:36
@James
Nowhere near 500 mA is drawn. The ULN2803A is used more as a buffer to separate the RC electronics from the Arduino.
If the Arduino was hooked up directly, setting the pin high would deliver 5V while the RC electronics are designed to work with 3V.
The Arduino could be hooked up directly if the pinstate was alternated between INPUT (high impedence) and LOW, rather than HIGH/LOW as it is now. But HIGH/LOW is easier to understand IMO.
Posted by Jon on 2012-09-5 @ 22:28
They draw half an amp when you press a button? Really? Yikes.
Posted by James on 2012-09-5 @ 13:42
Arduino Uno is driving only 50mA so we must use ULN2803A that give us 500mA .
Posted by E.Pedreny on 2012-09-5 @ 11:09
Hi, I have some question.
Q1:Why don't just using voltage divider instead of ULN2803A?
Q2:Because the remote controller button will pull low the signal when it connected to GND on the button press, so the "driveCar" function which inside your code(arduino_programmable_rc.pde) the Logical "HIGH" should be "LOW" and "LOW" should be "HIGH" right?
Posted by Louis on 2012-08-30 @ 06:46
I already have one of those cheapie RC cars from DealExtreme and was wondering about proportional control. You've provided a great how-to for just that! Thanks!
Posted by Tim on 2012-08-29 @ 15:48
Hello, just one question the ULN2803A is used as a logic level shifter from 3.3v to 5v right? Else a little explanation about the part my come in handy :D
Posted by Fritz on 2012-08-29 @ 14:22
a Very Nifty little project. Defiantly thumb up!
Posted by Sly0 on 2012-08-29 @ 12:06
HOW ARE YOU MAKE THIS CAR AND WHICH MATERIAL YOU HAVE USE AND PLEASE GIVE ME THEIR NAME PLEASE
Posted by vijay pund on 2012-08-29 @ 08:18