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
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.