Fabriquer une Télécommande IR pour A.P.N

 

Cette télécommande est basée sur un micro-controleur PIC12F629, et fonctionne avec une simple pile lithium CR2032 de 3V. Initialement réalisée pour piloter un CANON EOS350D (et tout les autres APN compatible avec la télécommande canon RC-1) et un NIKON D70, elle est facilement adaptable à d'autres A.P.N. sans modification de son schéma. Avant de commencer, je presenterais les techniques habituellement rencontrés comme alternative aux télécommandes d'origines...

 

  • Les télécommandes multi-standards

Habituellement, on trouve sur la toile des personnes qui ont réussie a commander leur APN à partir d'une simple télécommande "universelle" pour TV. La démarche est simple mais fastidieuse : il suffit pour chaque touche de scanner tous les codes constructeur possibles. Avec un peu de chance on arrive au déclenchement de l'APN. Mais cela est du pur hasard... Car la trame envoyée par la télécommande "universelle" est bien différente de celle envoyée par la télécommande d'origine de l'APN. Alors pourquoi ça marche ? Tout simplement par ce que le décodage des trames sur les APN est beaucoup plus simpliste que les appareils TV/Hi-Fi, on arrive donc à trouver dans les trames des télécommandes universelles un morceau de trame reconnu par l'APN.

 

  • Capturer une trame émise par la télécommande prévue

Cette méthode, très efficace, consiste à l'aide d'une photodiode et d'un oscilloscope numérique, de capturer le message qu'envoi la télécommande initialement prévue, par exemple la RC-1 de canon. Une fois la trame affichée sur l'oscilloscope, il est alors facile de connaître la fréquence de la porteuse, et de copier la séquence de bits envoyée. Cependant, il y'a plusieurs inconvénients : Il faut être équiper d'un oscilloscope numérique, d'une alimentation de table, et avoir une télécommande originale à sa disposition...

 

  • Récupérer sur la toile des fichier de configuration pour PDA...

La majeur partie des PDA sont équipés de port infrarouge, et des applications permettent justement de mémoriser un code particulier et de le reproduire. Ces configurations peuvent être sauvées dans des fichiers portant l'extension CCF. Ces fichiers se trouvent assez facilement sur la toile... On trouve même certains sites qui proposent de télécharger les fichiers CCF pour un multitude d'appareils en tout genre... C'est cette solution que nous allons utiliser pour récupérer le bon code...

 

FABRIQUER SA TÉLÉCOMMANDE PAS A PAS...

  • Première étape : Télécharger et installer le logiciel "tonto" qui permet de lire les fichier CCF. Ce logiciel libre de droit est disponible pour plusieurs plates-formes (windows, linux, unix, etc.). On le trouvera à cette adresse : http://giantlaser.com/tonto/
  • Deuxième étape : Récupérer le fichier CCF correspondant à l'appareil voulue. Étant donné que certains APN d'une même marque sont compatible avec une même télécommande, on pourra alors étendre les recherches. Par exemple, pour trouver le fichier pour l'EOS350D, on utilisera comme mot clés"eos350D CCF" ou "eos300D CCF" (ces 2 APN étant compatibles) dans son moteur de recherche préféré... Personnellement, j'ai trouvé un lien vers ce fichier dans un board de canon...
  • Troisième étape : récupérer le code de la trame dans tonto. Après avoir ouvert le fichier CCF, il suffira d'éditer les propriétés des boutons virtuels afin d'afficher le code hexadécimale. Par exemple, le code héxa pour l'eos350D est "0000 007f 0001 0001 000f 00b0 000f 0cbe" pour la fonction déclenchement retardé, et "0000 007d 0001 0001 000f 00f2 000f 0cdb" pour la fonction déclenchement immédiat. La longueur de ce code dépend de la complexité de la trame. Pour le canon, la trame se limite à seulement 2 pulses, alors que pour le nikon, le code est un peu plus complexe.
  • Quatrième étape : Interpréter le code hexadécimal. Nous allons ici décoder chaque caractère afin de déduire la trame infrarouge. Prenons comme exemple le code pour la fonction de déclenchement immédiat : "0000 007d 0001 0001 000f 00f2 000f 0cdb". Les 4 premiers blocs constituent l'entête du code. Le premier bloc "0000" signifie "code personnalisé", c'est a dire ne répondantà aucune norme utilisées habituellement pour les équipements TV/Hi-Fi. Ces "0" n'ont par d'importance. Le second bloc "007d" correspond au diviseur de fréquence. Il définit la durée de base de chaque séquence "0" ou "1", ainsi que la fréquence de la porteuse infrarouge. Nous allons dès maintenant introduire 2 variables : Fporteuse et Tbase, avec :

Fporteuse = 4145146 /dec(007d) et Tbase = 1 / Fporteuse

Ce qui nous donne : dec(007d) = 125, soit Fporteuse = 4145146 /125 = 33161 soit 33,161kHz et Tbase = 1/33,161 = 0,03015 soit 30µs en arrondissant.

Ensuite nous rencontrons le 3eme bloc et 4eme bloc. Ces 2 blocs indiquent simplement le nombre de couple de séquence dans l'entête de la trame et dans le corps de la trame. Nous avons donc un seul couple dans l'entête et un seul couple dans le corps. Enfin, nous rencontrons le message délivré !!! L'interprétation est très simple : chaque couple est composé de 2 blocs. Le 1er bloc indique la durée (en facteur de Tbase) pendant laquelle sera émis un "1" logique, et le 2nd bloc indique la durée (en facteur de Tbase) pendant laquelle sera émis un "0" logique. On peut comprendre par "1" logique l'émission de la porteuse, et par "0" logique aucune émission. Comme ces valeur sont en hexa, il faudra les convertir en décimales : dec(000f) = 15, dec(00f2) = 242, dec(0cdb) = 3291.

  • Cinquième étape : Fabriquer la trame. A partir des données ci dessus, nous allons construire le graphique de la trame en dessinant chaque couple. Nous allons donc avoir un "1" logique pendant 15x30µs = 450µs, suivi d'un "0" logique pendant 242x30µs = 7260µs, suivi d'un "1" logique pendant 450µs et pour finir, un "0" logique durant 3291x30µs = 98730µs. Sous forme graphique, ce qui représente ceci :

Le temps mort de 98730µs en fin de trame n'est pas la pour rien, en effet, on pourrait se dire qu'il n'y a plus rien après. Sauf qu'en fait, cette trame peut être envoyée en continue. Il faut donc attendre un certain temps en fin de trame avant de pouvoir l'envoyer de nouveau.

Plus haut, j'ai parlé de Fréquence de porteuse. Mais qu'est-ce exactement ? Si on commande notre LED infrarouge directement avec le signal ci-dessus, on va donc avoir une LED allumée, puis éteinte, puis allumée de nouveau puis encore éteinte. Cela pourrait marcher si le récepteurétait à quelques cm de l'émetteur, mais des que l'on s'éloignerait, ça ne marcherais plus. La raisons est simple : le rayonnement infra rouge est présent a l'état naturel sur la terre (rayon solaire), mais aussi de façon artificielle (éclairage, radiateur rayonnant, etc.). Tout ces rayonnement sont donc captés également par le récepteur qui ne va pas arriver a dissocier le rayon infrarouge délivré par la télécommande parmi les autres rayonnements. Pour résoudre ce problème, on utilise une modulation, qui consiste a ne pas émettre un signal continue durant toute la durée de transmission. Pour ce faire, nous allumons et éteignons la LED infrarougeà une grande vitesse. Cette vitesse est matérialisée par la fréquence de porteuse qui est dans notre cas 33,161kHz. Cette fréquence correspond a la période Tbase de 30µs. Donc, en 30µs; nous allons allumer et éteindre la LED une fois. La durée d'allumage et d'extinction ne sont pas égales. Pour des raisons d'efficacitéde transmission, le rapport varie entre 1/4 et 1/3. Nous utiliserons ici le rapport 1/3. Cela signifie que dans un intervalle de 30µs, la LED infrarouge sera allumée 10µs et éteinte 20µs. Finalement, on peut représenter un "1" logique de cette façon :

On remarquera que pour faire 450µs, il suffira de reproduire 15 fois l'intervalle de 30µs.

  • Sixième étape : Programmation... Sans trop rentrer dans les détails, je vais expliquer comment générer les séquences décrites ci-dessus...
    Ceux qui n'ont pas envie de se faire mal au crâne, peuvent sauter à la section de téléchargement...

    Tout d'abord, nous allons écrie la routine qui allume la LED IR durant 10µs et l'éteint durant 20µs :

    PULSE
      ; envoi un pulse de 30µs 1/3
      BSF LEDir ; allume la led IR (1µs)
      NOP ; ne rien faire (1µs)
      NOP ; ne rien faire (1µs)
      NOP ; ne rien faire (1µs)
      NOP ; ne rien faire (1µs)
      NOP ; ne rien faire (1µs)
      NOP ; ne rien faire (1µs)
      NOP ; ne rien faire (1µs)
      NOP ; ne rien faire (1µs)
      NOP ; ne rien faire (1µs)
      BCF LEDir ; eteint la led IR (1µs)
      NOP ; ne rien faire (1µs)
      NOP ; ne rien faire (1µs)
      NOP ; ne rien faire (1µs)
      NOP ; ne rien faire (1µs)
      NOP ; ne rien faire (1µs)
      NOP ; ne rien faire (1µs)
      NOP ; ne rien faire (1µs)
      NOP ; ne rien faire (1µs)
      NOP ; ne rien faire (1µs)
      NOP ; ne rien faire (1µs)
      NOP ; ne rien faire (1µs)
      NOP ; ne rien faire (1µs)
      NOP ; ne rien faire (1µs)
      NOP ; ne rien faire (1µs)
      NOP ; ne rien faire (1µs)
      NOP ; ne rien faire (1µs)
      NOP ; ne rien faire (1µs)
      RETURN ; retour au programme (2µs)


    Ensuite, nous allons écrire la routine qui va générer la séquence de 450µs :

    PULSE450us
      ; envoi un pulse de 450µs (15x30µs)
      CALL PULSE ; pulse de 30us
      CALL PULSE ; pulse de 30us
      CALL PULSE ; pulse de 30us
      CALL PULSE ; pulse de 30us
      CALL PULSE ; pulse de 30us
      CALL PULSE ; pulse de 30us
      CALL PULSE ; pulse de 30us
      CALL PULSE ; pulse de 30us
      CALL PULSE ; pulse de 30us
      CALL PULSE ; pulse de 30us
      CALL PULSE ; pulse de 30us
      CALL PULSE ; pulse de 30us
      CALL PULSE ; pulse de 30us
      CALL PULSE ; pulse de 30us
      CALL PULSE ; pulse de 30us
      RETURN

    ; retour au programme



    Maintenant, il ne reste plus qu'a écrire le code pour envoyer un trame complète :

    TRAME
      ; envoi la TRAME pour le code déclenchement immédiat
      CALL PULSE450us ; pulse de 450us
      CALL TEMPO7260 ; tempo de 7260us
      CALL PULSE450us ; pulse de 450us
      CALL TEMPO98730 ; tempo de 98730us
      RETURN

    ; retour au programme


    Pour générer les routines de temporisation, le plus simple est de faire appel à un petit logiciel qui le fait pour vous : PICDEL

    Pour envoyer la trame par infrarouge, il suffira de faire un "CALL TRAME" dans le programme principal.

    Je ne parlerais pas plus du programme, les personnes qui maîtrisent l'assembleur PIC pourront aisément faire un programme à leur sauce. Pour les autres, il vous suffira de télécharger le fichier HEX qui vous servira à programmer le PIC. Si vous n'avez pas de programmateur de PIC, vous pourrez en réaliser un en trouvant l'un des nombreux schémas en circulation sur la toile. Personnellement, j'utilise le programmateur de C. Tavernier. Vous téléchargerez l'excellent IC-Prog afin de transférer le programme contenu dans le fichier HEX dans votre PIC. Sinon, vous pouvez toujours demander autour de vous, ou à votre petit magasin d'électronique habituel, de programmer votre PIC... Enfin, en allant faire un tours sur le forum ABCelectronique, vous pourrez sûrement trouvez une âme charitable qui vous programmera votre PIC...

    Il y'a toute fois un point sur lequel je voudrais retenir votre attention : Les PIC12F629 disposent d'un oscillateur interne qui est calibré en usine. La valeur de calibration se trouve en adresse 3FF de la zone programme. Avant toute chose, il convient avec votre programmateur, de lire la mémoire du PIC et noter la valeur de calibration sur un papier. Ensuite, lorsque vous programmerez le PIC, Ic-Prog va vous dire qu'il a trouvé une valeur de calibration dans le pic et vous demande si vous voulez utiliser a la place la valeur de votre programme. A cette question répondez non. Si jamais la valeur d'autocalibrage était effacée, il vous suffira de rerentrer a la main dans IC-Prog la valeur noter a l'emplacement 3FF. Enfin, sachez que si cette valeur est définitivement perdue, le montage sera incapable de fonctionner...

 

  • Dernière étape : La télécommande coté "hardware" :

Le circuit peut être câblé, vu sa simplicité, sur une plaque "à trou", laissant ainsi la possibilité de choisir la forme du circuit (plutôt allongé, ou plutôt carré) afin de se loger au mieux dans le boîtier choisis. Le meilleur moyen pour vous procurer la LED infra rouge reste de démonter une vielle télécommande. Le transistor de commande, s'il est déssoudable pourra lui aussi être recyclé, sinon, un 2SD1055 ou équivalent sera parfait. Les autres composants pourront être de la "recup" ou issue de votre cremerie habituelle. Vous pouvez remplacer la pile lithium CR2032 par 2 piles bâtons AA ou AAA montée en série si vous ne recherchez pas la miniaturisation... Enfin, il est toujours possible de câbler le schéma avec des cms pour réduire l'encombrement.... La LED Verte est un simple témoin qui signale que l'un ou l'autre des BP a été enfoncé. Dans le cas des CANON, la LED s'allume diférement selon le BP. (déclenchement immédiat ou retardé). Cette LED ainsi que la résistance de 120 ohm pourront etre omise si vous desirez le miniturisme poussé.

Il n'y a pas d'interrupteur sur la pile, ce n'est pas un oublie. Le PIC se met en mode veille après avoir emis une salve IR. Sa consommation en mode veille est inferieure 100nA. Ce qui théoriquement, necessiterait 260ans pour vider une pile lithium CR2032 de capacité 230mAh.

La portée dépend de plusieurs facteurs : l'état des piles, la qualité de la diode IR, et la sensibilité de l'appareil a commander. Les tests effectués sur EOS350D fonctionnaient à tout les coups jusqu'à 5/6m. Au delà, l'appareil déclenche de façon approximative.

Enfin, pour augmenter la portée, il est possible de mettre 2 diodes IR en parallèle. Il faudra également remplacer les 100µF par des 220µF, et mettre une 1ohm a la place de la 3,3.

 


La simplicité du schéma autorise sa réalisation sur une plaque à trous...

 

Dossier de réalisation : Un internaute qui a réalisé cette télécommande, a eu la gentillesse de réaliser un dossier de fabrication contenant le typon, et les explication pour integrer la télécommande dans un boitier. Ce dossier est disponible ici !

 

Téléchargement !

  • Programme source et assemblé pour la commande des APN CANON EOS300D et EOS350D, ainsi que tout les modèles compatibles avec la télécommande RC-1. L'un des bouton poussoir sert au déclenchement immédiat, et l'autre au déclenchement retardé.

    TELECHARGER !

  • Programme source et assemblé pour la commande du NIKON D70/D70s (non tester sur version 70s). Les deux boutons poussoir ont la même fonctions.

    TELECHARGER !

Cette page a été affichée fois par visiteurs depuis septembre 2005.