Emettre un signal infrarouge : Arduino nano et TSAL6100 5mm 940nm

Arduino-nano-IR-TSAL6100

Nous avons appris à lire un signal infrarouge, à ce point vous devriez avoir noté le code émis par la télécommande que vous essayez de copier. Attaquons-nous donc maintenant à l’émission de ce signal infrarouge : Ca sera la partie la plus facile, mais avec les pièges les plus idiots, malheureusement.

 

Cet article fait partie d’une série en plusieurs parties :

Partie 1 : Lire et émettre un signal radio 433MHz
Partie 2 : Lire un signal infrarouge
> Partie 3 : Emettre un signal infrarouge
Partie 4 : Communication entre un Raspberry Pi et un Arduino

 

Rassemblons les morceaux

Cette expérience sera peut être une des moins onéreuses avec un total de 8$, peut être 10$ si on rajoute le prix des câbles jumper… Voici la liste de courses :

  • Un Arduino Nano : 4$ chez banggood (comme toujours : armez-vous de patience pour la livraison).
  • Un fer à souder et du fil, car l’Arduino vient avec ses headers non soudé.
  • Quelques câbles jumper femelle-femelle et femelle-mâle.
  • Une LED infrarouge, j’ai choisi la TSAL6100 (940nm), environ 2$ les 10 sur ebay
  • Un transistor, j’ai préféré un PN2222, environ 1$ les 50 sur banggood
  • Une résistance, j’ai presque envie de dire quelconque. J’ai pris du 560ohms, mais 470 fera très bien l’affaire. Plus haut, vous diminuerez la portée de l’émetteur. Pour ne pas vous embêter la vie, prenez un bon gros kit varié à 3.70$ de chez banggood, vous avez de quoi vous amuser avec ça !

 

Préparation du hardware

Disclaimer : Toujours dans un esprit de transparence, je rappelle que je me suis largement inspiré de ce tutoriel d’Adafruit. Et comme précédemment, le montage est simple :

 

Comme je le disais : plutôt simple ! On veut utiliser un transistor parce que l’arduino ne sait pas délivrer assez de courant pour alimenter la LED infrarouge. Précisons toutefois qu’on veut lui lancer une série de "bursts" puissants (comme un code barre, rappelez-vous l’article précédent), qui en temps normal feraient griller la LED. Seulement comme ce sont de petites impulsions de quelques micro secondes ça ira bien !

Pour plus d’informations complémentaire sur comment un transistor permet d’amplifier le courant émis, je vous renvoie à la lecture de cet excellent article complet :
https://couleur-science.eu/?d=2015/11/04/19/27/17-comment-fonctionne-un-transistor.

Vous pouvez aussi vous documenter du côté d’OpenClassrooms :
https://openclassrooms.com/courses/l-electronique-de-zero/l-amplification-d-un-signal

Le mot clef à retenir est qu’on construit un "driver circuit", ou circuit d’interface. Mais là, c’est une autre histoire à raconter et ce n’est pas l’objet de cet article 😉

On change de bibliothèque : IRLib

Hypothèse de départ : Je vais supposer dans la suite de ce tutoriel soit que vous avez lu le précédent sur la lecture d’un signal infrarouge, ou que ce point ne fait plus de secret pour vous !

Dans le précédent tutoriel j’avais choisi d’utiliser la bibliothèque IRremote parce que je trouvais leurs exemple plus faciles à faire fonctionner "out of the box". Là, pour l’émission, c’est IRLib qui remporte ma préférence… C’est complètement arbitraire, et je serais ravi de remettre cette préférence en jeu si quelqu’un arrive à me convaincre qu’il y a encore plus facile ( je ne suis pas un feignant, j’aime juste optimiser 😉 ).

Télécharger la bibliothèque IRLib

Pour émettre un signal, prenez un des codes que vous avez lu précédemment. Par exemple, voici un des codes hexa que j’ai noté et qui sert à éteindre ma télévision LG : 0x20DF10EF (Ce n’est pas la même valeur que dans mon précédent article). Ce code hexa était

Pour notre test, on va se servir de cet exemple qui émettra le signal à chaque fois qu’on écrira quelque chose dans le moniteur série. Voici donc le code  :

#include <IRLib.h>
IRsend My_Sender;
void setup()
{
  Serial.begin(9600);
}
void loop() {
  if (Serial.read() != -1) {
    //send a code every time a character is received from the serial port
    // LG On/Off
    My_Sender.send(NEC,0x20DF10EF, 32);
  }
}

Vous noterez également qu’aucun PIN n’est spécifié ! C’est normal, la pin de sortie par défaut de la bibliothèque IRLib est le PIN D3, soit celui indiqué sur le schéma plus haut.

 

Vérifier que la LED émet bien

Téléchargez ce code dans votre arduino, puis lancez le moniteur série une fois le téléchargement terminé. Tapez-y quelque chose, et observez quelque chose d’amusant : Filmez votre LED ! Votre oeil ne peut pas voir l’infrarouge, mais un objectif de caméra si. Avec mon iPhone ça ne fonctionne qu’avec la caméra de face, mais voici ce que vous devriez voir à travers votre smartphone :

Pour autant, il y a ce piège un peu idiot dont je parlais en introduction. Ce piège concerne l’angle des LED infrarouge… Si vous observez une LED branchée sur un circuit quelconque, vous verrez que de côté vous verrez à peine la lumière alors que à la verticale, vous vous brûlerez quasiment la rétine.

C’est lié à ce qu’est dans le fond une LED. L’espèce de coque transparente ne sert qu’a diffuser la lumière émise par la vraie LED qui elle, est microscopique :

 

Ca atténue forcément l’angle d’attaque de la lumière, qui peut varier en fonction du type de LED :

En règle générale, choisir c’est renoncer : si on veut plus large on renonce à la portée, si on veut plus de portée on renonce à la largeur du faisceau. Les LEDs du marché sont plutôt de type 2 dans le schéma plus haut. Leur angle est assez étroit, alors pour être certain que votre test fonctionne le mieux est encore de vous coller au récepteur infrarouge de votre télévision pour au moins éliminer cette hypothèse.

De mon côté pour augmenter mes chances de viser juste (je dois contrôler ma TV ET mon home cinéma, deux appareils potentiellement espacés) j’ai opté pour deux LEDs infrarouge espacées de 20cm dans ma boite  :

 

Conclusion

A ce stade, vous devriez être en mesure d’émettre un signal radio ainsi qu’un signal infrarouge. Dans un prochain article on va s’intéresser à comment faire communiquer un raspberry pi et un arduino via le port série, car vraiment ce n’est pas plus compliqué que ça ! Une application node maison pourra donc recevoir des requêtes externes et les transmettre à un arduino branché en USB.

 

Laisser un commentaire

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