Welcome to Hackster!
Hackster is a community dedicated to learning hardware, from beginner to pro. Join us, it's free!
Saimouli Katragadda
Published © GPL3+

Infrared controlled robot

Learn how to control a robot with a infrared TV remote

IntermediateFull instructions provided7,184
Infrared controlled robot

Things used in this project

Story

Read more

Schematics

Infrared receiver schematics

Code

Ir_tank_fullcode.ino

C/C++
 int receiverpin= 11;
#include <IRremote.h>

IRrecv irrecv(receiverpin); // create instance of irrecv
decode_results results;

void setup() 
{
  Serial.begin(9600);
  //pinMode(4,OUTPUT); // LED
  //left motor 
  pinMode(4,OUTPUT); //
  pinMode(7,OUTPUT);
  pinMode(6,OUTPUT); //pwm
  //right right
  pinMode(13,OUTPUT);
  pinMode(12,OUTPUT);
  pinMode(9,OUTPUT);//pwm
  
  irrecv.enableIRIn(); // start the receiver
}

void onLED(int pin, int voltage)
{
  digitalWrite(pin, voltage);
}

void goForward(int duration, int pwm)
{
   digitalWrite(4,HIGH);
   delay(duration);//100
   digitalWrite(7,LOW);
   analogWrite(6,pwm);//right motor
  
   digitalWrite(13,HIGH);
   delay(duration);
   digitalWrite(12,LOW);
   analogWrite(9,pwm);// right motor 
}

void fullReverse(int duration, int pwm)
{
   digitalWrite(4,LOW);
   delay(duration);
   digitalWrite(7,HIGH);
   analogWrite(6,pwm);
  
   digitalWrite(13,LOW);
   delay(duration);
   digitalWrite(12,HIGH);
   analogWrite(9,pwm);// right motor
    
}

void fullStop(int duration, int pwm)
{
   digitalWrite(4,LOW);
   delay(duration);
   digitalWrite(7,LOW);
   analogWrite(6,pwm);// 
  
   digitalWrite(13,LOW);
   delay(duration);
   digitalWrite(12,LOW);
   analogWrite(9,pwm);// right motor
}

void turnLeft(int duration, int pwm)
{
   digitalWrite(13,LOW); 
   delay(duration);
   digitalWrite(12,HIGH);
   analogWrite(9,pwm);// right motor
  
   digitalWrite(4,HIGH);
   delay(duration);
   digitalWrite(7,LOW);
   analogWrite(6,pwm);
    
}

void turnRight( int duration, int pwm)
{
   digitalWrite(13,HIGH); 
   delay(duration);
   digitalWrite(12,LOW);
   analogWrite(9,pwm);// right motor
  
   digitalWrite(4,LOW);
   delay(duration);
   digitalWrite(7,HIGH);
   analogWrite(6,pwm);
  
}
void translateIR()
// takes action based on IR code received
  // uses Sony IR codes
{
  switch(results.value)
  {
    case 0x9CB47: goForward(100,80);
    break;

    case 0x5CB47: fullReverse(100,77);
    break;

    case 0x3CB47: turnLeft(100,120);
    break; 

    case 0xDCB47: turnRight(100,120);
    break; 

    default:fullStop(100,0);
    break;

  }
}

 void loop()
  {
   if (irrecv.decode(&results)) // have we received an IR signal?
    {
      onLED(2,255); // on led when the signal is being recieved 
      translateIR();
        for (int z = 0 ; z < 2 ; z++) // ignore the repeated codes
           {
              irrecv.resume(); // receive the next value
            }
     }
    else 
    {
      onLED(2,0); // off if the signal is not being recived
    }
  }

Credits

Saimouli Katragadda
1 project • 3 followers
Contact

Comments

Please log in or sign up to comment.