LinuxÉdu

Commander un robot par InfraRouge

Niveau : 3° Discipline : Technologie

Objectif : Commander le robot mobile à l’aide d’une télécommande universelle récupérée.

Matériel :

  • robot mobile commander par Arduino
  • IR receiver (kit de communication Snootlab)
  • Télécommande

Code :


#include <IRremote.h>

#define DELAI 200

int RECV_PIN = 11; // entree IR
IRrecv irrecv(RECV_PIN);
decode_results results;

//robot moteur capteur
//branchement capteur
const int capdpin = 6;
const int capgpin = 7;

//branchement commandes pont H
const int com1pin = 2;
const int com2pin = 4;
const int com3pin = 3;
const int com4pin = 5;

#define droite 0xFF8877 // fleche droite
#define gauche 0xFF9867 // fleche gauche

//variable pour mémoriser la valeur lue
int valg = 0;
int vald = 0;

//variable pour le pivotement
int pivo;

//configure les entrées et sorties
void setup(){
Serial.begin(9600);
pinMode (capdpin, INPUT);
pinMode (capgpin, INPUT);
pinMode (com1pin, OUTPUT);
pinMode (com2pin, OUTPUT);
pinMode (com3pin, OUTPUT);
pinMode (com4pin, OUTPUT);
irrecv.enableIRIn(); // Start the receiver
}

//test et commande
void loop(){
//test capteur droit
vald = digitalRead(capdpin);
//test capteur gauche
valg = digitalRead(capgpin);
if (vald == LOW || valg == LOW){
recul ();
}
else {
avance ();
}
receive_ir();
}

void receive_ir(){
if (irrecv.decode(&results)) {
Serial.println(results.value, HEX);
if (results.value == droite) {
pivo = 1;
pivot();
}
if (results.value == gauche) {
pivo = 2;
pivot();
}
irrecv.resume();//attente prochaine commande
}
}

void avance ()//fonction avance
{  //robot avance gauche
digitalWrite(com2pin, HIGH);
digitalWrite(com4pin, LOW);
//robot avance droite
digitalWrite(com1pin, HIGH);
digitalWrite(com3pin, LOW);
delay (DELAI);
}

void recul ()//fonction de recul
{  //arret du robot
digitalWrite(com2pin, LOW);
digitalWrite(com4pin, LOW);
digitalWrite(com1pin, LOW);
digitalWrite(com3pin, LOW);
delay (DELAI);
//robot recul gauche et droit
digitalWrite(com2pin, LOW);
digitalWrite(com4pin, HIGH);
digitalWrite(com1pin, LOW);
digitalWrite(com3pin, HIGH);
delay (2*DELAI);
}

void pivot(){
if (pivo == 1)
{ //robot pivote droite
digitalWrite(com2pin, LOW);
digitalWrite(com4pin, LOW);
digitalWrite(com1pin, LOW);
digitalWrite(com3pin, HIGH);
}
else
{//robot pivote gauche
digitalWrite(com2pin, LOW);
digitalWrite(com4pin, HIGH);
digitalWrite(com1pin, LOW);
digitalWrite(com3pin, LOW);
}
delay (5*DELAI);
}

Comments are closed.