Retrouvez cet article dans : Linux Magazine Hors série 23
Parmi les périphériques d’entrées classiques d’un ordinateur, on compte le clavier et la souris. Il est cependant parfois utile de pouvoir contrôler la machine sans être nécessairement à proximité. C’est précisément ce que vous permettra le simple montage suivant.
Bien que les ports séries soient en voie de disparition sur les machines modernes, la construction d’un récepteur IR (Infra-Rouge) connecté de cette manière reste la solution la plus simple.
Au besoin, il est toujours possible d’acquérir pour quelques euros une carte série sur bus PCI à intégrer dans la machine. On notera que les convertisseurs USB/série ne conviennent pas pour une telle utilisation puisque le logiciel nécessite d’avoir un contrôle particulier du port.
Une solution USB est proposée en fin d’article, mais nécessite la mise en œuvre et la programmation d’un microcontrôleur Freescale (ex-Motorola).
Le montage
Le montage est d’une extrême simplicité et repose entièrement sur un récepteur IR TSOP1738 ou similaire. Ce récepteur capte les signaux IR et les transforme en signaux TTL (0-5 volts) qui seront " remontés " à l’ordinateur après ajustement des tensions.
Le TSOP1738 est un composant très facile à trouver dans le commerce et très économique (moins de 3 euros). On trouve également le TSOP1736 qui pourra convenir pour notre montage. La seule différence entre les deux composants est la fréquence d’échantillonnage passant de 38 kHz (idéal) à 36 kHz. Cette différence de valeur influera sur la qualité de réception, mais n’empêchera pas l’ensemble de fonctionner.
Le port série utilisant des tensions qui n’ont rien à voir avec le TTL, nous ajouterons un régulateur de tension 78L05, une résistance de rappel, un condensateur et une diode de protection. L’ensemble pourra tenir sur un circuit de taille très réduite ne nécessitant pas d’alimentation externe.
Le schéma figure 1 montre l’agencement et l’utilisation des composants. L’alimentation du montage est fournie par la broche RTS (Ready To Send) et convertie en +5 V par le régulateur 78L05 pour le Vcc du TSOP. La diode protège le régulateur de la tension négative (-10 V) présente sur RTS. Le condensateur permet de nettoyer l’alimentation du TSOP.

Fig. 1
C’est une habitude à prendre lorsqu’on alimente un montage ou un composant avec un régulateur. La résistance permet au port série de détecter le signal sur la broche DCD (Data Carrier Detect) puisque le TSOP utilise des signaux TTL normalement invisibles pour ce type de ports.
La figure 2 montre, à gauche, un assemblage sur un circuit imprimé spécifique et à droite le même montage sur plaque pastillée.

Fig. 2
Le logiciel
Le support logiciel LIRC se compose de trois éléments : un module noyau, un serveur lircd et des applications clientes. Les tests ici réalisés portent sur un noyau 2.6.12 sur une distribution Debian stable.
Avec cette distribution, il est nécessaire de compiler et d’empaqueter les modules noyau pour LIRC. Ce ne sera pas nécessairement le cas si vous utilisez une autre distribution comme Mandriva, Fedora ou SUSE.
Il est d’ailleurs fort probable que le support LIRC existe soit de base dans la distribution, soit via l’installation d’un paquet RPM binaire.
Le récepteur présenté ici utilise le port série et celui-ci ne devra être utilisé par aucun autre élément logiciel. C’est une source courante de problème.
Lors de l‘installation des sources ou du module, il vous sera sans doute demandé de spécifier le type de récepteur et l’adresse du port série à utiliser. Le tableau ci-contre donne les correspondances entre les désignations /dev, les dénominations DOS, les adresses et les interruptions.
Note:
Le support du noyau 2.6 ne semble pas encore être parfait pour l’instant. Il faut, selon le problème, forcer le chargement avec l’option -f de modprobe et ainsi passer outre les messages d’erreur FATAL: Error inserting lirc_serial...Invalid module format. Les logs noyau sont plus parlants : lirc_serial: version magic ‘2.6.12-1-k7 K7 gcc-3.3’ should be ‘2.6.12-1-k7 K7 gcc-4.0’. Dans tous les cas, inspectez les listes de discussions en rapport avec LIRC et/ou votre distribution le cas échéant.
Pour réserver l’usage du port série aux modules LIRC, vous devez utiliser setserial pour retirer totalement la prise en charge du port :
setserial /dev/ttyS0 uart none
Selon l’architecture de la distribution et sa configuration de démarrage, il est possible, voire nécessaire, de définir cela de manière permanente en modifiant le fichier /etc/serial.conf. Le chargement correct du module est détectable en inspectant simplement les messages du noyau (dmesg ou log) :
lirc_dev: IR Remote Control driver registered, at major 61 lirc_serial: auto-detected active low receiver lirc_dev: lirc_register_plugin:sample_rate: 0
Si tout a fonctionné correctement, vous pouvez procéder aux premiers tests avec l’utilitaire mode2 ou xmode2. Vous devez voir apparaître les impulsions IR envoyées par votre télécommande et réceptionnées par le montage.
L’étape suivante est la configuration du démon lircd. Il faut pour cela référencer votre ou vos télécommandes et les différents signaux qu’elles envoient.
Heureusement pour nous, un utilitaire spécifique a été écrit : irrecord. Il vous suffit de le lancer avec en argument un nom de fichier (qui sera également le nom de la télécommande dans la configuration). Rien de bien complexe ici. Il suffit de suivre les indications données à l’écran pour calibrer la réception et capturer toutes les séquences IR.

Au terme de la procédure, copiez simplement le contenu de ce fichier dans votre /etc/lirc/lircd.conf. Le démon lircd peut maintenant être lancé.
Dans la plupart des cas, un script init aura été installé en même temps que les paquets LIRC et un /etc/init.d/lirc start suffira. Là encore, des spécificités de votre distribution devront être prises en compte pour, par exemple, lancer automatique le service au démarrage du système.
Le démon LIRC est livré avec tout un jeu d’utilitaires permettant de générer des actions en fonction des codes provenant des boutons de la télécommande. Vous pouvez ainsi injecter des évènements clavier, lancer des applications, basculer dans un mode spécifique, etc.
Le lancement du démon permettra également aux applications compatibles LIRC (xmms, MPlayer, etc.) de prendre en charge vos télécommandes.
Bien entendu, une étape de configuration sera nécessaire pour faire correspondre les boutons avec les actions dans l’application cible.
Nous ne traiterons pas cet aspect ici, car c’est un vaste domaine qui a déjà été couvert en partie par un article dans GNU/Linux Magazine. De plus, les documentations du projet LIRC sont largement suffisantes.
Sachez cependant qu’en configurant l’ensemble, vous pourrez tout aussi bien contrôler le système à distance avec les applications supportant LIRC qu’avec celles parfaitement standards. La combinaison de modes permet d’optimiser les quelques boutons d’une seule télécommande pour tous les usages.
USB
Attention ! Les informations qui suivent sont données à titre informatif et dans le but de vous dirigez vers le site officiel.
Nous n’avons pas eu le loisir de procéder aux tests et les indications du site sont quelque peu éparpillées entre les schémas proposés. Pour en savoir plus sur la programmation USB, reportez-vous à l’article correspondant dans le présent magazine.
Le projet USB-IR-Boy d’Aapo Tamminen et Ilkka Urtamo fait usage d’un microcontrôleur Freescale MC68HC908. Il s’agit de l’un des rares microcontrôleurs à mémoire Flash peu coûteux et capable de communiquer via USB.
Vous l’aurez compris, le montage est sensiblement plus complexe que le précédent et surtout, il faut programmer le microcontrôleur livré vierge.
Il vous faudra donc, tout d’abord, construire le programmeur pour le MC68HC908, appelé " prommer " sur le site officiel (http://usbirboy.sourceforge.net/).
Utilisant la programmation in situ, le microcontrôleur est mis en situation comme à l’intérieur du montage final à la différence près qu’il est connecté au port série du PC (et oui, un port série sera tout de même nécessaire).
Le schéma en figure 3 montre le MC68HC908 et le circuit d’interface MAX232. Le schéma nécessite un minimum de connaissances et de logique d’électronicien. Vreg, par exemple, est une tension de +3,3 V produite de manière interne par le microcontrôleur. Il faut connecter les Vregs ensembles. Le MAX232 est un classique traité par ailleurs dans ce hors-série.

Fig. 3
Le code devant être chargé dans le MC68HC908 est écrit en C et sera compilé avec SDCC (Small Device C Compiler) normalement disponible sous forme de paquet dans votre distribution.
Vous pouvez également télécharger le code compilé depuis le site officiel d’USB-IR-Boy. La programmation du microcontrôleur se fera par l’utilitaire Spgmr08, également référencé sur le site du projet.
Une fois le MC68HC908 programmé, il pourra être intégré au montage dont le schéma est présenté en figure 4. Un schéma vous permettant de réaliser un récepteur en utilisant une plaque à bande est également disponible en ligne.

Fig. 4
L’aspect logiciel comprend un module usbirboy ne nécessitant pas d’autre support noyau provenant du projet LIRC. La compilation du module est, à l’instar du montage, plus complexe qu’avec le récepteur sur port série. Il vous sera nécessaire de modifier le fichier Makefile de manière à faire correspondre les chemins d’installation des fichiers. D’autre part, si vous n’utilisez pas le support devfs, vous devrez créer manuellement l’entrée dans /dev avec la commande mknod /dev/usbirboy c 180 240.
Vous devrez également lancer le démon LIRC en lui spécifiant manuellement le périphérique à utiliser (-d /dev/usbirboy) ou modifier les fichiers d’init en conséquence. En suivant toutes les indications du site, vous devrez être en mesure d’obtenir un montage fonctionnel comme celui présenté en figure 5.

Fig. 5
Comme vous le voyez, sans être embryonnaire, le support USB pour LIRC en est à ses débuts. Le projet est en constante évolution.
Il y a quelques mois encore, les sources du code pour le microcontrôleur n’étaient pas disponibles ou uniquement compilables par Metrowerks CodeWarrior.
Espérons que l’intégration dans le projet LIRC sera plus affirmée dans les prochains temps et, pourquoi pas, que cette solution finira par remplacer celle du port série en tant que récepteur par défaut.
Note: Ce sujet a fait l’objet d’un article différent dans GNU/Linux Magazine France 72. Le sujet se devait d’être traité dans ce hors-série, mais de manière plus succincte pour limiter la redondance.
Retrouvez cet article dans : Linux Magazine Hors série 23

