lundi 24 juillet 2023

Contrôler un Raspberry Pi Pico avec une télécommande de téléviseur (Micropython)

Dans bien des situations, une télécommande à infrarouge constitue une bonne façon d'interagir avec le dispositif électronique que vous avez fabriqué. Dans cet article, je vous explique comment communiquer avec un Raspberry Pi Pico (programmé en Micropython) avec une télécommande à infrarouge conçue pour un téléviseur.


La télécommande

C'est généralement facile de trouver une vieille télécommande à infrarouge. Il y a quelques années,  il y en avait quatre sur ma table de salon: une pour le téléviseur, une pour le lecteur de DVD, une pour le lecteur de cassettes VHS, et une autre pour la chaîne stéréo... Au cours des années, les appareils ont été remplacés ou mis au rancart, mais la télécommande est demeurée fonctionnelle.


Lorsque vous appuyez sur un des boutons de la télécommande, une LED à infrarouge se met à clignoter. Puisqu'il s'agit d'infrarouge et non de lumière visible, vous ne pouvez pas percevoir ce clignotement à l'oeil nu. Par contre, si vous regardez la LED à travers la caméra de votre téléphone, vous devriez la voir s'allumer lorsque vous appuyez sur un des boutons (il s'agit d'une façon rapide et efficace de vérifier qu'une vieille télécommande fonctionne encore).


Ce signal infrarouge transporte un message. Ce qui vient compliquer les choses, c'est qu'il existe un grand nombre de protocoles (NEC, Sony. RC-5, RC-6, Samsung, Panasonic, etc), et la bibliothèque Micropython que nous allons utiliser ne supporte qu'un certain nombre de ces protocoles.

Le récepteur

Pour capter le signal optique émis par la télécommande et le transformer en un signal électrique pouvant être interprété par le Raspberry Pi Pico, vous aurez besoin d'un composant spécialement conçu à cette fin. Pour la rédaction de cet article, j'ai utilisé le TSOP4838 fabriqué par la compagnie Vishay. Une autre option consiste à récupérer le récepteur à l'intérieur d'un vieux téléviseur qui ne fonctionne plus (ce sera possiblement un autre modèle et vous devrez donc faire quelques recherches ou expérimentations).

Le TSOP4838 comporte 3 broches: OUT (le signal de sortie), GND et VCC. 

La façon la plus simple de brancher le TSOP4838 au Raspberry Pi Pico est celle-ci:

  • Broche OUT du  TSOP4838: Broche GP16 du Raspberry Pi Pico
  • Broche GND du TSOP4838: Broche GND du Raspberry Pi Pico
  • Broche VCC du TSOP4838: Broche 3,3 V du Raspberry Pi Pico

Pour améliorer la stabilité du circuit, on peut aussi ajouter une résistance de 100 Ω entre la broche VCC du TSOP4838 et la sortie 3,3 V du Raspberry Pi Pico, ainsi qu'un condensateur de 0,1 µF entre GND et VCC. J'ai testé les deux options sans constater la moindre différence dans le comportement du circuit.


Installation de la bibliothèque micropython_ir 

Nous utiliserons la bilbliothèque micropython_ir mise au point par Peter Hinch. Tout le répertoire "ir_rx" qui doit être copié dans la mémoire du Raspberry Pi Pico.



Identification du protocole utilisé par la télécommande

Pour écrire votre programme en Micropython, il est important de savoir quel est le protocole utilisé par votre télécommande. Si vous ne le connaissez pas, la bibliothèque micropython_ir vous offre deux façon de le découvrir:

Option 1, vous écrivez ceci dans la console REPL:

    from ir_rx.acquire import test
    test()

Option 2, vous écrivez ceci dans la console REPL:

    from ir_rx.test import test

... puis vous choisissez le protocole que vous désirez tester en écrivant test() pour tester le protocole NEC 8 bit, test(1) pour tester le protocole NEC 16 bits, etc.

Je dois dire que j'ai été un peu déçu par le manque d'efficacité de ces tests. L'option 2 s'interrompt généralement en affichant "unknown protocol" avant même que j'aie eu le temps d'appuyer sur un bouton de la télécommande.

L'option 1 me retourne beaucoup de messages d'erreurs, mais lorsque je sélectionne le protocole qui correspond à ma télécommande, des lignes montrant les valeurs hexadécimales de Data, Addr et Ctrl sont affichées (je suggère de maintenir le bouton enfoncé un certain temps, ça permet d'afficher plusieurs lignes consécutives qui sont plus faciles à repérer parmi les lignes qui affichent une erreur).

Ainsi, parmi les télécommandes que j'ai testées, j'en ai trouvé une qui fonctionne selon le protocole "Sony 20 bits", et une autre qui utilise le protocole "Samsung". Comme je le disais plus haut, plusieurs protocoles ne sont pas supportés pour l'instant. Par exemple, ma télécommande Hitachi qui m'avait été bien utile dans certains projets Arduino ne peut pas être utilisée avec micropython_ir.


Exemples de scripts

Une fois que vous connaissez le protocole utilisé par votre télécommande, c'est assez facile d'écrire un programme qui accomplira une action différente selon le bouton qui est enfoncé.

Voici, par exemple, un script qui affiche dans la console les valeurs hexadécimales associées aux boutons de ma télécommande Samsung. Les valeurs de Data et de Addr me permettent de savoir quel bouton de la télécommande a été enfoncé, et je peux ensuite modifier ce programme pour que le Raspberry Pi Pico effectue la tâche qui correspond à ce bouton (allumer une LED, faire tourner un robot vers la droite, etc.).

-

-

Le script ci-dessous est identique, mais pour ma télécommande Sony.

-

-


À lire également:

Yves Pelletier

1 commentaire: