Introduction: Using Arduino and Bluetooth Control a Two-drive Car
Take a look the demo video:
Step 1: ĸï¼Preparation
- 1 x Freaduino 328ï¼Read Joystick data and send it to Bluetooth Shield.
- 1 x Bluetooth Shield, Send X, Y pos to other side.
- 1 x Sensor Shield, For plugin Josytick module.
- 1 x Joystick Module, For get X, Y pos.
- 6 x 3p jumper wires, For connect Joystick module.
- 1 x The battery compartment, For external power supply
- 1 x Fixed base plate
Car Side
- 1 x Arduino Pro, Deal the Bluetooth data to car servo
- 1 x Bluetooth Bee, Received the Bluetooth data from control side, powen on auto paired with Bluetooth Shield
- 1 x Bee adapter,For plugin Bluetooth Bee
- 1 x two-driver Car
You can get most of the module from www.elecfreaks.com
Step 2: Flow Chart
Step 3: Code
Freaduino Control Side code
#include <NewSoftSerial.h>
#include <avr/pgmspace.h>
#define rxPin 2
#define txPin 3
NewSoftSerial mySerial(rxPin, txPin);
void setup()
{
// define pin modes for tx, rx pins:
pinMode(rxPin, INPUT);
pinMode(txPin, OUTPUT);
pinMode(A0, INPUT);
pinMode(A1, INPUT);
mySerial.begin(9600);
Serial.begin(9600);
}
void loop(){
// 0.175 is for Correcting the pox to 90, servor pos defoult 90. This data you can change by yourself
int posX=(int)analogRead(A0)*0.175;
int posY=(int)analogRead(A1)*0.175;
mySerial.print("x");
mySerial.print(posX);
mySerial.print("y");
mySerial.print(posY);
mySerial.println("End");
Serial.print("x=");
Serial.println(posX);
Serial.print("y=");
Serial.println(posY);
delay(300);
}
Arduino Control Side code
#include <NewSoftSerial.h>
#include <Servo.h>
#include <String.h>
#define rxPin 2
#define txPin 3
NewSoftSerial mySerial(rxPin, txPin);
Servo myservoX; // create servo object to control a servo
Servo myservoY; // a maximum of eight servo objects can be created
void setup()
{
Serial.begin(9600);
mySerial.begin(9600);
myservoX.attach(5); // attaches the servo on pin 9 to the servo object
myservoY.attach(3);
}
void loop() {
int i = 0, n=0, count=0;
char someChar[32]={0};
// when characters arrive over the serial port...
if(Serial.available()) {
do{
someChar[i++] = Serial.read();
}while (Serial.available() > 0);
if(someChar[0] == 'x')
{
int flag = 1;
while(flag)
{
if(Serial.available()) {
do{
someChar[count++] = Serial.read();
}while (Serial.available() > 0);
if(strstr(someChar, "End"))
{
flag=0;
while(someChar[n] != 'y') n++;
char tmpbufx[4] = {0};
strncpy(tmpbufx, someChar, n);
int posX = atoi(tmpbufx);
myservoX.write(posX);
n=0;
char* str = strchr(someChar,'y');
char tmpbufy[4] = {0};
while(str[n] != 'E') n++;
strncpy(tmpbufy, str+1, n-1);
int posY = atoi(tmpbufy);
if(posY>105) posY = 105;
else if(posY<85) posY = 85;
myservoY.write(posY);
}
}
}
}
}
}
Step 4: Code
Please set Bluetooth Shield to Atuo paired mode. You need enter AT mode, and used AT+CMODE=1 . Please make sure you Master and chient Bluetooth Module has the same pair password.

Participated in the
Make It Real Challenge
3 Comments
9 years ago on Introduction
Nice work! We built a similar project. However, we installed an Android device onto a RC car and used an IOIO board instead to control it autonomously. Here is the preliminary result:
10 years ago on Introduction
These instructions are very lacking in information.
11 years ago on Step 4
How and when I must do this step? I have to call AT command from sketch? I didn't see it in your sketch in last step. Where can i find them? Is the AT command the same for all BT modules so may I google them?
Thanks.