Arduino créer une télécommande infrarouge

13011

Aujourd’hui on va apprendre à comment créer une télécommande arduino.
On ne va pas créer réellement une télécommande, mais utiliser une led infrarouge pour commander un appareil.

TutoLedEmetrice_circuit

 

// Made By https://retroetgeek.com

#include <IRremote.h>
#define RECV_PIN 11
#define BOUTON_PIN 7

bool boolBouton = 0 ;

int codeType;
int codeLen;
// pour recevoir sur l'ir PIN 11
IRrecv irrecv(RECV_PIN);
decode_results results;

// pour envoyer sur l'ir PIN 3
IRsend irsend;

void setup()
{
  Serial.begin(57600);
  irrecv.enableIRIn(); // Start the receiver
  pinMode(BOUTON_PIN,INPUT);
}

void loop()
{
  receiveCode();

  if(digitalRead(BOUTON_PIN)== HIGH && boolBouton == 0){
    Serial.println("bout");
    // Code decimal,Type,Bits
    sendCode (16753245,NEC,32);
    boolBouton = 1 ;
  }
  else if (digitalRead(BOUTON_PIN)== LOW){
    boolBouton = 0 ;
  }
}

void receiveCode(){

  // catch IR
  if (irrecv.decode(&results))
    {
      //recupere le type de codage, la logueur
      int codeType = results.decode_type;
      int codeLen = results.bits;
    Serial.println("-------------------");
    Serial.print("ValueHex ");   
    Serial.println(String(results.value, HEX));
    Serial.print("ValueDec ");  
    Serial.println(results.value);
    Serial.print("CodeLen ");  
    Serial.println(codeLen);
     irrecv.resume(); // Receive the next value

    // De quel type est le signal IR ?
   if (codeType == UNKNOWN) {
      Serial.println("Unknow Type");
    }
    else {
      if (codeType == NEC) {
         Serial.println("Type NEC ");
      } 
      else if (codeType == SONY) {
        Serial.println("Type SONY ");
      } 
      else if (codeType == PANASONIC) {
        Serial.println("Type PANASONIC ");
      }
      else if (codeType == JVC) {
        Serial.println("Type JVC ");
      } 
      else if (codeType == SAMSUNG) {
        Serial.println("Type SAMSUNG ");
      } 
      else {
        Serial.print("Unexpected codeType ");
        Serial.print(codeType, DEC);
        Serial.println("");
      }
    }
  }  
}

void sendCode (long codeValue , int codeType , int codeLen){
  if (codeType == NEC) {
      irsend.sendNEC(codeValue, codeLen);
      Serial.print("Sent NEC ");
      Serial.println(codeValue, HEX);
  } 
  else if (codeType == SONY) {
    irsend.sendSony(codeValue, codeLen);
    Serial.print("Sent Sony ");
    Serial.println(codeValue, HEX);
  } 
  else if (codeType == PANASONIC) {
    irsend.sendPanasonic(codeValue, codeLen);
    Serial.print("Sent Panasonic");
    Serial.println(codeValue, HEX);
  }
  else if (codeType == JVC) {
    irsend.sendJVC(codeValue, codeLen, false);
    Serial.print("Sent JVC");
    Serial.println(codeValue, HEX);
  }
  else if (codeType == SAMSUNG) {
    irsend.sendSAMSUNG(codeValue, codeLen);
    Serial.print("Sent SANSUNG");
    Serial.println(codeValue, HEX);
  }
}

En matériel il nous faut :

  • 1 arduino
  • 1 capteur infrarouge VS1838B
  • 1 led infrarouge émettrice
  • 1 résistance 330Ω
  • 1 bouton et une résistance

Pour le câblage du récepteur, la branche 1 de l’infrarouge est le signal reçu branché sur le pin 11 de l’arduino, la branche 2 le gnd et la branche 3 le 5V.
Pour la led émettrice je branche le coté positif sur le pin 3 de l’arduino, le coté négatif relié à une résistance elle même relié à la masse.
Le bouton est branché au pin 7 de l’arduino.

Pour le code on se base sur la librairie IRremote déjà utilisé pour le capteur VS1838B.
J’appelle la librairie, je définis le pin de réception infrarouge à 11 avec “#define RECV_PIN 11” et je n’oublie pas le bouton au pin 7.

J’ai quelques variables que je vais utiliser plus tard comme boolBouton pour éviter que le bouton d’active plusieurs fois ainsi que des variables utilisés pour les données IR.

On active l’ir en réception avec “IRrecv irrecv(RECV_PIN)” sur le pin 11 ici et encore une variable pour les données réceptionnées “decode_results results ” .

Pour utiliser l’IR en émission on appelle “IRsend irsend”, mais ici pas de choix de pin, le pin 3 sera utilisé.

Partie setup , on active le sérial, on démarre la réception IR avec “irrecv.enableIRIn()” et on met le bouton en mode INPUT.

Dans la boucle j’ai une première fonction, receiveCode qui se charge de réceptionner les données IR et afficher les informations que l’on à besoin pour émettre la même valeur.
Dans La fonction on récupère les informations de données transmises, le type de donnée et la longueur en bit.
On aura besoin de la valeur décimale transmise et non la valeur hexadécimale, on fait bien sur attention au type de donnée (NEC,SONY, etc … )
Suivant les modèles on pourra ou non utiliser cette librairie , je t’invite à regarder les exemples de la librairie car il y à plus de type.

On retourne à notre boucle loop, j’ai après la fonction une condition il qui contrôle le passage du bouton à l’état HAUT.
A l’état haut j’appelle la fonction sendCode qui inclus les valeurs que l’on a récupéré avec la fonction receiveCode, on aura noté toutes les valeurs des IR que l’on souhaite utiliser et il suffira d’appeller la fonction avec les valeurs.

Dans la fonction qui envoie les données on va aiguiller la valeur au bon système d’envoi ( NEC, SONY,etc … )

Il n’y a rien de compliqué, tu récupère les informations IR et tu les utilises a bon escient pour les transmettre.

Télécharger le code :

N’hésitez pas à poser vos questions sur les réseaux sociaux de la chaîne instagramtwitter , facebook ,youtube ; si vous ne comprenez pas certaines parties du tutoriel n’hésitez pas , me dire ce que vous aimeriez que je crée pour en faire des vidéos tutoriel  et à partager les projets que vous aimeriez créer etc…

Comme toujours allez sur la page de C’est quoi Retro et Geek pour connaître tout ce que je recherche à faire sur la chaîne.

Merci les RetroGeeker et RetroGeekeuse