lundi 5 août 2013

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

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.



Librairie 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 librairie "IRRemote" de Ken Shirriff, ce qui va énormément nous simplifier la tâche.

Une fois la librairie IRRemote installée, nous utilisons le sketch "IRrecvDump":  il s'agit d'un des exemples distribués avec la librairie.  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 à quatre reprises sur le bouton "1" de ma télécommande...



Je constate que ma télécommande utilise le protocole "RC5".  Étrangement, le bouton 1 émet parfois la valeur hexadécimale 801, et parfois la valeur hexadécimale 1.  Mon sketch devra donc tenir compte de ces deux possibilités.  É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 0 à 9 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 à 8 permettent d'allumer et éteindre 8 LEDs branchées aux sorties 2 à 9 de l'Arduino.

Yves Pelletier (Twitter: @ElectroAmateur)

7 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. Ce commentaire a été supprimé par l'auteur.

    RépondreSupprimer
  4. 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
  5. 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

Related Posts Plugin for WordPress, Blogger...