vracbazar.free.fr v2

VracBazar

Pilotage d'un projecteur de diapos avec une télécommande I/R

Objectif


Si quelques amateurs d'images n'ont pas encore remisé leur projecteur de diapositives au grenier, le petit boîtier décrit ici leur permettra de le piloter avec une banale télécommande infra-rouge RC5 pour téléviseur ou assimilée.

Avant de passer à la suite, un avertissement tout de même :
VOUS tiendrez le fer à souder ! Ce montage a été réalisé et fonctionne sans problème, mais VOUS SEUL pourrez garantir le bon fonctionnement de VOTRE réalisation. Ceci dit, le projet est assez simple et ne devrait pas poser de problème à quelqu'un ayant une petite expérience de l'électronique.

Le projet en quelques mots


A l'origine :
Une observation sur le mode "pilote automatique" courant sur les projecteurs de diapos : le dispositif le plus fréquent est un petit potentiomètre qui permet d'enclencher l'avance automatique des vues, avec une temporisation comprise allant jusqu'à une trentaine de secondes. Beaucoup trop rudimentaire ...
Donc, l'idée :
Un dispositif, un "truc", permettant de piloter beaucoup plus souplement le projecteur et autorisant des temporisations bien plus longues si on le souhaite. Une contrainte : que le dispositif se connecte de manière "aimable" au projecteur (éviter la scie et le marteau).
Le résultat :
Le petit boîtier présenté ici, qui se substitue à la traditionnelle commande filaire,
- commandable à distance à l'aide d'une télécommande de téléviseur ou de lecteur de CD,
- capable de piloter le projecteur vue par vue, ou en avance automatique réglable de 10 s à 4 minutes.



La réalisation


A la base de la réalisation, une note d'application d'Atmel AVR410 "RC5 IR Remote Control Receiver" (PDF) qui propose de construire un récepteur de télécommande RC5 à base d'un capteur infrarouge SFH506-36 et d'un micro-contrôleur AT90S1200.
Au final, il ne reste pas grand-chose de la note d'application, puisque toute le décodage des signaux RC5 a été réécrit, mais le point de départ est là !
Avant d'attaquer le détail des fonctions offertes, fixons quelques contraintes librement choisies :

Compatibilité avec toute télécommande RC5
Le code RC5 est utilisé pour de nombreuses télécommandes infra-rouge : téléviseur, lecteur de CD, micro-chaîne, etc.
Très brièvement, une commande dans le protocole RC5 se décompose en deux "mots" : une adresse (Tuner, Tape, CD, Aux, ...) et une valeur (Volume+, Volume-, Play, Stop, Pause, Off, ...). On notera qu'aucune adresse ne semble prévue pour le "projecteur de diapos" ...
RC5 est une norme élaborée par Philips et Sony. De nombreuses informations sont disponibles sur Internet, mais je n'ai trouvé aucun document exhaustif ; peu importe, on fera sans ...
La contrainte ci-dessus porte sur la compatibilité RC5 uniquement ! Il existe de nombreux autres codages infra-rouge : il suffit de consulter un jour le mode d'emploi d'une télécommande dite "universelle".

Compatibilité avec les projecteurs à commande "1 contact" ou à commande "2 contacts"
De nombreux projecteurs fonctionnent avec une commande filaire à deux fils : la commande à distance est un simple bouton poussoir électrique qui permet de mettre en contact ces deux fils ; un contact court provoque l'avance du chariot de vues, un contact plus long provoque le recul du chariot. Ici, toute la subtilité consiste à doser le contact "court" et le contact "long".
D'autres projecteurs fonctionnent avec une commande "2 contacts" et 3 fils dont un commun, un contact étant dédié à la "marche avant", l'autre à la "marche arrière" : avec deux contacts distincts, on risque moins de "passer la mauvaise vitesse".

Auto-alimentation
Constaté sur tous les projecteurs essayés : la télécommande filaire est alimentée par une tension de 30 V environ ; l'appui sur la commande court-circuite deux fils, ce qui déclenche le mouvement du chariot dans le projecteur. L'idée est de pouvoir utiliser cette tension pour alimenter l'électronique du boîtier de télécommande. On conservera tout de même une possibilité d'utiliser une petite alimentation universelle 12 V externe.

En revanche, on fera l'impasse sur certaines autres contraintes que l'on aurait aussi pu se fixer ... En particulier :

Contrôle de la mise au point
Le boîtier présenté ici ne permettra pas de contrôler la mise au point. Projecteur auto-focus souhaible, par conséquent !
On peut toutefois imaginer une évolution dans ce sens : il suffit de gérer deux touches supplémentaires de la télécommande, et de commander les fils correspondants sur le projecteur.

Pas de raccordement universel
Il restera, au cas par cas, à raccorder le boîtier magique au projecteur :
- Dans le cas où le connecteur de la télécommande filaire sur le projecteur est un modèle standard (type jack par exemple), il sera alors possible de s'en procurer un pour réaliser un raccordement "propre".
- Dans le cas (le plus courant ?) où le connecteur est un modèle exotique, il sera toujours possible d'intervenir sur la télécommande filaire, sur la liaison filaire elle-même, voire sur le projecteur pour y ajouter une prise plus "classique".

Les fonctions disponibles


Les fonctions disponibles sont les suivantes :
  Pilotage automatique : 4 touches doivent permettre la marche/arrêt du pilotage automatique, et le réglage +/- du délai entre vues.
Pilotage vue par vue : 2 touches de la télécommande doivent donner accès à l'avance ou au recul vue par vue (deux touches distinctes représentent tout de même un confort par rapport au bouton unique et à l'appui court/long des classiques commandes deux fils !). Le pilotage vue par vue reste accessible même si le pilote automatique est enclenché.
  Contrôle visuel du boîtier, par une série de LEDs permettant de vérifier l'état de fonctionnement.

Les outils


Le schéma électronique et le circuit proposé ont été réalisés avec la version 4.11 Freeware de Eagle Layout Editor de CadSoft.
Se référer au site de l'éditeur pour les conditions d'utilisation du logiciel en version Freeware. Rien ne s'oppose a priori à l'utilisation de versions plus récentes.

Le logiciel du microcontrôleur Atmel AT90S1200 a été développé et compilé avec l'application AVR Studio 3.56 d'Atmel. Si vous utilisez une version plus récente, attention à la compatibilité entre le Studio et les différents modèles de micro-contrôleurs et de programmeurs. Vous pouvez aussi vous passer d'AVR Studio si vous ne retouchez pas le logiciel proposé (disponible ici sous forme de code source et sous forme compilée) et si vous programmez le micro-contrôleur depuis une autre application.

La programmation du micro-contrôleur peut être réalisée depuis AVR Studio si l'on dispose d'un programmeur compatible avec AVR Studio (programmeurs compatibles : voir la copie d'écran AVR Studio / Tools ci-dessous) ; on peut aussi programmer le micro-contrôleur depuis un port parallèle et un petit logiciel adéquat.


[Remarque : la réalisation d'un programmeur de type "AVR Prog" est décrite dans une autre note d'application Atmel AVR910 :"In-System Programming" (PDF) qui propose un schéma bâti autour d'un micro-contrôleur AT90S1200 ... dans lequel il faut commencer par charger le logiciel proposé par Atmel. Pour ma part, j'ai construit cet "AVR Prog" en programmant le micro-contrôleur requis avec une petite application et un programmeur extrêmement rustique sur port parallèle ; l'AVR Prog permet ensuite de travailler beaucoup plus confortablement depuis AVR Studio. ... Mais nous nous éloignons du sujet initial, et Internet est riche d'informations sur l'utilisation des composants Atmel]

La nomenclature des composants


Ci-dessous la nomenclature des composant nécessaires. Attention : une partie des choix a été dictée uniquement par les composants disponibles dans le tiroir ... Voir les remarques dans le tableau.

MARS 2006 : Atmel recommande d'utiliser le microcontrôleur ATtiny2313 pour les nouvelles conceptions, en remplacement de l'AT90S1200. Ce circuit est compatible pour le brochage, et pour le logiciel après des adaptation mineures documentées (PDF) chez Atmel.

Part Value
SFH506 capteur infra-rouge SFH506-36 (le -36 est important : il indique la fréquence de fonctionnement)
IC1 AT90S1200P (+ support DIL 20 broche optionnel)
IC2 7805 (prenez un modèle basse consommation compatible avec une entrée 30 V)
C1 22 pF
C2 22 pF
C3 100 nF
C4 2200 µF 50V (capacité indicative:  c'est la "batterie" du boîtier ; le + gros = le mieux)
C5 100 µF 10V
D1 1N4004 (diode "puissance" tenant 30 V en inverse ; une diode signal pourrait probablement faire l'affaire)
D2 1N4004 (idem D1)
D3 1N4004 (idem D1)
D4 1N4004 (idem D1)
D5 1N4148
JP1 4 plots de raccordement (barrette simple à découper, ou soudez les fils directement)
JP2 1 plot de raccordement (barrette simple à découper, ou soudez les fils directement)
JP3 1 plot de raccordement (barrette simple à découper, ou soudez les fils directement)
JP4 1 plot de raccordement (barrette simple à découper, ou soudez les fils directement)
JP5 1 plot de raccordement (barrette simple à découper, ou soudez les fils directement)
OK1 MCA231 (optocoupleur)
Q1 Quartz 4MHz
Q2 2N2222A
Q3 2N2219A
Q4 2N2219A
R1 10k
R2 100
R3 47k
R4 1k
R5 1k
R6 1k
R7 1k
R8 1k
R9 1k
R10 10k
R11 10k
R12 10k
R13 1M
SV1 Connecteur 10 points (barrette double à découper ; interface de programmation "In-System" du micro-contrôleur)
U$3 LED
U$4 LED
U$5 LED
U$6 LED
U$7 LED
U$8 LED
X1 Prise jack 3.5 mm mono (pour l'alimentation externe)

L'électronique


Ci-dessous le schéma complet du boîtier. Ce schéma a été conçu pour être adaptable, autant que possible : si vous ne souhaitez pas utiliser une fonction particulière, vous pouvez ne pas implémenter les composants correspondants. Immédiatement après, le même schéma commenté.

schéma complet

Comme annoncé, voici maintenant le schéma détaillé en blocs fonctionnels, et commenté :

schéma découpé en blocs fonctionnels

Bloc 1 : alimentation

Le régulateur 7805 fournit l'alimentation +5V au boîtier à partir, au choix :
- de la tension +30V provenant du projecteur
- de la tension +12V provenant de la petite alimentation externe optionnelle.

Dans le cas du +30V, le piège est bien évidemment que l'on N'A PLUS ces +30V durant les instants où l'on referme le contact du projecteur pour commander la progression des vues (le cas le plus défavorable étant le contact long pour la "marche arrière"). D'où, pour l'alimentation depuis le +30V :
- la capacité C4 qui sert de réservoir durant les phases de fermeture du contact
- la résistance R2 pour limiter le courant (sinon, la capa initialement vide ressemble beaucoup à un contact fermé ...)
- la diode D3 pour ne pas vider la capa quand le boîtier commande le projecteur

Dans le cas du +12V, on supposera qu'il y a déjà une capacité décente dans la petite alimentation et que la tension de sortie peut être présentée sans inquiétude au régulateur.

On peut supprimer D3/R2/C4 si l'on préfère utiliser systématiquement une alimentation externe.

La diode D1 protège le régulateur des inversions malheureuses de polarité.

Bloc 2 : capteur et micro-contrôleur

Le micro-contrôleur nécessite une électronique minimale pour fonctionner, à savoir :
- le quartz de 4MHz et les deux capacité de 22 pF
- le circuit de reset constitué de R1 et C3

Le connecteur SV1 sert uniquement à la programmation "in-situ" du micro-contrôleur et peut être omis si le composant Atmel est programmé sur un système externe.

Le couple R12/D5 permet de créer une tension de référence présentée sur la broche PB0 qui est l'entrée "-" du comparateur analogique intégré au micro-contrôleur, tandis que le couple R13/R3 présente sur la broche PB1 (entrée "+" du comparateur) une image de la tension disponible en entrée du régulateur. Grâce à ce dispositif, le boîtier peut vérifier qu'il n'effondre pas sa source d'alimentation en forçant trop longtemps et trop fréquemment la sortie à 0V. Ce jeu de composants peut être supprimé, mais il faut alors adapter le logiciel en conséquence.

Le capteur infra-rouge SFH506 se charge de recevoir le signal infra-rouge, de le filtrer et de le décoder pour ressortir un signal logique prêt à l'emploi. Attention, comme mentionné plus haut, au -36 qui est important car il indique la fréquence de fonctionnement du capteur.

Bloc 3 : réglages

Ce connecteur est destiné à commander les entrées PD0 et PD1 du micro-contrôleur (positionnées en pull-up par programmation).
- PD0, forcé à 0V, permet de passer en mode "commande 2 contacts" tandis que le mode par défaut est "commande 1 contact".
- PD1, commuté un instant à 0V, permet de mémoriser la dernière adresse RC5 reçue et de verrouiller le boîtier sur cette adresse (si l'on n'utilise pas cette fonction de verrouillage, le boîtier reste ouvert à toutes les sollicitations).

Bloc 4 : voyants

La LED commandée par le port PB5 clignote lorsque le boîtier reçoit un signal infra-rouge
Les 5 LEDs commandées par les ports PB4-2 et PD6-5 constituent un barregraphe qui indique le mode de fonctionnement courant du boîtier :
- La position de la LED qui clignote donne une indication sur le délai courant entre vues (de 10 s à 250 s)
- Le type de clignotement indique l'état du pilotage automatique :
    clignotement régulier : pilotage manuel
    clignotement saccadé : pilotage automatique

Bloc 5 : commande du projecteur

Il s'agit ici de la commande du contact :
- contact unique en cas de fonctionnement "pilotage 1 contact"
- contact "avance" en cas de fonctionnement "pilotage 2 contacts"
Les composants choisis doivent pouvoir supporter le +30V présent en contact ouvert, et le courant que provoque la fermeture du contact (pas de problème d'échauffement tant que le transistor de sortie est correctement saturé !).

Bloc 6 : commande du projecteur

Il s'agit ici de la seconde commande du contact :
- contact "recul" en cas de fonctionnement "pilotage 2 contacts"
Les composants choisis doivent pouvoir supporter le +30V présent en contact ouvert, et le courant que provoque la fermeture du contact (pas de problème d'échauffement tant que le transistor de sortie est correctement saturé !).
Par rapport au bloc 4, on note la présence d'un opto-coupleur qui va permettre de travailler indifféremment avec des commandes 3 fils à + commun (relier alors les points JP2 et JP4) ou à - commun (relier alors JP1 et JP3). Le MCA231 proposé ici a l'avantage de contenir un montage Darlington (sensibilité améliorée) et de supporter un fonctionnement sans composant additionnel de pull up ou down.

Si l'on ne compte utiliser que des projecteurs à commande "1 contact", ce bloc peut être supprimé sans inconvénient.

Le résultat :

Ici, le routage effectué avec Eagle n'a servi qu'à élaborer un plan d'implémentation correct des composants. La réalisation utilise un plaque Veroboard. Le contact poussoir de verrouillage de l'adresse RC5 n'est pas monté ; un jeu de LEDs en DIL a été utilisé.
La fenêtre pour le capteur infra-rouge et les LEDs est réalisée à la scie et au cutter dans un boîtier plastique standard ; une amorce de film négatif prend place au niveau de cette fenêtre pour l'esthétique et contre la poussière.



Le fichier zip du projet Eagle

Le logiciel


Le fichier source en assembleur est "raisonnablement" commenté (pour sauvegarder : clic-droit / Enregistrer le lien sous ...)

On peut y distinguer les sections suivantes :

.include "1200def.inc" : inclusion des paramètres spécifiques à l'AT90S1200

.def : affectation des registres Rnn du micro-contrôleur aux différentes variables du programme

.equ : définition de constantes

.cseg : code

Le code commence par les directives .org qui spécifient les adresses à inscrire pour chacun des vecteurs du micro-contrôleur (adresse "reset" de démarrage du code, adresses des différentes routines de gestion des interruptions)

On y trouve ensuite le code associé à la routine "reset" : il s'agit du code exécuté à l'initialisation du micro-contrôleur pour définir le mode de fonctionnement (paramétrage des broches en entrée ou en sortie, activation de timer, etc.).

Le code enchaîne ensuite directement sur la routine "main" qui initialise les variables applicatives :
- AppSystem : destinée à recevoir le code "adresse" de la dernière commande RC5 traitée
- AppCommand : destinée à recevoir le code "valeur" de la dernière commande RC5 traitée
- AppState : variable d'état de l'application
    Le bit 0 "AppPlay" à 1 indique le mode pilotage automatique
    Le bit 1 "AppNextReq" à 1 indique qu'une demande d'avance a été émise
    Le bit 2 "AppPrevReq" à 1 indique qu'une demande de recul a été émise
- Pause : définissant le délai d'avance en pilotage automatique
- MemoSystem : destinée à verrouiller (optionnellement) le code "adresse" de la télécommande utilisée

Le programme entre ensuite dans une boucle sans fin "loop" :

- Gestion des temps de récupération : suite à la commande d'un contact, le programme entre dans une brève phase de récupération (900 ms après une avance, 1200 ms après un recul) durant laquelle il refuse toute nouvelle commande du projecteur. Cette protection est virtuellement imperceptible de l'utilisateur, mais assure que le boîtier peut "recharger son accu", et assure aussi vis-à-vis du projecteur une discrimination suffisante entre deux commandes. Si la tension à l'entrée du régulateur est détectée comme insuffisante, l'application active un temps de récupération double.

- Prise en compte des demandes de verrouillage de l'adresse RC5

- Traitement des commandes reçues, sans considération du temps de récupération
    Commande "arrêt du pilotage automatique" (Stop)
    Commande "délai plus élevé" (Volume+)
    Commande "délai moins élevé" (Volume-)

- Traitement des commandes reçues, si le temps de récupération est terminé
    Commande "lancement du pilote automatique" (Play)
    Commande "vue suivante" (Next)
    Commande "vue précédente" (Previous)

- Gestion du pilote automatique s'il a été enclenché

- Gestion des sorties
    Contact(s) de commande du projecteur
    LEDS ; les LEDs sont commandées par impulsions brèves pour économiser la courant.

On trouve plus loin le code de gestion de l'interruption INT0, sur laquelle est cablée la sortie du capteur infra-rouge. Cette routine "int0_irq" travaille en détection de fronts (elle reprogramme dynamiquement le front de détection d'interruption), attend les débuts de trame repérés par un front suivant un état stable significativement long, puis réceptionne les bits successifs d'une trame RC5 avant de d'inscrire dans les variables "System" et "Command" les valeurs reçues.
Cette routine de décodage RC5 est finalement totalement différente de celle proposée dans la note d'application d'Atmel, qui ne fonctionnait pas sous interruption (ce qui rendait beaucoup moins confortable la gestion simultanée d'autres entrées-sorties).

La dernière section de code correspond à la gestion des interruptions du Timer0. Cette routine "timer0_irq", à partir des interruptions du timer, décompte les 3 compteurs applicatifs de gestion du temps :
- CountDown64us : décompte pour les bits RC5
- CountDown16ms : décompte pour les impulsions
- CountDown1s : décompte pour la répétition des impulsions
La routine de gestion du timer utilise pour ses propres besoins 2 compteurs internes : T64us et T4ms.

Le code compilé au format hexadécimal

Le fichier zip du projet AVR Studio

La mise en service


Une fois le boîtier assemblé et le micro-contrôleur programmé, il reste à
- vérifier que votre projecteur fonctionne bien avec une tension de contrôle de 30 V, et vérifier le brochage de la commande filaire (tâches mentionnées ici pour mémoire, puisque vous l'aurez fait avant de vous lancer dans l'aventure, logiquement !)
- "Subtilisez" une télécommande RC5 comportant au moins les touches suivantes
    Play / Stop / Volume+ / Volume- / Next / Prev
- Alimentez le boîtier, pour commencer en le raccordant à une alimentation externe, ou directement en le raccordant au projecteur

Exemples de télécommandes utilisées : etc.

La dernière LED du barregraphe doit clignoter régulièrement dès la mise sous tension, indiquant que la temporisation par défaut est réduite (30 s) et que le boîtier est en pilotage manuel.

Pressez à plusieurs reprises la touche volume+ (pressez/relâchez : il n'y a pas d'auto-répétition) : la LED clignotante doit changer, indiquant que la temporisation augmente. Le délai varie par pas de 10 s entre 10 et 250 s ; il faut donc 24 appuis pour parcourir toute l'échelle disponible. Pressez de la même manière la touche volume- : la LED clignotante doit parcourir le chemin inverse.

Vous pouvez aussi noter que chaque appui sur la télécommande provoque l'allumage de la LED de contrôle.

Maintenant, l'étape suivante nécessite que l'on soit raccordé au projecteur, le projecteur sous tension et équipé d'un panier de vues. Réglez le boîtier comme il se doit (commande 1 contact ou commande 2 contacts), procédez au raccordement. Pressez maintenant la touche Next : le projecteur doit passez à la vue suivante. Pressez la touche Prev : le projecteur doit revenir à la vue précédente.

Dernière étape : Pressez la touche Play : l'avance automatique doit commencer, le cycle de clignotement de la LED doit changer pour devenir saccadé. Vous pouvez modifier la temporisation en cours de fonctionnement, forcer l'avance ou le recul automatique. Pressez la touche Stop pour sortir du pilotage automatique.

Pour aller plus loin


Plusieurs variations sont possibles :
- Modifier le choix des touches gérées. Il suffit de modifier les constantes dans le code source, de recompiler et de recharger le micro-contrôleur (c'est là qu'on apprécie la fonction de reprogrammation "in-situ").
- Ajouter des touches pour gérer la mise au point. Là, il faut choisir des ports de sortie du micro-contrôleur (en câblant les deux ports PD3 et PD4 par exemple) et compléter le logiciel. Il faut ensuite répliquer l'électronique de sortie pour piloter les contacts de l'habituelle liaison filaire.
- Dupliquer, tripliquer (je m'emporte ...) l'électronique de sortie pour piloter plusieurs projecteurs de manière synchrone.
- Pour tester les télécommandes RC5, faire une version simplifiée du montage et du logiciel pour afficher les adresses ou les commandes sur un bandeau de LEDs (ça, je l'ai fait, mais j'ai recyclé les composants et le papier brouillon depuis ...).
- A vos idées !

Bonus


En bonus, une liste de codes RC5, glanés sur Internet ou relevés au gré des essais :

Address System
0x10 Générique ?
0x11 Tuner
0x12 Tape
0x13
0x14 CD
0x15 Aux

Value Command
0x00 "0"
0x01 "1"
0x02 "2"
0x03 "3"
0x04 "4"
0x05 "5"
0x06 "6"
0x07 "7"
0x08 "8"
0x09 "9"
0x0B Time
0x0C Off
0x0D Mute
0x10 Volume+
0x11 Volume-
0x1C Shuffle
0x1D Repeat
0x20 Next
0x21 Previous
0x24 Programm
0x26 Sleep
0x2B Highlight
0x30 Pause
0x32 <<
0x34 >>
0x35 Play
0x36 Stop
0x3F On ?