Introduction: Bluetooth RC CAR (Arduino HM-10 + IPhone Controller) Mode 1

About: I am an engineer. I like electronics and recently Arduino. I will make some projects using Arduino to teach my son, Emad. He is very clever and helpful to me.

This is my 2nd RC CAR project which I developed it by Bluetooth module (HM-10) using iPhone (BitBlue App). Also, you can use any other Apps which supports BLE.

I used below references for developing this project:

Datasheet of HM-10 Module: https://github.com/yostane/arduino-at-09/blob/mast...

Thanks to Martyn Currey website http://www.martyncurrey.com/hm-10-bluetooth-4ble-m...

I removed the ultrasonic sensor which I used in my 1st project and I used Bluetooth module instead.

my 1st project: https://www.instructables.com/id/Upgraded-RC-Toy-C...

Actually, there are two types of the controller (joystick) which we can use, as 4 buttons controller and directional joystick (analog).

In this project, I will show you 4 buttons controller.

Step 1: List of Parts

We need below parts:

1- RC Toy Car (original board inside the car to be removed), without the remote control: 1 Piece

2- Arduino (UNO) : 1 Piece

3- Battery (9V high amper), we used the battery of Drone: 1 Piece

4- DC motor Driver: 1 Piece

5- AT-09 BLE Bluetooth 4.0 Uart Transceiver Module CC2541 Central Switching compatible (HM-10): 1 piece

6- Wires

7- Glue gun

Step 2: Wiring Parts

For wiring and connecting parts, I drew parts by fritzing. Also, I took some photos for better understanding.

Any question, please let me know.

Note for HM-10 module:

You can simply connect HM-10 TX pin to Arduino but for connecting HM-10 RX pin, you need a voltage divider which I used three 1K Ohm resistors.

Step 3: My Arduino Code (Defining Pins)

Firstly I developed the Arduino code to use simple Joystick with 4 buttons. So I will give this code at first but later I found that there is another Joystick (Analog) like PS2 joystick which controlling is much easier than 4 buttons one.

Defining pins:

#include <SoftwareSerial.h>

SoftwareSerial BTserial(2, 3); // RX | TX
// Connect the HM-10 TX to the Arduino RX on pin 2. 
// Connect the HM-10 RX to the Arduino TX on pin 3 through a voltage divider.
// 
char t;
//defines pins numbers for Motor A (Forward & Reverse)
int pinA1 = 11;    
int pinA2 = 10;    //defines pins numbers for Motor B (Steering)
int pinB1 = 6;    
int pinB2 = 5;

Step 4: My Arduino Code (setup)

The next code is for setup part.

void setup() {

BTserial.begin(9600);

/* Initialize Motor A Pin Modes */
pinMode (pinA1, OUTPUT);
pinMode (pinA2, OUTPUT);  
  
/* Initialize Motor B Pin Modes */  
pinMode (pinB1, OUTPUT);
pinMode (pinB2, OUTPUT);  
}

This is for initializing Motor A and B pins.

Step 5: My Arduino Code (Loop)

This part is for loop section.

void loop() {

if (BTserial.available())
    {  
        t = BTserial.read();
    }
if (t == 'F'){
  forward(150);   
}
else if (t == 'B'){
  reverse(150);
}
else if (t == 'L'){
  left();
}
else if (t == 'R'){
  right();
}
else if (t == 'A'){
  stopcar();
}

delay(100);
}

void forward(int s){
digitalWrite (pinA1, HIGH);
digitalWrite (pinA2, LOW);
analogWrite (pinA1, s);
}

void reverse(int b){
digitalWrite (pinA1, LOW);
digitalWrite (pinA2, HIGH);
analogWrite (pinA2, b);  
}

void stopcar(){
  digitalWrite (pinA1, LOW);
  digitalWrite (pinA2, LOW);
}

void right(){
  analogWrite (pinB2, 200);
  delay(50);
  digitalWrite (pinB2, LOW);
}

void left(){
  analogWrite (pinB1, 200);
  delay(50);
  digitalWrite (pinB1, LOW);
}

I will define it later.

Step 6: Download Files

You can download my code as attached.