Infrarouge IR: Comment sniffer une télécommande avec Arduino #1/2

télécommandes

Problématique

Nous avons abordé dans les projets précédents les applications de la technologique IR en utilisant une télécommande constituée de 21 touches. Le tableau de codage des touches est connais d’avance. La connaissance de ce dernier nous permettrait d’affecter une tâche spécifique pour chaque touche (mise en marche d’un moteur, faire marcher une lampe, activer un ventilateur, allumer la TV, etc.). Dans le présent projet on dispose d’une télécommande IR dont on ne connais pas les codes des touches ni le tableau de codage. De plus le nombre des touches peuvent être variable. L’objectif du projet sera donc de retrouver les codes pour chaque touche.

À quoi sert de sniffer une télécommande ?

Reconnaitre le tableau de codage d’une télécommande peut être cruciale. Ci-dessous une liste non exhaustive des applications envisageables :

  • Réutiliser une télécommande dans son application : On peut trouver une télécommande facilement dans le marché ou dans un coin de la maison, mais on ne dispose pas de son tableau de codage pour qu’on puisse l’utiliser dans une autre application. On peut par exemple réutiliser la télécommande TV pour commander son application IR. La télécommande est en réalité un émetteur IR. En résumé, la télécommande peut être utilisée dans toutes applications qui contient un émetteur IR
  • Clonage d’une télécommande : Vous disposez d’une télécommande IR pour l’ouverture de votre garage. Vous voulez en avoir deux ou plusieurs, mais la télécommande vous coûte chère ou indisponible dans le marché. La solution sera de cloner la télécommande existante. Dans ce cas de figure, on peut récupérer le tableau de codage des touches de la télécommande existante et en créer une nouvelle télécommande qui fait exactement la même chose que l’originale ! L’opération nécessite la mise à jour de tableau de codage d’une télécommande existante. On verra dans un futur projet comment cloner une télécommande.
  • Exploitation des ressources d’une télécommande : Nous disposons d’une télécommande constituée par exemple de 5 touches. Uniquement deux touches utilisées dédiées à la mise en marche-arrêt d’un ventilateur. Il reste encore 3 touches inutilisables. Grâce à la connaissance des codes de ces derniers, on peut en servir pour contrôler d’autres appareils électroniques. Etc.

Schéma de principe

schéma sniffer la télécommande

Le schéma électronique est constitué :

  • D’une télécommande X : la télécommande inconnue dont on cherche à reconnaitre les codes des touches (émetteur IR)
  • D’un récepteur IR : Il convertit le rayonnement IR en un signal logique (0 ou « 1 »). Le récepteur est branché avec le pin 9 de la carte Arduino (voir les projets précédents pour plus des détails).
  • Ordinateur : Affichage du code reçu par le récepteur IR.

Lorsque l’utilisateur appuie sur une touche « x » de la télécommande, cette dernière envoie un code composé de plusieurs octets au récepteur IR se forme de rayonnement infrarouge. Le récepteur convertit le signal IR en un signal électrique logique se forme des « 0 » ou « 1 ». La carte Arduino permet de convertir la suite binaire en un code composé de plusieurs octets. Dans le cas idéal, la carte Arduino retrouve exactement le même code envoyé par la télécommande. En réalité, il peut avoir des erreurs liées à la transmission (faible signal IR, mauvais angle de transmission, etc.). Donc il faut faire une série d’envoi pour être sure du code de la touche actionnée.

La carte Arduino renvoie le code via la liaison série à l’ordinateur en format hexadécimal. En effet, on peut observer visuellement le code envoyé lorsqu’on appuie sur une touche de la télécommande. La manoeuvre nous permettra de retrouver facilement le code de la touche ! On peut réitérer l’opération pour toutes les touches et dresser le tableau de codage de la nouvelle télécommande.

Connaissances à priori

  • La vitesse de transmission UART : Souvent 9600 bauds. C’est possible de scruter la vitesse pour trouver la bonne vitesse en utilisant l’interface série de la carte Arduino.
  • La fréquence d’émission

Télécommande x

On dispose de la télécommande inconnue ci-dessous composée de quatre touches. OFF, ON/SPEED, TIMER, OSCILLATOR. L’objectif sera de retrouver le code correspondant.

télécommande nouvelle

Tableau de codage de la télécommande x

Touche

Code (HEX)

OFF 0xA32AB931
ON/SPEED 0x143226BD
TIMER 0xE0984BB6
OSCILLATOR 0x39D41DC6

La télécommande x génère un code sur 4 octets (8 valeurs HEX) (voir la vidéo de démonstration)

exemples de codes

Programme Arduino

#include "IRremote.h"

// Numéro du pin sortie du récepteur 
long int res_val;
const int receiver = 11; 

// Déclaration d'un objet IRrecv
IRrecv irrecv(receiver);           
decode_results results;            

void setup()  
{
  // Initialisation interface série 
  Serial.begin(9600);
    
  // Init du récepteur 
  irrecv.enableIRIn();
}

void loop()  
{
  // Lecture de la télécommande 
  if (irrecv.decode(&results))
  {
    // Récupération du code   
    res_val = results.value;

    // Transfert à l'interface série 
    Serial.println(res_val, HEX);
    
    // Réception de la nouvelle valeur
    irrecv.resume();

    // Temporisateur de la boucle 
    delay(1000); 
  }  
}

Téléchargement

Photos du projet

Comment sniffer une télécommande IR (3)

Comment sniffer une télécommande IR (2)

Comment sniffer une télécommande IR (1)

Vidéo démonstration

Tout les projets microcontrôleur