Control RC Car Using Your Smartphone!
Sebarang pertanyaan/pembelian/bantuan boleh dm saya dia twitter eh:Assalamualaikum.. Hi guys! today i gonna tell you how to control RC car using Smartphone!
Okay, first of all we need to know the signal from smartphone transmit to your RC car. As we know, Arduino is very powerful microcontroller. Its easy to use, and widely use in engineering field. Lets check on Arduino board, we can see "TX" and "RX" pin. We can see it on pin 0 and pin 1. So what? hahaa! Its communication pin! means we can communicate with an Arduino board! We can transmit and receive the data from Arduino. but how?
We need another device to help Arduino receive the data. We can use USB cable, Bluetooth receiver, Wifi shield and so on to help arduino receive the data/signals.
This is how HC06 looks..
In this case, we gonna use HC06 Bluetooth receiver to communicate with Arduino wirelessly. We can buy it from
http://www.myduino.com/index.php?route=product/product&product_id=444 (in malaysia)
http://www.lelong.com.my/kx/bluetooth+module.htm (in malaysia)
http://www.ebay.com/bhp/hc-06
http://www.lelong.com.my/kx/bluetooth+module.htm (in malaysia)
http://www.ebay.com/bhp/hc-06
We also can get it from any hobby shop. Its price depends on quality and use. Some model just can receive or transmit data and some model can receive and transmit the data.
Now i gonna show you how to use this device with Arduino.
First we should know how to connect these four pin to Arduino
Vcc --- Connect to 5V pin on Arduino
Gnd --- Connect to Gnd pin.
RX --- Connect to TX pin!
RX --- Connect to TX pin!
TX --- Connect to RX pin!
Like this...
Make sure connect RX to TX !!
Okay now lets talk about how to hack the RC Car!
First of all you need to open your old RC car body.
You can see PCB with many component. Its motor driver and RF receiver. It mess you up? Relax. Just cut the wire that connect to the DC motor. Like this.
Now have 4 wires left on your old RC car. Its wire to control DC motor. Now we need another motor driver that can operate with Arduino. In my case, i use MD10 Cytron motor driver. Why do not use the old motor driver to drive the motor? it can make your circuit more complicated than you expected. This is MD10 Cytron motor driver shield that compatible with Arduino board. its easy to use!
https://docs.google.com/document/d/1acVuzZKuqC_79RzD5BRT9IQ7ug63zG0wpf-bUgQ7QHY/view
https://docs.google.com/document/d/1acVuzZKuqC_79RzD5BRT9IQ7ug63zG0wpf-bUgQ7QHY/view
From the picture above, you can see PWM and DIR with pin D1, D2, D3, D4 and so on. Its means the digital pin that we can use for control speed of the motor(PWM) and direction of the motor rotation(DIR).
example;
in Arduino..
analogWrite(D5, 230); //motor speed at 230
digitalWrite(DIR, HIGH); //motor will rotate in clockwise
Its really easy to use. Just connect two DC motor wire to channel A and B. Then, connect power supply cable at +ve and -ve connector.
After that, stack them on your Arduino board. Like this.
MD10
Watch this video for more details step!
This is Arduino Code that i use to run my RC car. You can copy and paste. Modify it if needed :)
int pwmr = 3;
int pwml = 5; //use to control left motor's speed
int dirr = 2; //control direction right DC motor
int dirl = 4;
int nilaipwm; //speed of DC motor
char val;
void setup() {
Serial.begin(9600); //baud rate
pinMode(pwmr, OUTPUT); //set pin to output mode
pinMode(pwml, OUTPUT);
pinMode(dirr, OUTPUT);
pinMode(dirl, OUTPUT);
}
void loop() {
if(Serial.available() > 0){ //if connection is available.
val = Serial.read(); //val adalah character yang COM receive
Serial.println(val);
if(val == '1'){ // '1' is data transmitted by your smartphone
nilaipwm = 10;
}
else if(val == '2'){ //kelajuan dc motor adalah 30
nilaipwm = 30;
}
else if(val == '3'){
nilaipwm = 50;
}
else if(val == '4'){
nilaipwm = 70;
}
else if(val == '5'){
nilaipwm = 90;
}
else if(val == '6'){
nilaipwm = 120;
}
else if(val == '7'){
nilaipwm = 160;
}
else if(val == '8'){
nilaipwm = 180;
}
else if(val == '9'){
nilaipwm = 220;
}
else if(val == 'q'){ //if your smartphone send 'q' , car will be move at highest speed
nilaipwm = 255;
}
else if(val == 'D'){ // 'D' untuk stop kan kereta
nilaipwm = 0;
}
else if(val == 'F'){ //Forward
analogWrite(pwmr, nilaipwm);
analogWrite(pwml, nilaipwm);
digitalWrite(dirr, LOW);
digitalWrite(dirl, LOW);
delay(20);
stopp();
}
else if(val == 'B'){ //backward
analogWrite(pwmr, nilaipwm);
digitalWrite(dirr, HIGH);
analogWrite(pwml, nilaipwm);
digitalWrite(dirl, HIGH);
delay(20);
stopp();
}
else if(val == 'L'){ //left
analogWrite(pwmr, nilaipwm);
digitalWrite(dirr, LOW);
analogWrite(pwml, nilaipwm);
digitalWrite(dirl, HIGH);
delay(20);
stopp();
}
else if(val == 'R'){ //right
analogWrite(pwmr, nilaipwm);
digitalWrite(dirr, HIGH);
analogWrite(pwml, nilaipwm);
digitalWrite(dirl, LOW);
delay(20);
stopp();
}
}
}
void stopp(void){ //void to stop the car
analogWrite(pwmr, 0);
analogWrite(pwml, 0);
}
Explaination
int pwmr = 3;
tell arduino that i use pin3 to control speed DC motor on right side.
tell arduino that i use pin3 to control speed DC motor on right side.
int dirl = 4;
tell arduino, i use pin4 to control direction of left DC motor.
Serial.begin(9600);
speed of communiction data transmit and receive
Serial.available() > 0
If port receive any signal/data more than 0
If port receive any signal/data more than 0
val = Serial.read();
"val" is variable that hold data transmitted by your smartphone in string
else if(val == 5)
if serial receive data '5' , arduino will tell motor driver to speed up motor speed at 90
else if(val == 'F')
if serial read is equal to 'F' , car will move forward.
Download Smartphone App & Arduino Code
Arduino Code
https://drive.google.com/file/d/0B3c_VPBO9Qq3SkNLNndKUEU0WFU/view?usp=sharingSmartphone App
https://play.google.com/store/apps/details?id=braulio.calle.bluetoothRCcontroller&hl=en
No comments:
Post a Comment