Infrarouge IR: Détecteur de présence avec Arduino #2/2

Objectifs

  • Savoir fabriquer son propre détecteur IR
  • Savoir transformer une télécommande IR en un émetteur IR
  • Comprendre un exemple de schéma électronique d’une télécommande IR
  • Savoir utiliser plusieurs cartes Arduino dans un projet
  • Savoir configurer l’émetteur et le récepteur IR
  • Et autres astuces pratiques

Principe de fonctionnement

Le détecteur consiste à indiquer la présence ou l’absence d’un obstacle positionner entre l’émetteur (Tx) et le récepteur (Rx). Le montage est constitué des éléments suivants :

Côté Tx : Une carte Arduino qui envoie en permanent un signal d’activation qui dure 100 ms chacun les seconde à la diode IR émettrice. Le pin 11 de l’Arduino est utilisé comme sortie numérique pour l’envoi du signal. Nous avons utilisé une télécommande IR transformée en un émetteur (IR), elle envoie un code durant le signal d’activation.

Côté Rx : Il est constitué d’un récepteur basique IR lié à la carte Arduino via l’entrée numérique 11. La carte Arduino est en écoute permanente du code envoyé par le Tx. Au moment de la réception du code, on allume la LED verte puis on indique l’absence de l’objet entre le Tx et Rx via la liaison série. Lorsque le signal est absent, on éteint la LED puis on indique la présence de l’objet via l’interface série (envoie d’une chaîne « présence de l’objet »).

Comment transformer une télécommande IR en un émetteur ?

En réalité la télécommande est un émetteur IR contrôlé d’une façon manuelle. L’envoi d’un code nécessite l’appui d’une façon manuelle sur l’un des boutons de la télécommande, donc l’intervention de l’homme ! La présente application est la partie 2/2 du projet précédent (23) qui a était consacré à la détermination du tableau d’une télécommande inconnue, ici on va réutiliser la même télécommande comme détecteur de présence (voir l’image ci-dessous). On va illustrer ci-après le schéma de fonctionnement de la télécommande et apporter un modificateur pour que la télécommande transmit le code d’une façon automatique en utilisant une carte Arduino.

Le PCB de la télécommande montre la présence de 4 boutons poussoirs, un circuit intégré BA5104, un transistor et des condensateurs. On verra par la suite le document technique du composant BA5104 dans lequel on peut trouver le schéma typique d’utilisation de ce dernier ainsi son fonctionnement.

Télécommande

A quoi sert le composant BA5104 ?

Le composant BA5104 est un encodeur de télécommande principalement utilisé pour télécommande de ventilateur, filtre à air, humidificateur, chauffage et autres application dans le domaine des appareils électroménagers. Il peut contrôler au maximum 8 canaux (uniquement 4 canaux exploités par notre télécommande) pour diverses applications. En effet, le circuit utilise une technique de codage spéciale pour augmenter l’immunité au bruit. Ci-dessous les spécifications techniques du composant :

  • Tension de fonctionnement: VCC = 2.2 ~ 4.0V
  • Technique d’immunité au bruit
  • Code personnalisé 2 bits
  • 8 canaux d’entrée maximum
  • Utilise un oscillateur à cristal 455kHz
  • Oscillation de type Key-in permettant de réduire la dissipation de courant statique.
  • La porteuse 38kHz transmet la sortie (fréquence de modulation doit être égale à celui du récepteur !)
  • LED indique l’état de fonctionnement
  • Autre : Voir le datasheet BA5104

schéma bloc ba5104

pinout du composant ba5104

Schéma typique d’utilisation du BA5104

On retrouve  en effet un exemple typique du schéma électrique de la télécommande dans la page 4 du datasheet. Il faut bien noter que les entrées K1-K8 des touches sont activés niveaux bas (elles disposent des résistances de pull-up à l’intérieur du composant). Lorsque l’interrupteur est ouvert, la tension à la borne de K1-K8 est environ égale à VCC (3.3 V). Lorsqu’on ferme l’interrupteur, la tension tombe à zéro et on active l’entrée. Le circuit nécessite un oscillateur externe de 455 khz afin de construire la porteuse sur 38 khz. La sortie Dout sert à envoyer le code à la diode IR émettrice. Un transistor minu d’une résistance de 10 Ohms de puissance est indispensable (voir le schéma) afin de booster le courant à la borne de la diode.

schéma typique d'une télécommande IR

Mise à jour de la touche K3 (H3)

Nous avons constaté que les touches sont activés niveaux bas. Le contrôle automatique d’une entrée K1-K8 est possible sans faire appel à un interrupteur mécanique. L’astuce consiste à brancher un fil directement sur l’une des entrées K1-K8. Il suffit de brancher le fil à la masser (envoie d’un niveau logique « 0 » par le microcontrôleur) afin d’activer la touche, ou bien un niveau logique « 1 » pour la désactiver. Ci-dessous le branchement du fil dans la touche 3 de la télécommande. Le fil sera ensuite câblé sur la sortie 11 de la carte Arduino.

Attention : L’émetteur est plus puissance. Il faut bien isoler le signal afin d’empêcher le rayonnement d’atteindre le récepteur au moment de la présence de l’objet. De préférence d’une distance de plusieurs mètres.  L’angle de positionnement du récepteur n’a pas d’importance vue l’intensité importante du rayonnement ! Voir la vidéo pour observer visuellement un rayonnement IR  et savoir comment tester une télécommande.

PCB télécommande après modification

Programme Arduino (Tx)

#include "IRremote.h"

// Numéro du pin Tx
const int TxIR = 11; 
          
void setup()  
{
  // Initialisation
  pinMode(TxIR, OUTPUT);
  digitalWrite(TxIR, HIGH);  // Tx désactivé
}

void loop()  
{
    // Activation Tx 
    digitalWrite(TxIR, LOW);
     
    // Duée d'envoie 
    delay(100); 

    // Désactivation Tx 
    digitalWrite(TxIR, HIGH);
    
    // Durée d'attente  
    delay(1000); 
}

Programme Arduino (Rx)

#include "IRremote.h"

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

// Indicateur de présence 
const int PresFlag = 4; 

// 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();

  // Indicateur 
  pinMode(PresFlag, OUTPUT);
  digitalWrite(PresFlag, LOW);
}

void loop()  
{
  // Lecture de la télécommande 
  if (irrecv.decode(&results))
  {
    // Récupération du code   
    res_val = results.value;
    //Serial.println(res_val, HEX);
    
    if (res_val==0xE0984BB6)
    {
      digitalWrite(PresFlag, HIGH);
      Serial.println("Présence d'objet");
    }
    else
    {
      digitalWrite(PresFlag, LOW);
      Serial.println("Absence d'objet");
    }
    
    // Réception de la nouvelle valeur
    irrecv.resume();
    res_val=0; 
    
    // Temporisateur de la boucle 
    delay(100); 
  }  
}

Téléchargement

Photos du projet

Carte émetteur Tx
Carte récepteur Rx

Vidéo démonstration

Tout les projets microcontrôleur