Attention: Je suis actuellement sur la V3 d’Idehack.com 🙂 Certains articles plus anciens sont en migration vers cette version. Les menus commencent à être opérationnels mais tout ne se trouve pas sur cette V3.

Pour voir et revoir les autres articles d’Idehack.com cliquez sur le lien ci-dessous

Utiliser les émetteurs et récepteurs infrarouge avec Arduino

Comment utiliser les émetteurs et récepteurs infrarouge avec l’Arduino

L’émetteur infrarouge

L’émetteur est une « LED » émettant en infrarouge ce qui va nous permettre par exemple de fabriquer une télécommande à l’aide de l’Arduino.

Dans le même état d’esprit que pour les récepteurs infrarouges, cette fois-ci ont va emmètre des signaux grâce à un émetteur infrarouge et a l’aide de la même librairie Arduino: IRremote.

Concernant le branchement de la diode infrarouge pas le choix cette fois, il faut obligatoirement la branché sur la pin 3 de l’Arduino et la précéder d’une résistance de 100 Ohms. En effet pour emmètre des signaux, il faut un signal PWM, la pin 3 en est une et est codée par défaut dans la librairie IRremote. Donc en gros, une résistance 100 ohms entre la pin 3 de l’arduino et le + de la diode infrarouge. Le – de la diode au gnd de l’Arduino.

On importe la librairie IRremote le reste est plutôt simple.

#include <IRremote.h>

IRsend emission_ir; 

void setup() 
{ 
}

void loop() 
{ 
   emission_ir.sendNEC(0x180BD9FF, 32);
   delay(2000); 
}

Je vais commenter ce code bien qu’il soit relativement court.
En premier lieu on créé une nouvelle instance le nom emission_ir vous pouvez le changer a votre guise.
Ce qui nous interesse est dans le loop. Rappelez vous avec l’article sur les récepteurs infrarouges, on avais récupérer certaines informations donc:

  • Le protocole (NEC -> sendNec).
  • Le signal émis par la télécommande: 0x180BD9FF
  • Et le codage 32 -> 32 bits

Ce code ne fais pas grand chose. Dans mon cas, il monte d’une chaine mon décodeur toute les 2 secondes. Plutôt inutile mais plaisant que celà fonctionne.
Puis a ce stade on est déja en mesure de clôner une télécommande.

Le récepteur infrarouge

A quoi ca va servir ? Bien dans un premier temps on pourrais imaginer clôner des télécommandes. Grâce aux recepteurs on en récupererais tous les signaux pour ensuite les emêttres avec avec une diode infrarouge. Et donc controler la télévision avec un arduino par exemple ou l’inverse, contrôler notre arduino avec une télécommande infrarouge. C’est en toute un moyen de communication très simple et assé fiable pour l’utiliser dans nombre d’applications.

Branchement du recepteur infrarouge à l’arduino

Les récepteurs infrarouges sont muni de trois pin contrairement aux leds infrarouges qui n’en ont que deux. Pour connecter les pins du recepteur, il faut les distinguer les unes des autres. Si vous avez la référence de votre recepteur, référez-vous à sa datasheet par sureté. Dans mon cas les pins de mon recepteurs TSOP382 étaient telles que l’illustration ci-dessous.

Vue de face et de gauche a droite: OUTPUT, GND, VCC

Pour sa connexion à l’arduino, j’ai relié l’OUTPUT à la pin 6 de l’arduino. les deux autres vcc et gnd à leurs correspondant… vcc et gnd. (5V et GND).

Analyser les signaux d’une télécommande:

Sur base de la librairie IRremote par Ken Shirriff disponible sur le github officiel, on peut analyser les signaux émis par une télécommande de téléviseur par exemple pour peu que celle-ci soit une télécommande infrarouge.

Pour commencer il faut télécharger la librairie ici et l’installer dans le dossier libraries d’arduino. Dans mon cas sous Windows Seven se sera dans: \Documents\Arduino\libraries\ OU option B passer par l’IDE d’Arduino. Lancer l’IDE, ensuite Croquis, importer la bibliothèque, add library…

Bon on y est l’IDE Arduino est lancé, la librairie est installée. on va y aller simplement et on va analyser les signaux émis par une télécommande infrarouge. Rendez vous dans le dossier de librairie arduino, dans mon cas:Arduino\libraries\Arduino-IRremote-master\examples. Et on va y ouvrir le fichier IRrecvDump.ino.

On y trouvera le sketch suivant:

  /*
             * IRremote: IRrecvDump - dump details of IR codes with IRrecv
             * An IR detector/demodulator must be connected to the input RECV_PIN.
             * Version 0.1 July, 2009
             * Copyright 2009 Ken Shirriff
             * http://arcfn.com
             * JVC and Panasonic protocol added by Kristian Lauszus (Thanks to zenwheel and other people at the original blog post)
             * LG added by Darryl Smith (based on the JVC protocol)
             */

            #include <IRremote.h>

            int RECV_PIN = 6;

            IRrecv irrecv(RECV_PIN);

            decode_results results;

            void setup()
            {
              Serial.begin(9600);
              irrecv.enableIRIn(); // Start the receiver
            }

            // Dumps out the decode_results structure.
            // Call this after IRrecv::decode()
            // void * to work around compiler issue
            //void dump(void *v) {
            //  decode_results *results = (decode_results *)v
            void dump(decode_results *results) {
              int count = results->rawlen;
              if (results->decode_type == UNKNOWN) {
                Serial.print("Unknown encoding: ");
              } 
              else if (results->decode_type == NEC) {
                Serial.print("Decoded NEC: ");
              } 
              else if (results->decode_type == SONY) {
                Serial.print("Decoded SONY: ");
              } 
              else if (results->decode_type == RC5) {
                Serial.print("Decoded RC5: ");
              } 
              else if (results->decode_type == RC6) {
                Serial.print("Decoded RC6: ");
              }
              else if (results->decode_type == PANASONIC) { 
                Serial.print("Decoded PANASONIC - Address: ");
                Serial.print(results->panasonicAddress,HEX);
                Serial.print(" Value: ");
              }
              else if (results->decode_type == LG) {
                 Serial.print("Decoded LG: ");
              }
              else if (results->decode_type == JVC) {
                 Serial.print("Decoded JVC: ");
              }
              Serial.print(results->value, HEX);
              Serial.print(" (");
              Serial.print(results->bits, DEC);
              Serial.println(" bits)");
              Serial.print("Raw (");
              Serial.print(count, DEC);
              Serial.print("): ");

              for (int i = 0; i < count; i++) {
                if ((i % 2) == 1) {
                  Serial.print(results->rawbuf[i]*USECPERTICK, DEC);
                } 
                else {
                  Serial.print(-(int)results->rawbuf[i]*USECPERTICK, DEC);
                }
                Serial.print(" ");
              }
              Serial.println("");
            }


            void loop() {
              if (irrecv.decode(&results)) {
                Serial.println(results.value, HEX);
                dump(&results);
                irrecv.resume(); // Receive the next value
              }
            }

La seule ligne qui pourrait être éventuellement modifiée est celle-ci:

int RECV_PIN = 6;

Ce qui correspond à la pin OUTPUT de votre recepteur infrarouge.

Uploadez le sketch sur votre arduino et ouvrez le moniteur série. Enfin visez votre recepteur infrarouge avec n’importe quelle télécommande infrarouge. Celle d’un téléviseur par exemple et pressez un bouton.

Vous obtiendrez un résultat comme celui-ci:

récepteurs émetteurs infrarouge Arduino

Les deux premières lignes sont les résultats qui nous intérêssent. En un, le code en hexadécimal renvoyé par la télécommande: FDB04F En deux, le protocoledécodé: NEC et son codage sur 32bits.
Notez qu’on aurai pu se satisfaire de la seconde ligne uniquement étant donné que l’hexadécimal nous y est précisé aussi.

Bien que la plupart des télécommandes soient analysable avec cette librairie, notez qu’il est possible d’avoir un protocole inconnu, voir que vous n’arriviez pas a décoder le signal émis par la télécommande. Pour ma part, TOUTES les télécommandes présente à mon domicile on fonctionnée. Je ne me suis donc pas encore penché sur un éventuel soucis de détection pour l’instant. Et c’est plutôt une bonne chose  .

Note: J’ai eu des soucis de réception les codes ne correspondaient pas alors que je pressais successivement la même touche. Après quelques heures de prise de tête il s’avère que c’étais le récepteur (bas de gamme) qui ne fonctionnais pas correctement. Après changement tout est rentré dans l’ordre.

Elegoo starter kit R3

0 commentaires

Soumettre un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *