Introduction: Android RC Car

Picture of Android RC Car
  Hello and welcome to my second instructable, where we'll be modifying a cheap RC car to drive it with an Android smartphone over Bluetooth.
  Actually, this was my school project at the Lycée Jules Fil , so I had to produce a complete write-up. Unfortunately, it is in French, but if you want a really in-depth description of the system, and you understand french, you can download it HERE .

   I recommend that you read my first Instructable  for a more detailed explanation on how the thing works.

  The cost of following this instructable is something around 30~40$ if you already have the RC car.

  Disclaimer : In this instructable, you will be using dangerous chemicals (Acetone and Ferric Chloride) and dangerous tools (drill, saw, soldering iron,etc...). I can't be held responsible if you harm yourself following this guide. If you follow this instructable carefully, and protect yourself you won't get hurt.

  So, the RC car will be driven using the accelerometer sensor (like in iPhone/Android racing games) over bluetooth. For that, we'll be using an android app and arduino library named Amarino 2.0 . The system works a little bit like that : 

Accelerometer 
           |
           |     I²C
          \ /
Android Smartphone
           |
           |     Bluetooth
          \ /
Arduino
          |
          |     PWM / simple logic
         \ /
H-Bridge
          |
          |  
         \ /
Rear motor + Dir motor


Dont forget : If you liked my Instructable, please rate it , and let me know in the comments what you think about this Instructable, and what I could do to make it better ! Thanks !

Below is a little video demo :

Step 1: Required Stuff

Picture of Required Stuff

Required tools:

- solder iron with fine tip
- tiny solder wire
- good magnifying glass
- "Third hand" helping tool
- small drill press with small bits (~0.02 inch)
- good soldering skills
- hacksaw (used for cutting and shaping the pcb)
- 400 grit sandpaper (otionnal, used for smoothing rough edges after cutting the pcb)
- latex gloves
- Laser Printer (for the Toner Transfer method )
- iron (used to transfer the toner on the pcb)

Required chemicals:

- copper etchant (I use Ferric Chloride)
- Acetone

Required Parts:

- Arduino
- cheap RC car
- Android smartphone
- Bluetooth serial adapter
- 10k and 20 kOhm resistors
- 9V battery or LiPoly 2S (7.4V) battery or 7~8v RC battery pack (Using a rechargeable battery is MUCH better)
- small wires (IDE cable style, see the photo)
- 28 break away headers
- L293E H-Bridge  (or any 16-pin L293 variant)
- 16-pin DIP socket
- 9v battery clip
- blank PCB (Printed Circuit Board)
- magazine paper (for the Toner Transfer)

Required Software:

- Arduino IDE : get it here .
- Eagle CAD freeware edition : get it here .

Now that you have gathered all this stuff, let's go to step 2.

Step 2: Print the Arduino Shield

Picture of Print the Arduino Shield

I've designed a simple Arduino shield to hold the h-bridge and the voltage divider (needed by the bluetooth module).

- download the Eagle CAD project (in zip format) HERE .
- unzip it in your Eagle project directory (located in "My Documents" for winXP or in "Documents" for win7 or in your home directory if you're on linux)
- open Eagle CAD, load the project and open the board (see the screenshots below)
- disable all layers, the enable only the "Top", "Bottom", "Pads" and "Vias" layers.
- you should get something like the third screenshot
- click the print button
- check the "Black" and "Mirror" checkboxes, align the print to the center, and pay attention to the scale factor : it must be set to 1 ! If it's not, you will fail the pcb.
- take a magazine page (I use "Speakeasy magazine", it works really well), load it in your laser printer and print by clicking the "ok" button
- cut the shape of the shield with scissors
- you should get something like the sixth image.

Now head over to step 3: preparing the PCB...

Step 3: Preparing the PCB

Picture of Preparing the PCB

Now it's time to get your hands dirty !

- take the printed design, lay it down (facing the pcb's copper side) on the blank pcb.
- now draw with a pencil/knife around the edges of the design on the pcb. 
- cut the pcb into shape with the hacksaw
- after cutting, the edges are a bit rough. Use the sandpaper to clean and smooth them.
- If you've got presensibilized PCB, like me, peel of the protective plastic, and wipe the uv-sensitive layer with acetone.
- Voila ! You should get something like the last picture.


Step 4: Transferring the Toner

Picture of Transferring the Toner

- Empty the water from the iron, and power it on at the highest temperature.
- Now, lay down the design, facing down, on the blank pcb (pic. 1)
- wrap the pcb in a paper towel (pic. 2)
- put it against the iron for ~30 seconds, make sure the design doesn't slip on the pcb. (pic. 3)
- lie it flat on a table, and press the iron against it for ~1min (pic. 4)
- rub gently the pcb with the edge of the iron for ~30secs (pic. 5)
- fill the plastic container with water and drop in the (hot) pcb. (pic. 6)
- let the pcb in the container and head to step 5

Step 5: Etching the Pcb

Picture of Etching the Pcb

- Very important : put on your latex gloves to avoid skin injury.
- boil water in a small pot, fill the small cup with Ferric Chloride, and put the cup in the pot for ~3min (pic. 1)
- while the Ferric Chloride is heating, take the pcb and scrub off the magazine paper. Watch out for shorts. (pic. 2)
- you should get something like pic. 3 (or better !).
- now empty the water from the container and pour the Heated ferric chloride in it. (pic. 4)
- close the lid (if any), and tilt the container back and forth for 1min.
- open the lid, get the sponge, soak it with Ferric chloride and rub gently (using the soft side) on the pcb. This will make the board etch much faster. 
- when you see no more copper on the board, rinse it in water, and you should get something like the last picture.
- pour the used ferric chloride in the glass jar. DON'T pour it in the sink !
- clean up everything, take off your gloves, and head to step six.

Step 6: Drilling the Pcb

Picture of Drilling the Pcb

- Fire up the drill press
- choose the right drill bit
- drill down the holes
- You should get something like pic. 3
- That's it ! Head to step 7

Step 7: Soldering (part. 1)

Picture of Soldering (part. 1)

- Solder the IC socket (pic. 2)
- solder the 10k and 20k resistors (pic. 3)
- solder the break away headers
- you should get something like pic. 4 and 5.

Step 8: Soldering (part. 2)

Picture of Soldering (part. 2)

In this step, we are going to solder the bluetooth serial module :

- Solder the yellow wire to the GND pin
- solder the red wire to the 3.3v pin
- solder the orange wire to the RX pin
- and finally, the white wire to the TX pin

Step 9: Soldering (part. 3)

Picture of Soldering (part. 3)

In this step, we're going to assemble the two parts : the bluetooth module and the arduino shield.

- Solder the white wire to the pad labeled RX on the shield. (pic. 1)
- solder the orange wire to the pad labeled TX on the shield (pic. 1)
- solder the yellow wire to the the shield's ground using a connector (the pin will have to be disconnected when programming the Arduino) (Pic.2,3,4)
- solder the red wire to the shield's 3.3v pin (pic. 5)

Step 10: Soldering (part. 4)

Picture of Soldering (part. 4)

- Take your RC car, open it up to reveal the circuit board and the motors (pic. 1)
- Remove the old circuit board and solder some wires to the motor leads (pic. 2)
- take the 9v battery clip and solder the + to the pad labeled 9v (on the top-right of the IC)
- solder the 9v pad to the shield's Vin. (see image 3's annotations)
- solder the two main motor leads to the two pads labeled "Motor"
- solder the direction motor leads to the two pads labeled "Dir"
- solder the pad labeled GND to the shield's ground. (see pic. 3's annotations)
- solder the - of the battery clip to the power switch, then to the second pad labeled GND.
- insert the H-Bridge in its socket
- head to step 11.

Step 11: Software Setup

Picture of Software Setup

Now that we've done the physical setup, it's time to work on the software side.

I've made some screen captures to help you out.

- Take your Android phone
- Install ES file explorer from the android market (any other file browser will do)
- Download the Amarino application
- Download the Amarino plugins
- Put those two files on your smartphone's SD/microSD card.
- Install Amarino and Amarino plugins (pic.2)
- Pair your bluetooth module (pincode is 1234)  (pics 3,4,5,6, 7)
- Open the Amarino application (pic. 8)
- Add the newly paired device (pic. 9 and 10)
- Dont connect yet. Add an accelerometer event by clicking in the red box. (pic. 11). You should get something like pic. 12
- You're done with the android-side setup. Now onto the Arduino IDE :

- Download the Amarino library:
 Arduino Library(updated)
 Arduino Library(old)


- Extract it in your libraries folder : arduino_install_dir/libraries/extract_meetandroid.zip_here
- Restart the Arduino IDE
- If everything went well, you can find the library under "Sketch->Import library"
 
- Now, download the Arduino sketch HERE .
- unzip it and open it in the Arduino IDE
- unplug the bluetooth module connector (See last picture.  If you don't unplug, the code upload will fail !)
- connect your arduino with your computer with an usb cable
- upload the sketch to the arduino
- disconnect the usb cable
- plug back in the bluetooth connector.
- put your RC car back together

Step 12: Making the Car Move !

Picture of Making the Car Move !
- Open the amarino app
- power on your rc car
- click the "connect" button in the amarino app
- Your car should now be moving !


Troubleshooting:
- If you have reset issues, make sure there are no electrical shorts. Changing the 9v battery to a rechargeable type (NiCad, LiPoly, etc...) can also help : Sometimes, the car drains more amps than the 9v battery allows (~150mA), this causes a voltage drop and the Arduino resets, making the car go crazy and unresponsive.
- If your car goes backwards when you tilt the phone forward, invert the wires going to the main motor (eg. the red wire to the minus and the black to the plus).
- If your car turns left instead of right or right instead of left, invert the wires going to the direction motor.

You should get something like in the video. Thanks for following this instructable !

Comments

JaypennsonA (author)2016-02-28

help with this plssssss

JaypennsonA (author)2016-02-28

how to declare error reply pls

AhmedE14 (author)2014-12-14

what a great project , It worked well until I changed the name and password of the bluetooth module (AT command mode) as the arduino stopped receiving data from the bluetooth module , Can anyone tell me why did this happen?

a1r (author)AhmedE142014-12-14

You have to delete the device from you list of paired devices on your phone and redo the pairing process. Afterwards you can add it back in the Amarino app.
John

yaphetzootri (author)2014-12-13

why we need to be a pro, to download the project pdf

yaphetzootri (author)2014-12-13

why we need to be a pro, to download the project pdf

yaphetzootri (author)2014-12-13

why we need to be a pro, to download the project pdf

b.darawshi (author)2014-10-02

good work :) ,,,,,,, can you explain why you multiply value by 24 in this line

intdata[0] * 24

a1r (author)b.darawshi2014-10-06

This value has a max of 10, so I amplify it by 24 to get a value using the (almost) full PWM range (0-255)

意金 (author)2013-09-09

Hello ^ ^). May I ask a question about the schematic of the DIY PCB. Based on the schematic of IC L293 given, the Pin 8 and Pin 16 are VSS. But they connect the Pin 5V of Arduino and "+" of the 9V battery. Is that all right to connect to a different voltage(5V and 9V) in an IC?

nwalawalkar (author)意金2014-02-26

May be, this can be of great help

Nitin


a1r (author)意金2013-09-10

Nope. Pin 16 is logic supply (goes to arduino 5V), pin 8 is motor supply, goes to 9V

意金 (author)a1r2013-09-11

If the Pin 8 is motor supply, goes to 9V, so may I ask is this necessary to Plugin 9V battery to the RC CAR? IN another way, The RC car has power supply itself(2AA Battery), is this still an useful working part? Appreciate~ ^ ^)

意金 (author)意金2013-09-13

Thanks. Finally I figured out. The 5V and 3.3V are out put to motor and blue tooth right? Sorry. ^ ^)

nwalawalkar (author)2014-02-26

Hi,

I am using Eagle 6.5 and while printing the mirror text is printed as dots....

Any help?

louie_yo (author)2013-12-22

hi! sorry for the noob question (and my english) but does it matter which arduino i use? must it be duemilanove or can i use leonard? thank you!

意金 (author)2013-09-13

Hi ^ ^)May I ask what is the function of the "jump" on your schematic of the DIY PCB. In my point of view, the RX and TX on Arduino Board is just connected to the DIY PCB board's RX and TX then connects to the RX and TX of blue tooth.

意金 (author)2013-09-09

Hi, dude~ Excuse me, may I ask where to solder Power switch. Is the same place that the pic showed us? And if consider about the schematic of the DIY PCB, where is the power switch in there? Appreciate~ ^ ^)

意金 (author)2013-09-09

I have no idea why the pic can't be uploaded. May I ask your email therefore I can send the schematic of the IC L293 to u. That shows the pin of the IC.

意金 (author)2013-08-19

Hi, a1r. Dude your are awesome! I was doing this as a project of my study. Here is the thing I feel confuse about the PCB schematics that resored by the eagle CAD. If the positive"+" to the 9v, is the negative"-" to the GND or GND 1?
The 9v battery power supply the power to the DIY PCB with L293IC, and the Arduino board, Bluetooth kit are supported by the extra power supply to the blue Arduino board, is that correct? Appreciate your help~ ^ ^

a1r (author)意金2013-08-20

The "-" of the battery goes to one of the two big GND pads next to the L293 and you have to connect the other big GND pad to the Arduino's GND pin (the same one with the blue wire and socket).

意金 (author)a1r2013-08-25

So u mean, 2 GND pads near L293, one is connected to "-" of 9v battery and another one is connected to Arduino GND pin, and the big GND pad is also connect to the BT kit's GND am I correct?

a1r (author)意金2013-08-26

Yep.

意金 (author)a1r2013-09-08

Thank you thank you~ ^ ^

意金 (author)2013-08-25

Thank you thank you~ I connect BT kit directly to the Arduino board just for testing my BT kit see if it is working or not (return policy^ ^)
Sry I still can't get "the BT GND pad connects to a GND pad (near the L293 for example) through two wires connected by a 2-pin connector",
I know BT GND to GND on the PCB near L293, but why throught 2 wires? there is only one wire (the yellow wire in the pic).
Do u mean the 2 pin connector is connected to 16 pin DIP socket?
Simply it is like I don't know where dose the 2 pin connector(yellow wire in the pic) plug in?
sorry~ I don;t speak English much, Appreciate for your patient~ ^ ^) dude

意金 (author)2013-08-21

Hi wts up dude ^ ^ , so can I say GND is connected to "-"of the 9v battery, and GND1 connects to GND of the Arduino board, and the GND of bluetooth is connected with the 2 port GND came with the Arduino board. Am I correct?
Beside I see the bluetooth has a 2 head plugin connected to GND of the Arduino board, so for the buletooth kit, can I ask do we have to use 2 head plugin to full plug into the 2 ports GND of the Arduino board?
the following images are 2 ports of GND, and 2 heads of the GND plugin which is from the bluetooth, I mean. ^ ^) Appreciate~~

a1r (author)意金2013-08-22

Aaah. You didn't understand correctly: The PCB you made sits ON TOP of the Arduino and utilizes ALL of the Arduino pins (you can't plug something else in them), that's the concept of an Arduino shield.

And the BT GND pad connects to a GND pad (near the L293 for example) through two wires connected by a 2-pin connector (your second photo) like this:
BT GND---------==- ==---------GND pad on the pcb

I did this to be able to shut down the BT module by unplugging this connector: when I uploaded a new sketch, the BT module would cause the upload to fail, so I had to switch it off during that time.

Be sure to look closely to the photos I included in this instructable, they explain pretty much everything (correct wiring and stuff)

意金 (author)2013-08-20

Thanks thanks~
I find both Dir motor and rear motor have 2 wires. Is there any "+" or "-"or other differences between the 2 wires either from the RC car circuit board or any differences between the 2pads of "Dir moto" or "moto" on DIY circuit board? (in the PCB schematic they are M1,M2.D1,D2, so is there any main difference between M1,M2,or D1,D2?)
For those 2 image, I just directly connect the 2 wire either from the Dir motor or rear motor to the DIY circuit board. Is that correct? Thanks~
And may I ask is it possible to connect the Dir motor and rear motor directly to the Arduino Board...Appreciate~ ^ ^)

a1r (author)意金2013-08-21

Technically, nope no differences, BUT I've written the software so that the DIR pins are meant to be connected to the Direction motor and the Motor pins have to be connected to the Rear motor.

One last thing: if your car turns in the opposite direction, swap the red and black wires soldered to the DIR pins. If the car goes reverse when you tilt your phone forward, swap the red and black wires soldered to the Motor pins.

charles gray (author)2013-06-24

Amazing thing I'm looking first time android Rc car thanks for the post keep sharing this kind of information.

Thom Kouwen (author)2013-05-12

For everybody with arduino IDE versions higher then 1.0: download the two files in the link below and replace the MeetAndroid.cpp and MeetAndroid.h in the library folder of the Arduino IDE with the new files. Then your code should work. Go to this link: http://code.google.com/p/android-bt-arduino/downloads/list and download the two files named "MeetAndroid.cpp" and "MeetAndroid.h".

a1r (author)Thom Kouwen2013-05-12

Thanks buddy :P

kverula (author)2013-05-02

i try to change the battery but there is no improvement. When i use the multimeter in the every pin of IC there is no voltage output. so i think there is a problem in the IC.Need help for troubleshooting plz reply ASAP

kverula (author)2013-05-01

I already fixed the problem about the program and i already complete the wiring.when i try to pair with my android the output of the rc car is just a beep.why is that?plz help thx

kverula (author)2013-04-30

Plz help i have a problem in the program.This is the error

In file included from RCdroid.pde:6:
C:\Users\jonathan\Desktop\installer arduino\Arduino\arduino-1.0.4\libraries\MeetAndroid/MeetAndroid.h:104: error: conflicting return type specified for 'virtual void MeetAndroid::write(uint8_t)'
C:\Users\jonathan\Desktop\installer arduino\Arduino\arduino-1.0.4\hardware\gizduino-\cores\gizduino/Print.h:48: error: overriding 'virtual size_t Print::write(uint8_t)'

i already followed the instructions but i still i encounter this.plz reply ASAP

sunand c s (author)2013-04-26

hi please send me the circuit diagram of this project.i am doing exactly the same project
my e-mail id sunandsuresh92@gmail.com

kverula (author)2013-04-25

I have a question, what if there is no stock for arduino duemilanove, what is other alternate arduino?

a1r (author)kverula2013-04-25

You can use the Uno too

iabir (author)2013-03-29

i have a question.....is there any was to use bluetooth USB adapter instead of bluetooth serial adapter?...if yes then how?

mohdhafiz (author)2013-03-15

Jonathan:can i ask u..i know Proportional Speed ..
how to operation..
u can explain
intdata[0] = int(data[0]);
intdata[0] = intdata[0] * 24;
tq...

a1r (author)mohdhafiz2013-03-15

Could ya please give me like the 10 lines of codes surrounding this, I can't figure out like that ... thx

mohdhafiz (author)a1r2013-03-16

sorry to many question.
a)
}


void setup() {
Serial.begin(9600);
Serial.println("\t\t\t.----------------------.");
Serial.println("\t\t\t| Starting Up.. |");
Serial.println("\t\t\t'----------------------'");
pinMode(EnablePinDir, OUTPUT);
pinMode(EnablePinMotor, OUTPUT);
pinMode(LogicPin1Dir, OUTPUT);
pinMode(LogicPin2Dir, OUTPUT);
pinMode(LogicPin1Motor, OUTPUT);
pinMode(LogicPin2Motor, OUTPUT);
delay(1000);

Serial.println("\t\t\t.----------------------.");
Serial.println("\t\t\t| PG-R Ready ! |");
Serial.println("\t\t\t| Have Fun ! |");
Serial.println("\t\t\t'----------------------');


meetAndroid.registerFunction(floatValues, 'A');
}
-what the function..Serial.println("\t\t\t");
b)
// ..===========================================..
// || ||
// || Control Algorithm Beginning here ||
// || ||
// ''===========================================''


// This is for Forward/Reverse
if (-10<=data[0]<=10) {
// Tilt-Proportional Speed
intdata[0] = int(data[0]);
intdata[0] = intdata[0] * 24;
-why multiple "24";

TQ..:)

a1r (author)mohdhafiz2013-03-18

The serial functions can be disabled, they're just here for debug
The multiply by 24 is here to adapt the data (ranges from -10 to 10) being sent to the motor controller (which gets -240 to 240).

mohdhafiz (author)a1r2013-03-21

how to to identify the axis x or axis y in program?

mohdhafiz (author)a1r2013-03-20

What effect I remove or not use Serial.println?.
-240 to 240 range ??..current or voltan.
I weak in the program,new venture into this field..

mohdhafiz (author)2013-02-25

Jonathan:tq,my project success..from help of you

a1r (author)mohdhafiz2013-02-26

Your welcome

asmuransyah (author)2013-02-23

jonathan thank you for your help? RC CAR dpat now I walk, it turns BT modules are problematic and I replaced it with a new one.
but? there is still a problem if the wheel goes forward, backward, left and right making a sound "BEEP"??
Why is that?? Is there something slah with my chip? but I have replaced it with the new still reads "BEEP"?

mohdhafiz (author)asmuransyah2013-02-23

asmuransyah:powerful enough,try battery change...
https://www.google.com.my/search?hl=en&sugexp=les%3B&gs_rn=4&gs_ri=psy-ab&tok=8b3jCZ6JwvaPeqLAqMbVoA&pq=battery+saver+for+android&cp=13&gs_id=3w&xhr=t&q=battery+sell+oakville&bav=on.2,or.r_gc.r_pw.r_qf.&bvm=bv.42768644,d.bmk&biw=1241&bih=640&um=1&ie=UTF-8&tbm=isch&source=og&sa=N&tab=wi&ei=iCQpUZ2FA9GGrAe4koEY#um=1&hl=en&tbm=isch&sa=1&q=+nicad%2Fnimh+pack+&oq=+nicad%2Fnimh+pack+&gs_l=img.3...18648.22262.4.22668.6.6.0.0.0.0.104.411.5j1.6.0...0.0...1c.1.4.img.w-I75WiewUc&bav=on.2,or.r_gc.r_pw.r_qf.&bvm=bv.42768644,d.bmk&fp=5d827613dcf2ae72&biw=1241&bih=640&imgrc=XaOe-ChZCQnjCM%3A%3B9B-Ph5aLnzBzIM%3Bhttp%253A%252F%252Fi00.i.aliimg.com%252Fphoto%252Fv3%252F235775702%252FNICD_AA_9_6v_battery_pack.jpg_250x250.jpg%3Bhttp%253A%252F%252Fwww.alibaba.com%252Fproduct-gs%252F235775702%252FNICD_AA_9_6v_battery_pack.html%3B250%3B236

maniza2204 (author)2013-02-22

im having problem with the programmed, could u plez help me ?
it says :
C:\Users\LaPtOp PuNoH\Desktop\mat\arduino-1.0\libraries\MeetAndroid/MeetAndroid.h:104: error: conflicting return type specified for 'virtual void MeetAndroid::write(uint8_t)'
C:\Users\LaPtOp PuNoH\Desktop\mat\arduino-1.0\hardware\arduino\cores\arduino/Print.h:48: error: overriding 'virtual size_t Print::write(uint8_t)

About This Instructable

145,496views

127favorites

License:

Bio: My name is Jonathan Rico, I'm 18 and I live in France.I'm in my first year of an electronics degree. And, the ... More »
More by a1r:WiFi Stunt CarNunchuk-controlled HelicopterAndroid RC Car
Add instructable to: