L’objectif de cette activité est d’acquérir et décoder des trames de données envoyées par une télécommande à infra rouge.
ATTENTION cette télécommande fonctionne avec une pile CR2025 (ou CR2032) (non fournie)
Comment insérer la pile ?
Déplacer le verrou 1 vers la droite, et tirer sur le tiroir 2 en même temps :


Acquisition des trames
Câblage du récepteur IR
Le récepteur IR
doit être alimenté en 5V, et sa broche de données doit être connectée à un port numérique de l’Arduino capable de générer une interruption. (voir les ports numériques)
Consulter l’article sur ce type de récepteur IR VS1838B.
ATTENTION : si vous disposez d’un modèle différent, il faut chercher sa fiche technique sur Internet car le câblage est peut-être différent. Toute erreur de câblage sur ce type de composant peut lui être fatal !!!
Télécharger la datasheet du récepteur VS1838B.
Toutes les réponses seront apportées dans un document réponse numérique (MS Word ou LibreOffice Writer)
… à envoyer au professeur …
Réaliser le câblage du récepteur sur l’Arduino, en prendre une photo et la coller dans le document réponse.
Pour l’Arduino UNO, nous choisissons le port numérique 2 (car il peut être utilisé pour gérer des interruptions).
Programme Arduino
Le programme permet d’acquérir le signal physique émit par la télécommande tel qu’il a été reçu par le récepteur.
Copier puis coller le programme ci-dessous dans l’éditeur de l’IDE Arduino
Code
const byte interruptPin = 2;
const byte lt = 200;
volatile byte state = 0;
volatile byte trame[lt];
volatile unsigned long ttime[lt];
volatile byte i = 0;
volatile unsigned long startt;
const unsigned long tlimite = 150000;
volatile unsigned long t;
void setup() {
pinMode(interruptPin, INPUT_PULLUP);
attachInterrupt(digitalPinToInterrupt(interruptPin), front, CHANGE);
Serial.begin(115200);
reset();
}
void loop() {
}
void front() {
t = micros();
if (i == 0) {
startt = t;
}
if (t-startt > tlimite) {
afficher();
}
else {
trame[i] = state;
ttime[i] = t-startt;
i++;
state = 1-state;
trame[i] = state;
ttime[i] = ttime[i-1];
i++;
if (i >= lt) {
afficher();
}
}
}
void afficher() {
for (int j = 0; j<lt ; j++){
if (trame[j] < 2) {
Serial.print(ttime[j]);
Serial.print("\t");
Serial.println(trame[j]);
}
}
reset();
}
void reset() {
for (int j = 0; j<lt ; j++){
trame[j] = 255;
ttime[i] = 0;
}
state = 0;
i = 0;
}
Procédure d’acquisition
Après avoir téléversé le programme dans le microcontrôleur :
- Ouvrir le moniteur série de l’IDE Arduino,
ATTENTION : depuis la version 2 de l’IDE Arduino, le moniteur série ne permet plus de faire ce qui suit.
Préférez utiliser un terminal série différent, comme CoolTerm ou YAT par exemple.
Utilisation de CoolTerm
Cliquer sur Options :
- Dans la catégorie Serial Port :
- Sélectionner le port série (celui auquel est relié l’Arduino)
- Régler la vitesse de transmission (115200 bauds pour cette activité)
- Dans la catégorie Data Handling :
- Décocher la case Convert Non-printable Characters

Cliquer sur Connect pour démarrer la communication Ordinateur↔Arduino
Si la connexion est réussie, des informations apparaissent en bas de la fenêtre :

Et les premiers messages dans la fenêtre principale …
Utilisation de YAT
Télécharger la
version portable :
YAT-x.x.x_x64_(64-bit)_binaries.zip
Dézipper l’archive
Lancer le fichier YAT.exe
- Sélectionner le port série (celui auquel est relié l’Arduino)
- Régler la vitesse de transmission (115200 bauds pour cette activité)

Cliquer sur Ok pour démarrer la communication Ordinateur↔Arduino
Si la connexion est réussie, des informations apparaissent en bas de la fenêtre :

Et les premiers messages dans la fenêtre principale …
- Appuyer sur une touche de la télécommande (en face du récepteur),
- Copier les données du terminal série (Ctrl+A puis Ctrl+C),
ATTENTION à bien copier TOUTES les données de la trame
- Ouvrir un logiciel de type tableur (MS Excel, LibreOffice Calc, …),
- Coller les données sur une feuille de calcul (Ctrl+V),
- Insérer un graphique de type XY (voir tutoriel Faire un graphique avec un tableur) avec ces valeurs,
- Ôter les valeurs inutiles (surtout en fin d’acquisition),
- Imprimer la courbe ou bien la copier dans le document numérique permettant de l’annoter.
Décodage
Consulter la documentation sur le protocole NEC.
Travail demandé
A l’aide des information données sur la datasheet du récepteur, donner la fréquence porteuse du signal IR.
Relever sur la courbe acquise avec l’Arduino la durée de la séquence de start. Comparer avec celle spécifiée dans la datasheet.
À l’aide de la documentation sur le
protocole NEC.,
décoder la trame (annoter les valeurs logiques directement sur la courbe imprimée ou copiée).
En déduire l’adresse de la télécommande (au format hexadécimal)
Déterminer le code de la commande associée à la touche 5.
Autres protocoles
Il n’existe pas qu’un seul protocole pour les télécommande IR, et ils prennent souvent le nom de la compagnie qui l’a développé :
- Protocole Denon
- Protocole Sharp
- Protocole Sony*
- Protocole RC5 (Phillips)
- …
Ressources :
- Article Elektor
- https://www.positron-libre.com/electronique/apprendre/protocole/code-rc5/code-rc5.php
- https://civade.com/images/ir/AVRX1000_E300_IR_CODE_V01.pdf
-
Trouvez chez vous autant de modèles de télécommande à infrarouges possibles.
Tester l’acquisition de trames brutes avec chacune des télécommande et identifier le protocole utilisé.
Avec une bibliothèque Arduino
Il existe des bibliothèque pour Arduino qui permette de réaliser automatiquement le décodage.
Installer la bibliothèque IRremote.
Mettre en œuvre cette bibliothèque pour chacun des modèles de télécommande.
Cette bibliothèque permet également d’émettre des signaux IR. Pour cela, il faut câbler à l’Arduino une LED infrarouge.
Imaginer un usage possible d’une telle télécommande (allumer/éteindre plusieurs appareils en une seule opération, …) et réaliser le câblage et le programme Arduino associé.