Utiliser un récepteur infra-rouge et télécommande avec Arduino
Vidéo Tuto en anglais
Bienvenu, dans ce tuto on va voir comment interfacer un récepteur infrarouge avec la carte Arduino, on va aussi utiliser une télécommande pour envoyer un signal à l’Arduino.
Pour ceci je vais utiliser une carte Arduino UNO, un récepteur infrarouge “VS1838B” avec une télécommande générique, vous pouvez essayer avec d’autres télécommandes à votre disposition.

Le capteur “VS1838B” est très utilisé dans les appareils électroniques de nos jours, il peut recevoir plusieurs types de protocoles de communication infrarouge comme: NEC/RC5/RC6/Samsung/Panasonic… en dépendant de la télécommande utilisée.
Lors du test vous allez voir que chaque bouton un “code” ce que code peut être associé un caractère comme celui sur la télécommande ou bien une fonction que vous programmeriez sur Arduino.
Vous pouvez contrôler des LEDs, des moteurs, un petit robot… tout ce qui peut être utilisé avec la carte Arduino, bien sur le protocole IR n’est pas avancé comme le Bluetooth ou WiFi, mais il convient de savoir comment l’utiliser surtout que le capteur est un capteur passif qui n’utilise pas trop d’énergie.
Je vais aussi utiliser un afficheur LCD i2c, ce n’est pas nécessaire, mais un peu pratique pour visualiser les codes des boutons. Veuillez visiter ce lien si vous voulez savoir comment utiliser l’afficheur LCD.
Schéma de câblage
Le capteur/récepteur infrarouge a 3 broches, on branche Vcc/Gnd avec 5v/Gnd d’Arduino, puis la broche de sortie doit être branchée avec une broche digital (D).


Librairies
Le capteur infrarouge nécessite une librairie pour l’utiliser simplement, aller à l’Arduino IDE -> Outils -> Gestionnaire de librairie, et rechercher “IRremote” par “ArminJo”.

Et si vous avez l’intention d’utiliser l’afficheur LCD i2c, vous pouvez télécharger la librairie “NewLiquidCrystal” ici.
Codes
Vous pouvez copier les codes ci-dessous ou bien les télécharger ici.
Code 1
Ce code permet de visualiser la valeur hexadécimal de chaque bouton sur le moniteur série et l’afficheur LCD.
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 |
/*Ceci est un code pour tester et utiliser le capteur/récepteur infrarouge VS1838B avec un afficheur LCD i2c et moniteur série Lorsqu'on appuie sur un touche de la télécommande on peut visualiser son code Veuillez visiter SurtrTech.com pour plus d'info */ #include <IRremote.h> //Librairies #include <LiquidCrystal_I2C.h> #define I2C_ADDR 0x27 //Adresse de l'afficheur LCD i2c, peut être 0x3F #define BACKLIGHT_PIN 3 #define En_pin 2 #define Rw_pin 1 #define Rs_pin 0 #define D4_pin 4 #define D5_pin 5 #define D6_pin 6 #define D7_pin 7 int RECV_PIN = 6; //Branchement du capteur avec la carte en broches D6 IRrecv irrecv(RECV_PIN); //Initialiser les deux instances (Récepteur) et (Afficheur) LiquidCrystal_I2C lcd(I2C_ADDR,En_pin,Rw_pin,Rs_pin,D4_pin,D5_pin,D6_pin,D7_pin); decode_results results; //Résultat du décodage du signal infrarouge void setup() { Serial.begin(9600); //Démarrage Moniteur série, récepteur et LCD irrecv.enableIRIn(); lcd.begin (16,2); lcd.setBacklightPin(BACKLIGHT_PIN,POSITIVE); lcd.setBacklight(HIGH); lcd.home (); lcd.print("Press a key"); } void loop() { if (irrecv.decode(&results)) { //Lorsqu'un signal est reçu on le décode lcd.clear(); lcd.print(results.value, HEX); //Afficher la valeur du signal reçu en valeurs Hexadécimal (plus simple à exploiter) Serial.println(results.value, HEX); irrecv.resume(); // Reprendre l'attente d'un autre signal } delay(200); } |
Code 2
Ce code contient une fonction dans laquelle on a associé chaque code de bouton à soit une chaine de caractères ou un caractère qu’on affiche sur le moniteur série et l’afficheur LCD.
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 |
/*Ceci est un code à utiliser avec un récepteur infrarouge VS1838B ainsi qu'un afficheur LCD i2c ici on ajoute aussi une fonction qui attribut à chaque code Hex d'un bouton une valeur qu'on affiche sur le moniteur série ou l'écran LCD Veuillez visiter SurtrTech.com pour plus d'info */ #include "IRremote.h" //Librairies #include <LiquidCrystal_I2C.h> #define I2C_ADDR 0x27 //Adresse de l'afficheur LCD i2c, peut être 0x3F #define BACKLIGHT_PIN 3 #define En_pin 2 #define Rw_pin 1 #define Rs_pin 0 #define D4_pin 4 #define D5_pin 5 #define D6_pin 6 #define D7_pin 7 int receiver = 6; //Branchement du capteur avec la carte en broches D6 LiquidCrystal_I2C lcd(I2C_ADDR,En_pin,Rw_pin,Rs_pin,D4_pin,D5_pin,D6_pin,D7_pin); //Initialiser les deux instances (Récepteur) et (Afficheur) IRrecv irrecv(receiver); decode_results results; //Résultat du décodage du signal infrarouge void setup() { Serial.begin(9600); //Démarrage Moniteur série, récepteur et LCD Serial.println("IR Receiver Raw Data + Button Decode Test"); irrecv.enableIRIn(); lcd.begin (16,2); lcd.setBacklightPin(BACKLIGHT_PIN,POSITIVE); lcd.setBacklight(HIGH); lcd.home (); lcd.print("Press a key"); delay(2000); } void loop() { if (irrecv.decode(&results)) //Lorsqu'un signal est reçu on le décode { Serial.println(results.value, HEX); translateIR(); //On appel la fonction en dessous pour traduire le signal irrecv.resume(); //Reprendre l'attente d'un autre signal } } void translateIR() //Dans cette fonction on a associé chaque code de bouton de télécommande avec une chaine de caractères ou bien un caractère à afficher sur le moniteur série et l'afficheur LCD { switch(results.value) { case 0xEF3B295B: Serial.println(" CH- "); lcd.clear(); lcd.print("CH-"); break; case 0xD7C4FB7F: Serial.println(" CH "); lcd.clear(); lcd.print("CH"); break; case 0xF1FFE9FB: Serial.println(" CH+ "); lcd.clear(); lcd.print("CH+"); break; case 0x69C6FA7D: Serial.println(" PREV "); lcd.clear(); lcd.print("PREV"); break; case 0xDE4001F: Serial.println(" NEXT "); lcd.clear(); lcd.print("NEXT"); break; case 0x592FA519: Serial.println(" PLAY/PAUSE "); lcd.clear(); lcd.print("PLAY/PAUSE"); break; case 0x4DA7A0BF: Serial.println(" VOL- "); lcd.clear(); lcd.print("VOL-"); break; case 0x3E3D6F9: Serial.println(" VOL+ "); lcd.clear(); lcd.print("VOL+"); break; case 0xFB54EA5B: Serial.println(" EQ "); lcd.clear(); lcd.print("EQ"); break; case 0x26B9C4DD: Serial.println(" 0 "); lcd.clear(); lcd.print("0"); break; case 0x87E5C91F: Serial.println(" 100+ "); lcd.clear(); lcd.print("100+"); break; case 0xEF881E99: Serial.println(" 200+ "); lcd.clear(); lcd.print("200+"); break; case 0x264C7D03: Serial.println(" 1 "); lcd.clear(); lcd.print("1"); break; case 0x2D607981: Serial.println(" 2 "); lcd.clear(); lcd.print("2"); break; case 0x87EAA93D: Serial.println(" 3 "); lcd.clear(); lcd.print("3"); break; case 0x92DA21E3: Serial.println(" 4 "); lcd.clear(); lcd.print("4"); break; case 0x9F8ECFD5: Serial.println(" 5 "); lcd.clear(); lcd.print("5"); break; case 0x40876B7F: Serial.println(" 6 "); lcd.clear(); lcd.print("6"); break; case 0xF6027943: Serial.println(" 7 "); lcd.clear(); lcd.print("7"); break; case 0xC264BDB9: Serial.println(" 8 "); lcd.clear(); lcd.print("8"); break; case 0xB50E0A1D: Serial.println(" 9 "); lcd.clear(); lcd.print("9"); break; default: Serial.println(" other button "); lcd.clear(); lcd.print("other button"); } delay(500); } |
Categories
Yassine View All
Automation and Electrical Engineer, Electronics amateur trying to share my little projects.
