Télécommande IR

L’objectif de cette activité est d’acquérir et décoder des trames de données envoyée par une télécommande IR.

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 le 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 par exemple.
  • 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,
    Capture d'écran
  • Ô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.
×

 

 

 

Laisser un commentaire

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