Accueil > Arduino, Matériel > Piloter le robot 2WD à l’aide d’une télécommande infrarouge

Piloter le robot 2WD à l’aide d’une télécommande infrarouge

Aujourd’hui, j’ai décidé d’équiper mon robot d’un récepteur infrarouge afin de pouvoir le piloter via une télécommande.

Pour cela j’ai utilisé la librairie IRremote pour piloter l’Arduino. Si vous voulez avoir plus d’information concernant mon robot c’est par ici :

https://itechnofrance.wordpress.com/2013/03/07/montage-du-chssis-dfrobot-2wd/

https://itechnofrance.wordpress.com/2013/03/08/premiers-tests-du-chssis-dfrobot-2wd/

https://itechnofrance.wordpress.com/2013/03/08/shield-moteur-dc-dfrobot-dri0001/

Si vous voulez avoir des informations sur l’utilisation de la librairie IRremote, c’est par là :

https://itechnofrance.wordpress.com/2013/04/19/librairie-irremote-pour-arduino/

La première étape est de prendre une télécommande afin de pouvoir y décoder les codes émis en fonction de l’appuie des touches. Pour ma part j’utiliserai les touches 1 à 9 afin de pouvoir diriger mon robot. Pour le décodage, il suffit d’utiliser le programme de réception (voir l’article sur l’utilisation de la librairie).

La deuxième étape est de monter un capteur infrarouge de chez Sparkun modèle SEN08554 sur mon robot :

image

Je l’ai monté sur mon petit breadboard noir. L’électronique de ce capteur infrarouge est le suivant :

image

On aperçoit qu’il utilise un module TSOP85 dont on peut voir les caractéristiques ici :

https://www.sparkfun.com/datasheets/Sensors/Infrared/tsop853.pdf

Le programme de pilotage de mon robot sera le suivant (il est documenté) :

/*
   Pilotage Robot 2WD à partir d’une télécommande Infra-rouge
*/

#include <IRremote.h>

int broche_reception_ir = 11; // broche 11 utilisée
IRrecv reception_ir(broche_reception_ir); // crée une instance
decode_results decode_ir; // stockage données reçues

// définition des broches utilisées sur le shield contrôle moteur DRI0001
int direction_moteur_droite = 7;
int controle_moteur_droite = 6;
int direction_moteur_gauche = 4;
int controle_moteur_gauche = 5;

void moteur (int moteur_gauche, boolean sens_moteur_gauche, int moteur_droite, boolean sens_moteur_droite)
{
  // définition sens moteur LOW avance, HIGH recule
  digitalWrite(direction_moteur_gauche, sens_moteur_gauche);
  analogWrite(controle_moteur_gauche, moteur_gauche);
  digitalWrite(direction_moteur_droite, sens_moteur_droite);
  analogWrite(controle_moteur_droite, moteur_droite);
}

void virage_90 (boolean sens)
{
  // on va toujours garder une valeur PWM à 200
  // et on va jouer sur la durée en ms pour effectuer le virage souhaité
  // sens à HIGH pour gauche, LOW pour droite
  digitalWrite(direction_moteur_gauche, sens);
  digitalWrite(direction_moteur_droite, !sens);
  analogWrite(controle_moteur_gauche, 200);
  analogWrite(controle_moteur_droite, 200);
  delay(480);
  analogWrite(controle_moteur_gauche, 0);
  analogWrite(controle_moteur_droite, 0);       
}

void setup()
{
  int i;
  for (i=4;i<=7;i++)
    pinMode(i, OUTPUT); //définit les port 4 à 7 en sortie
  analogWrite(controle_moteur_gauche, 0); // arrêt moteur gauche
  analogWrite(controle_moteur_droite, 0); // arrêt moteur droite
  reception_ir.enableIRIn(); // démarre la réception
}

void loop()
{
  if (reception_ir.decode(&decode_ir))
  {
    if (decode_ir.value == 0xC1CC8679)
    {
      // touche 1 –> Robot avance et tourne à gauche
      moteur(150, LOW, 250, LOW);
    }
    if (decode_ir.value == 0xC1CC46B9)
    {
      // touche 2 –> Robot avance tout droit
      moteur(150, LOW, 150, LOW);
    }
    if (decode_ir.value == 0xC1CCC639)
    {
      // touche 3 –> Robot avance et tourne à droite
      moteur(250, LOW, 150, LOW);
    }
    if (decode_ir.value == 0xC1CC26D9)
    {
      // touche 4 –> Robot tourne à gauche toute et avance
      virage_90(HIGH);
      moteur(150, LOW, 150, LOW);
    }
    if (decode_ir.value == 0xC1CCA659)
    {
      // touche 5 –> Robot stop
      moteur(0, LOW, 0, LOW);
    }
    if (decode_ir.value == 0xC1CC6699)
    {
      // touche 6 –> Robot tourne à droite toute et avance
      virage_90(LOW);
      moteur(150, LOW, 150, LOW);
    }
    if (decode_ir.value == 0xC1CCE619)
    {
      // touche 7 –> Robot recule et tourne à gauche
      moteur(150, HIGH, 250, HIGH);
    }
    if (decode_ir.value == 0xC1CC16E9)
    {
      // touche 8 –> Robot recule tout droit
      moteur(150, HIGH, 150, HIGH);
    }
    if (decode_ir.value == 0xC1CC9669)
    {
      // touche 9 –> Robot recule et tourne à droite
      moteur(250, HIGH, 150, HIGH);
    }
    reception_ir.resume(); // reçoit le prochain code
  }
}

Et voici le résultat en vidéo :

Pilotage du robot 2WD à partir d’une télécommande infrarouge
Catégories :Arduino, Matériel Étiquettes : , ,
  1. Aucun commentaire pour l’instant.
  1. 14/11/2015 à 10:47

Laisser un commentaire