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...

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.
|