Sometimes your RC controller gets old and finding a replacement can be hard. Don’t worry, you can now program your RC car to work with your Android phone via Bluetooth! You can even get it to work with the phone’s accelerometer so you can use tilt control when driving your RC car.
Check out this video from Tinkernut on how its done:
Here’s what you will need:
- A Bluetooth Capable Smartphone (I’ll be using an Android).
- An Arduino ($10.99)
- An Arduino Bluetooth Module ($6.45)
- An RC Car (this is the one I used) ($5.00 – $30.00)
- An H-Bridge motor controller ($9.69)
- Wires ($4.20)
- A 9v Battery ($2.00)
TOTAL COST: ~$30.00
This is a simple project of Android Bluetooth Car with Bluetooth control. This project is open source and multiplatform: Arduino (Processing), STM32, FEZ Panda II (.NET Micro Framework) and may be even Raspberry Pi.
To control the car used Android-device with a built-in accelerometer. Tilt forward – car goes forward, tilt to the left – car turns to the left, tilt back – car goes back. Speed of movement or rotation depends on how much you tilt the device. Sensitivity and value of the tilt set in the configuration Android-apps. Also are provided a normal way to control: the buttons on the screen. In addition to all I implemented the touch control. In version 1.2, I added a new type of control: like virtual steering wheel. Total 4 ways to control the RC Car.
1. Android device
The most important part – Android device with accelerometer and Bluetooth: tablet, smartphone and other… As an Android device, I used a cheap Chinese tablet “Ainol Aurora” with an external USB-Bluetooth module (because its not have own), connected via USB Host.
2. DIY Car Chassis
We also need any chassis with 2 or 4 DC motors. You can use an old RC toy car. I bought a 4WD chassis with 4 motors on AliExpress. To control described in this project is most suitable track chassis.
3. Controller (MCU)
As I said above, the project is planned to be multiplatform. At the present time I implemented the project for:
FEZ Panda (.NET MF)
Controller must support 2 PWM and UART.
4. Bluetooth module
As a Bluetooth module uses cheap Chinese module HC-06, which has been described in this article.
5. Motor Driver
I used L298N Dual Bridge DC stepper Motor Driver module. It cost 2-3$ on AliExpress.
6. Other parts
All calculations are performed in the Android-application, and immediately calculate the values of the PWM for the left and right motor. Application has flexible settings, such as the range of the PWM, the sensitivity of tilt, the minimum threshold for the PWM and other. Example commands transmitted by Bluetooth:
L – the command to the left engine, R – for the right
A dash means the motor rotation to move back
255 – PWM value (for Arduino is the maximum speed of rotation)
\r – end of command.
On this command RC car will move forward and slightly rotated to the right, as right engine rotates slowly left.
On this command the left engine will rotate back and forward right, forcing a car to rotate around its axis counterclockwise.
Command is an additional channel to which you can connect for example lights, sound, etc.
Symbols command L, R and H can be defined in the settings of Android-applications.
In the MCU control program provides a timer that shuts off the engine if the last command was received more than n-seconds ago. The data are stored in the EEPROM memory of the controller and can be changed from Android device. The range of this setting is from 0.1 seconds to 99.9 seconds. This setting can be disabled. To work with EEPROM provides commands: Fr – reading values andFw – record values.
Block diagram of CxemCAR:
As we can see, the controller (Arduino, STM32, and others it does not matter which one) connects to Bluetooth module and a motor driver with two or four connected motors.
The application for Android was written in Eclipse IDE. All sources of the project and the project for Eclipse, you can download below. Android version on your device must be > 3.0.
The application contains several activity. Main activity is a home screen with buttons running different operating modes and settings:
There are 3 control modes Bluetooth-car: from accelerometer, screen buttons and touch-control.
The project structure in Eclipse:
Android application settings
Screenshot of settings CxemCar Android application version 1.0:
To establish a connection with the RC Car’s Bluetooth module, you must set MAC-address in the application settings. But first, you must configure the pair the devices on Android-device: open Settings -> Bluetooth and click “Search for devices”. When the phone finds our Bluetooth-module, click them and enter password for pairing (usually “1234”)
To know Bluetooth module MAC-address possible from any application, such as Bluetooth Terminal. To do this, click “Connect a device – Secure” and in the resulting window, click the button “Scan for devices”. Software will be scans the Bluetooth devices and displays them MAC-address.
Obtained MAC-address needs to be set in the Android-application CxemCAR
After the base was assembled chassis with motors, solder the wires to the motors
For alignment of motors I made a spacer from plastic
Then the wheels have been set
The wires from the 4-motor connect to the motor driver board L298N
Then connect the LED to indicate Bluetooth status through a resistor 470 Ohm.
To connect the Bluetooth module or make tipsy all necessary wiring, in addition to the LED is power, GND, TX and RX. See the datashit for your Bluetooth module
I used the module HC-06. Wiring diagram is as follows:
The assembled HC-06 module is as follows:
It placed to large diameter heat-shrink tube.
To power the motor, I used the battery holder with five AA batteries, motor supply voltage of 7.5 volts. You can use the LiPo batteries and other.
CxemCAR project for Arduino
CxemCAR project for STM32
Version 1.2, 1.3: Added a new type of management: the virtual steering wheel. Fixed class Handler. Improvements in Bluetooth class.
Video of demonstration the virtual steering wheel mode (1.2 version and above):
Check out http://solderer.tv/cxemcar/ for more info.