loading
Picture of Android RC Car
TPE.png
  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 :
 
Remove these adsRemove these ads by Signing Up

Step 1: Required Stuff

Picture of Required Stuff
2011-05-07_14-15-26_997.jpg
HPIM6830.JPG
HPIM6846.JPG
HPIM6849.JPG
HPIM6836.JPG
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
EagleLayersSelect.png
EaglePCB.png
EaglePrintSettings.png
HPIM6851.JPG
HPIM6853.JPG
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

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
HPIM6872.JPG
HPIM6873.JPG
HPIM6878.JPG
HPIM6879.JPG
HPIM6881.JPG
- 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

- 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
HPIM6911.JPG
HPIM6924.JPG
- 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)
HPIM6928.JPG
HPIM6930.JPG
HPIM6933.JPG
HPIM6935.JPG
- 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)
HPIM6522.JPG
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)
HPIM6940.JPG
HPIM6941.JPG
HPIM6942.JPG
HPIM6937.JPG
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)
HPIM6955.JPG
HPIM6957.JPG
HPIM6961.JPG
- 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

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 !

1-40 of 157Next »
AhmedE147 months ago

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)  AhmedE147 months ago
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
yaphetzootri7 months ago

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

yaphetzootri7 months ago

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

yaphetzootri7 months ago

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

b.darawshi9 months ago

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

intdata[0] * 24

a1r (author)  b.darawshi9 months ago
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)
意金1 year ago
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?

May be, this can be of great help

Nitin


a1r (author)  意金1 year ago
Nope. Pin 16 is logic supply (goes to arduino 5V), pin 8 is motor supply, goes to 9V
意金 a1r1 year ago
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~ ^ ^)
意金 意金1 year ago
Thanks. Finally I figured out. The 5V and 3.3V are out put to motor and blue tooth right? Sorry. ^ ^)

Hi,

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

Any help?

louie_yo1 year ago
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!
意金1 year ago
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.
意金1 year ago
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~ ^ ^)
意金1 year ago
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.
意金1 year ago
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)  意金1 year ago
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).
意金 a1r1 year ago
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)  意金1 year ago
Yep.
意金 a1r1 year ago
Thank you thank you~ ^ ^
意金1 year ago
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
意金1 year ago
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~~
IMG_0716.JPGIMG_0715.JPG
a1r (author)  意金1 year ago
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)
意金1 year ago
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~ ^ ^)
IMG_0707.JPGIMG_0708.JPG
a1r (author)  意金1 year ago
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.
Amazing thing I'm looking first time android Rc car thanks for the post keep sharing this kind of information.
Thom Kouwen2 years ago
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 Kouwen2 years ago
Thanks buddy :P
kverula2 years ago
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
kverula2 years ago
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
kverula2 years ago
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 s2 years ago
hi please send me the circuit diagram of this project.i am doing exactly the same project
my e-mail id sunandsuresh92@gmail.com
kverula2 years ago
I have a question, what if there is no stock for arduino duemilanove, what is other alternate arduino?
a1r (author)  kverula2 years ago
You can use the Uno too
iabir2 years ago
i have a question.....is there any was to use bluetooth USB adapter instead of bluetooth serial adapter?...if yes then how?
mohdhafiz2 years ago
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)  mohdhafiz2 years ago
Could ya please give me like the 10 lines of codes surrounding this, I can't figure out like that ... thx
mohdhafiz a1r2 years ago
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..:)
1-40 of 157Next »