Arduino Tank Car Lesson 4-IR Remote Tank Car

by osoyooproduct in Circuits > Arduino

102 Views, 2 Favorites, 0 Comments

Arduino Tank Car Lesson 4-IR Remote Tank Car

IR Remote.png

In this tutorial, we will use KOOKYE Smart tank car to make a simple

remote controlled smart car. Once the car installation is completed, we will use a Infrared Remote to control the car movements including go forward, go back, left turn and right turn.

Detailed Tutorials: http://kookye.com/?p=5794
Buy it for USA : Amazon.com

How It Work

There is a IR receiver and remote control. The arduino board would

translate the programs to the predefined behaviors once it receive the IR signals from remote control.

​Software Installation:

Step 1: Install latest Arduino IDE (If you have Arduino IDE version after 1.1.16, please skip this step)
Download Arduino IDE from https://www.arduino.cc/en/Main/Software?setlang=en... , then install the software.

Step 2: Install IRremote library into Arduino IDE (If you have already installed IRremote library, please skip this step)

Download IRremote library from http://www.kookye.com/download/car/IRremote.zip, then import the library into Arduino IDE(Open Arduino IDE-> click Sketch->Include Library->Add .Zip Library)

Step 3:Download Lesson 4 sample code from http://www.kookye.com/download/car/tank_robot_less... , unzip the download zip file tank_robot_lesson4.zip, you will see a folder called tank_robot_lesson4.

Step 4: Connect UNO R3 board to PC with USB cable, Open Arduino IDE ->; click file ->; click Open ->; choose code "tank_robot_lesson4.ino" in tank_robot_lesson4 folder, load the code into arduino.

Step 5:Choose corresponding board and port for your project,upload the sketch to the board.

Understanding the Code:

Part 1: Define the button that you will be using on IR remote control.

(If you use the lesson 1example code, the arduino IDE Serial Monitor will output its counterpart IR code.)

#define IR_ADVANCE 0x00FF18E7 //code from IR controller "▲" button

#define IR_BACK 0x00FF4AB5 //code from IR controller "▼" button

#define IR_RIGHT 0x00FF5AA5 //code from IR controller ">;" button

#define IR_LEFT 0x00FF10EF //code from IR controller "<;" button

#define IR_SERVO 0x00FF38C7 //code from IR controller "OK" button

#define IR_OPENLED 0x00FFB04F //code from IR controller "#" button

#define IR_CLOSELED 0x00FF6897 //code from IR controller "*" button

#define IR_BEEP 0x00FF9867 //code from IR controller "0" button

Part 2:The function on IR Remote Control

Part 3:Define movement name for each button.

enum DN
{

GO_ADVANCE, //go ahead

GO_LEFT, //left turn

GO_RIGHT,//right turn

GO_BACK,//go back

MOVE_SERVO,//move servo

OPEN_LED,//open led

CLOSE_LED,//close led

BEEP,//control buzzer

DEF

}Drive_Num=DEF;

Part 4:Decode the IR signal and translate button code into movment name.
void do_IR_Tick()

{

if(IR.decode(&IRresults))

{ if(IRresults.value==IR_ADVANCE)

{

Drive_Num=GO_ADVANCE;

}

else if(IRresults.value==IR_RIGHT)

{

Drive_Num=GO_RIGHT;

}

else if(IRresults.value==IR_LEFT)

{

Drive_Num=GO_LEFT;

}

else if(IRresults.value==IR_BACK)

{

Drive_Num=GO_BACK;

}

else if(IRresults.value==IR_SERVO)

{

Drive_Num=MOVE_SERVO;

}

else if(IRresults.value==IR_OPENLED)

{

Drive_Num=OPEN_LED;

}

else if(IRresults.value==IR_CLOSELED)

{

Drive_Num=CLOSE_LED;

}

else if(IRresults.value==IR_BEEP)

{

Drive_Num=BEEP;

}

IRresults.value = 0;

IR.resume();

}

}

Part 5:Execute movement function as per movement name from Part 4.

void do_Drive_Tick()
{

switch (Drive_Num)

{

case GO_ADVANCE:

go_ahead(10);JogFlag = true;JogTimeCnt = 1;JogTime=millis();break;//if GO_ADVANCE code is detected, then go advance

case GO_LEFT:

turn_left(10);JogFlag = true;JogTimeCnt = 1;JogTime=millis();break;//if GO_LEFT code is detected, then turn left

case GO_RIGHT:

turn_right(10);JogFlag = true;JogTimeCnt = 1;JogTime=millis();break;//if GO_RIGHT code is detected, then turn right

case GO_BACK:

go_back(10);JogFlag = true;JogTimeCnt = 1;JogTime=millis();break;//if GO_BACK code is detected, then backward

case MOVE_SERVO:

move_servo();JogFlag = true;JogTimeCnt = 1;JogTime=millis();break;//move servo

case OPEN_LED:

open_led(1),open_led(2);JogTime = 0;break;//open led

case CLOSE_LED:

close_led(1),close_led(2);JogTime = 0;break;//close led

case BEEP:

control_beep();JogTime = 0;break;//control beep

default:break;

}

Drive_Num=DEF;

//keep current moving mode for 200 millis seconds

if(millis()-JogTime>=200)
{

JogTime=millis();

if(JogFlag == true)

{

stopFlag = false;

if(JogTimeCnt <= 0)

{

JogFlag = false; stopFlag = true;

}

JogTimeCnt--;

}

if(stopFlag == true)

{

JogTimeCnt=0;

go_stop();

}

}

}

/*******Turn on LED # led_num*******/
void open_led(int led_num) { if (led_num == 1) digitalWrite(LED1,LOW); else digitalWrite(LED2,LOW); }

/*******Turn off LED # led_num*******/
void close_led(int led_num) { if (led_num == 1) digitalWrite(LED1,HIGH); else digitalWrite(LED2,HIGH);

/*******Beep buzzer*******/
void control_beep() { digitalWrite(BUZZER,LOW),delay(100); digitalWrite(BUZZER,HIGH),delay(100); }

/***move servo***/
void move_servo() { int i; for(i = 0;i<180;i++){ head.write(i); delay(5); } for(i = 180;i>=0;i--){ head.write(i); delay(5); } head.write(90); }

Hardware Installation:

Step 1: Install expansion board on UNO R3 board.

Step 2: Move the wire connected to pinout(GND,VCC,S) in IR recevier to the counterpart pin in expansion board as the following picture.

Step 3: Turn the switch of expansion board to "1" and "2" position, as the following photo shows.

Step 4: Put two 12865 batteries in battery box and turn the swith of box to "ON". (If you have finished the above steps on lesson one, please skip these steps)

Step 5:Press IR controller keys to control the car movements as per predefine code.

Note: Please check the wire connections if the tank car can not work as expected.