lundi 5 août 2013

Contrôler un Arduino avec une télécommande recyclée

Cet article a été mis à jour le 6 mars 2021.

Si vous êtes comme moi, vous disposez d'une assez grande quantité de télécommandes ayant jadis servi à contrôler des appareils aujourd'hui désuets ou hors d'usage, voire même disparus.  Ces télécommandes peuvent facilement servir à contrôler un Arduino à distance




Capteur:

Il vous faut un capteur de signaux infrarouges modulés à 38 kHz (c'est sur cette fréquence qu'émettent la plupart des télécommandes, mais certaines émettent à 56 kHz).  J'ai utilisé le TSOP4836 de Vishay, mais d'autres modèles feront tout aussi bien l'affaire.  Vous pouvez même en récupérer un à l'intérieur d'un vieux magnétoscope, téléviseur, etc.  Un simple phototransistor ne conviendrait pas, car il serait sensible à tous les signaux infrarouges et pas seulement ceux qui sont modulés à 38 kHz.

Voici un schéma du circuit recommandé dans la fiche technique du TSOP4836.  Si vous utilisez un autre capteur, le circuit adéquat pourrait être un peu différent (référez-vous à la fiche technique).  Ce n'est pas précisé sur le schéma, mais la broche 1 ("out") du capteur est branchée à l'entrée 11 de l'Arduino.



Bibliothèque IRRemote:

Lorsqu'on appuie sur un bouton de la télécommande, cette dernière émet une série d'impulsions très rapides sous forme d'infrarouge.  Pour que l'Arduino soit en mesure de décoder les signaux reçus par le détecteur, nous utiliserons encore une fois la bibliothèque "IRRemote" de Ken Shirriff, ce qui va énormément nous simplifier la tâche. Il est possible d'installer cette bibliothèque par l'entremise du gestionnaire de bibliothèque de l'IDE Arduino.

Une fois la bibliothèque IRRemote installée, nous utilisons le sketch "IRrecvDump":  il s'agit d'un des exemples distribués avec la bibliothèque.  Ce sketch va nous permettre:
1)  de vérifier que notre circuit récepteur fonctionne correctement
2)  d'identifier le protocole de communication utilisé par notre télécommande
3)  d'identifier le message associé à chaque bouton de notre télécommande

Après avoir téléchargé le sketch "IRrecvDump" dans l'Arduino et ouvert le moniteur série, voici ce que j'ai obtenu en appuyant sur le bouton "1" de ma télécommande...





Je constate que ma télécommande utilise le protocole Panasonic.  Lorsque j'appuie sur le bouton 1, le signal infrarouge émis par la télécommande correspond à l'adresse 0x8 et à la commande 0x10.  Évidemment, j'ai trouvé la valeur émise par chacun des boutons (du moins, de ceux que j'avais l'intention d'utiliser).

Programmation d'un sketch:

Le sketch "IRrecvDump" m'a servi de point de départ pour rédiger mon propre sketch (ci-dessous), qui réagit aux boutons 1 à 4 de ma télécommande:  lorsqu'on appuie sur un bouton, son numéro est affiché sur le moniteur série.  De plus, les boutons 1 à 4 permettent d'allumer et éteindre 4 LEDs branchées aux sorties 2 à 5 de l'Arduino.

Yves Pelletier (Twitter: @ElectroAmateur)

10 commentaires:

  1. Merci pour ce tuto, j'ai démonté un récepteur infrarouge sur un vieux lecteur DVD, la puce est aussi une Vishay, ce n'est pas tout à fait le même modèle mais ça fonctionne parfaitement avec le montage indiqué ici et avec la télécommande d'origine. Je ne pensais pas que c'était aussi simple.
    Je vais m'amuser avec des relais pour allumer des lampes avec la télécommande.

    RépondreSupprimer
  2. j'ai tout bien suivi, mais quand j'arrive sur le moniteur il ne se passe rien.
    Quelqu'un pourrait_il m'aider ?

    RépondreSupprimer
  3. tuto très intéressant, cependant j'ai une erreur lors de la compilation, ma telecommance utilise le protocole NEC j'ai donc fais les modifs dans ce sens, mais a chaque fois il me met "FFA857 was not declared in this scope"

    je ne sais pas quoi faire pour remedier au probleme.

    RépondreSupprimer
    Réponses
    1. J'ai résolu le problème, il faut bien mettre "0x" devant le code de la télécommande pour annoncer le système hexadécimal. Merci pour l'aide Blumax.

      Supprimer
  4. Bonsoir j'ai une erreur de compilation je ne sais pas d'où vient elle et me s'affiche comme ça :
    "TKD2" was not declared in this scope
    Int RECV_ PIN =TKD2 ;// the pin the IR receiver is connected to

    RépondreSupprimer
    Réponses
    1. RIVO MADAGASCAR1 mars 2017 à 01:26

      salut ! je crois qu'
      il te manque la librairie IR remote

      Supprimer
  5. Bonjour
    je viens de réalisé votre montage et sa fonctionne parfaitement merci.
    Je voudrai juste savoir s'il était possible de faire en sorte que les sorties restes à l'état low à chaque remise de l'alimentation.

    RépondreSupprimer
  6. Bonjour
    je viens de réalisé votre montage avec 8 relais,le seul petit soucis est que lorsque que l'on coupe l'alimentation de l'Arduino et qu'on la rebranche les sorties de l'Arduino passe a l'état High, serait il possible de faire en sorte qu'elle soit en Low.
    Merci par avance pour votre réponse.

    RépondreSupprimer
    Réponses
    1. Il suffit de faire une boucle dans le SETUP

      Supprimer