Subscribe To Our List

We help electronics hobbyists to create projects related to Micro-controllers. Join our newsletter to get access to new projects first.
Email address
Secure and Spam free...

A few days back, I found out a Beautiful RC car from my child days but its remote was broken so I thought that why not convert this car into a High Speed Arduino RC car?

So here it is now, I have converted it into a High Speed Arduino RC car and today I am going to share with you that how I did that. The App i have used for this project can be downloaded from here.

Do suggest me in the comment section that which things you want me to add in this car in Future.

Functions of High Speed Arduino RC car

The functions this High Speed Arduino RC car are as following

  • Front Lights
  • Back lights
  • RGB light in center will make it look good
  • Horn
  • Rotation in all directions
  • Speed control

Required Components

The components required for High Speed Arduino RC car are as follows

  • Old Car with Motors
  • Arduino Uno
  • HC-05 or HC-06 Bluetooth Module
  • L298N Motor driver
  • Buzzer
  • RGB LED
  • 2 X Red LED’s
  • 2 X White LED’s
  • 2 X Rechargeable cells of 3.7V
  • 9V battery
  • 7 X 220 ohm resistors

Hardware

Firstly make the connections for the L298N motor driver with the Arduino. The connections are as follows

L298N Arduino Uno
ENA Pin 11
IN1 Pin 10
IN2 Pin 9
IN3 Pin 8
IN4 Pin 7
ENB Pin 6
12V Positive end of Battery
Gnd Negative end of battery and to GND of Arduino

Then connect the two DC motors to the two sides of the L298N motor driver.

I have used two rechargeable cells of 3.7V each to run these motors. These cells can be used again and again and also will run the motors fast.

For making the connections of RGB module with the Arduino, connect the cathode of the RGB led which is the longer pin of RGB led to the GND of Arduino and the other three pins to the pin 13, 5, 4 of Arduino through the 220 ohm resistors. The resistors will prevent the excess amount of current to flow through the RGB led.

If you want to read more about RGB module interfacing with Arduino, then read this tutorial | Arduino RGB LED Tutorial

After that, make the connections for the Bluetooth module with the Arduino.

Bluetooth Module Arduino
VCC 5V
GND GND
TX Pin 2
RX Pin 3

If you want to read more about Bluetooth module interfacing with Arduino, then read this tutorial | Arduino Bluetooth Module Tutorial

After that, Connect the longer pins of the two White led’s which are the positive pins to the A0 and A1 of Arduino and connect the other two pins of these led’s to the Gnd of Arduino through the 220 ohm resistors.

Similarly, Connect the longer pins of the two Red led’s which are the positive pins to the A2 and A3 of Arduino and connect the other two pins of these led’s to the GND of Arduino through the 220 ohm resistors.

Then connect the positive of buzzer to the pin 12 and negative of buzzer to ground.

In the end, connect the positive of 9V battery to the Vin of Arduino and the negative of Battery to GND of Arduino.

High speed Arduino RC car_bb.png

After making all the connections as shown in the above circuit diagram, my car with the circuit attached was looking like as shown in the figure below.

High speed Arduino RC car High speed Arduino RC car

After attaching the top body on it, the car was looking like an original Lamborghini. The RGB connected in the middle makes it look more beautiful and its high speed makes it to compete with the RC cars available in the market.

High speed Arduino RC car High speed Arduino RC car High Speed Arduino RC carHigh speed Arduino RC car

 

Code

//including the libraries
#include <SoftwareSerial.h> // TX RX software library for bluetooth
#include <LEDFader.h>

//Defining pins for RGB led
#define GREEN 13
#define BLUE 5
#define RED 4
#define delayTime 3
#define LED_NUM 3
LEDFader leds[LED_NUM] = {
  LEDFader(4),
  LEDFader(5),
  LEDFader(13)
};

//Initializing pins for bluetooth Module
int bluetoothTx = 2; // bluetooth tx to 2 pin
int bluetoothRx = 3; // bluetooth rx to 3 pin
SoftwareSerial bluetooth(bluetoothTx, bluetoothRx);

//Front Motor Pins  
int Enable1 = 6;
int Motor1_Pin1 = 7;  
int Motor1_Pin2 = 8;  

//Back Motor Pins      
int Motor2_Pin1 = 9; 
int Motor2_Pin2 = 10;
int Enable2 = 11; 

//Front Light pins   
int front_light1 = A0;
int front_light2 = A1;

//Back light pins
int back_light1 = A2;
int back_light2 = A3;
int horn = 12;

char command ; //variable to store the data
int velocity = 0; //Variable to control the speed of motor

void setup() 
{       
  //Set the baud rate of serial communication and bluetooth module at same rate.
  Serial.begin(9600);  
  bluetooth.begin(9600);

  //Setting the L298N, LED and RGB LED pins as output pins.
  pinMode(Motor1_Pin1, OUTPUT);  
  pinMode(Motor1_Pin2, OUTPUT);
  pinMode(Enable1, OUTPUT);
  pinMode(Motor2_Pin1, OUTPUT);  
  pinMode(Motor2_Pin2, OUTPUT);
  pinMode(Enable2, OUTPUT); 
  pinMode(front_light1, OUTPUT);  
  pinMode(back_light1, OUTPUT);
  pinMode(front_light2, OUTPUT);  
  pinMode(back_light2, OUTPUT);
  pinMode(horn, OUTPUT);
  pinMode(GREEN, OUTPUT);
  pinMode(BLUE, OUTPUT);
  pinMode(RED, OUTPUT);

  //Setting the enable and RGB LED pins as HIGH.
  digitalWrite(Enable1, HIGH);
  digitalWrite(Enable2, HIGH);
  digitalWrite(GREEN, HIGH);
  digitalWrite(BLUE, HIGH);
  digitalWrite(RED, HIGH);
}

void loop(){
  if(bluetooth.available() > 0){  //Checking if there is some data available or not
    command = bluetooth.read();   //Storing the data in the 'command' variable
    Serial.println(command);      //Printing it on the serial monitor
    
    //Change pin mode only if new command is different from previous.   
    switch(command){
    case 'F':  //Moving the Car Forward
      digitalWrite(Motor2_Pin2, LOW);
      digitalWrite(Motor2_Pin1, HIGH);
      digitalWrite(Motor1_Pin1, LOW);
      digitalWrite(Motor1_Pin2, LOW);
      break;
    case 'B':  //Moving the Car Backward
      digitalWrite(Motor2_Pin1, LOW);
      digitalWrite(Motor2_Pin2, HIGH);
      digitalWrite(Motor1_Pin1, LOW);
      digitalWrite(Motor1_Pin2, LOW);
      break;
    case 'L':  //Moving the Car Left
      digitalWrite(Motor1_Pin1, LOW);
      digitalWrite(Motor1_Pin2, HIGH);
      digitalWrite(Motor2_Pin1, LOW);
      digitalWrite(Motor2_Pin2, LOW);
      break;
    case 'R':   //Moving the Car Right
      digitalWrite(Motor1_Pin2, LOW);
      digitalWrite(Motor1_Pin1, HIGH);  
      digitalWrite(Motor2_Pin1, LOW);
      digitalWrite(Motor2_Pin2, LOW);
      break;
    case 'S':   //Stop
      digitalWrite(Motor2_Pin2, LOW);
      digitalWrite(Motor2_Pin1, LOW);
      digitalWrite(Motor1_Pin2, LOW);
      digitalWrite(Motor1_Pin1, LOW);
      break; 
    case 'I':  //Moving the Car Forward right
      digitalWrite(Motor2_Pin2, LOW);
      digitalWrite(Motor2_Pin1, HIGH);
      digitalWrite(Motor1_Pin2, LOW);
      digitalWrite(Motor1_Pin1, HIGH);
      break; 
    case 'J':  //Moving the Car backward right
      digitalWrite(Motor1_Pin2, LOW);
      digitalWrite(Motor1_Pin1, HIGH);
      digitalWrite(Motor2_Pin1, LOW);
      digitalWrite(Motor2_Pin2, HIGH);
      break;        
    case 'G':  //Moving the Car Forward left
      digitalWrite(Motor2_Pin2, LOW);
      digitalWrite(Motor2_Pin1, HIGH);
      digitalWrite(Motor1_Pin1, LOW);
      digitalWrite(Motor1_Pin2, HIGH);
      break; 
    case 'H':  //Moving the Car backward left
      digitalWrite(Motor2_Pin1, LOW);
      digitalWrite(Motor2_Pin2, HIGH);
      digitalWrite(Motor1_Pin1, LOW);
      digitalWrite(Motor1_Pin2, HIGH);
      break;
    case 'W':  //Front light ON 
      digitalWrite(front_light1, HIGH);
      digitalWrite(front_light2, HIGH);
      break;
    case 'w':  //Front light OFF
      digitalWrite(front_light1, LOW);
      digitalWrite(front_light2, LOW);
      break;
    case 'U':  //Back light ON 
      digitalWrite(back_light1, HIGH);
      digitalWrite(back_light2, HIGH);
      break;
    case 'u':  //Back light OFF 
      digitalWrite(back_light1, LOW);
      digitalWrite(back_light2, LOW);
      break; 
    case 'V':  //Horn On
      tone(horn,494);
      break; 
    case 'v':  //Horn OFF 
       noTone(horn);
      break;   
    case 'x': //Turn ON Everything

    break;
    case 'X': //Turn OFF Everything
      
    break;

    //Controlling the Speed of Car  
    default:  //Get velocity
      if(command=='q'){
        velocity = 255;  //Full velocity
        analogWrite(Enable2, velocity);
      }
      else{ 
        //Chars '0' - '9' have an integer equivalence of 48 - 57, accordingly.
        if((command >= 48) && (command <= 57)){ 
          //Subtracting 48 changes the range from 48-57 to 0-9.
          //Multiplying by 25 changes the range from 0-9 to 0-225.
          velocity = (command - 48)*25;       
          analogWrite(Enable2, velocity);
        }
      }
      }
    }
     RGB();
  } 

  void RGB()
{
    // Update all LEDs and start new fades if any are done
  for (byte i = 0; i < LED_NUM; i++) 
  {
    LEDFader *led = &leds[i];
    led->update();
 
    // This LED is not fading, start a new fade
    if (led->is_fading() == false) 
    {
      int duration = random(1000, 3000); // between 1 - 3 seconds
 
      // Fade Up
      if (led->get_value() == 0) 
      {
        byte intensity = random(100, 255);
        led->fade(intensity, duration);
      }
      // Fade Down
      else 
      {
        led->fade(0, duration);
      }
    }
  }
 }

Video

JOIN OUR NEWSLETTER
We help electronics hobbyists to create projects related to Micro-controllers. Join our newsletter to get access to new projects first.
We hate spam. Your email address will not be sold or shared with anyone else.

Leave a Reply

Your email address will not be published.

Subscribe To Our List

We help electronics hobbyists to create projects related to Micro-controllers. Join our newsletter to get access to new projects first.
Email address
Secure and Spam free...
Skip to toolbar