Récepteur infrarouge

J'utilise plusieurs types de récepteurs infrarouges qui sont soit à fabriquer puis à brancher sur le port série soit en hackant un modèle Xbox via USB. Lirc est utilisé dans les 2 cas pour mapper les boutons de la télécommande avec des actions. Il fonctionne en mode client / serveur : le serveur s'interface avec le matériel, mappe les touches et notifie les clients. Ainsi, j'utilise irexec pour lancer des scripts shell ou pour s'interfacer Mythtv ou mpc en mappant une touche avec un action de l'application…

06/2010 : j'ai testé un montage simple de récepteur infrarouge de télécommande “standard du marché” se connectant via le port série. Il exploite un mode de fonctionnement que seul lirc est capable d'interpréter et n'est pas compatible RS232.Pour rendre ce montage compatible avec la plus part des télécommandes TV du marché, il suffit d'acheter le récepteur infrarouge avec la fréquence la plus répandue du marché : 38 KHz.

  • Récepteur Infrarouge TSOP 1738
  • Condensateur chimique de 4.7 µF
  • Résistance 4.7 kΩ
  • Diode 1N4148
  • Régulateur de tension 78L05

Schéma de principe

Ce montage ne nécessite que très peu de composants tout est étant très fiable.

Voici la réalisation finale, je n'ai pas utilisé de PCB pour diminuer l'épaisseur de l'ensemble.

Montage final

Je l'ai installé dans une petite boite d'allumettes fixée sur le meuble en dessous de la télé. Seul le récepteur infrarouge dépasse pour être visible.

J'utilise la télécommande fournit avec l'une de mes cartes DVB-T :

Télécommande Hauppauge

07/2012 J'ai remplacé la boite d'allumettes par une fixation du récepteur sur l'enceinte centrale situé sur le meuble de la TV afin d'être “visible” pour la télécommande.

Enceinte avec récepteur IR

LIRC fonctionne en mode démon ⇔ client. La configuration du démon indique les modules noyaux à charger, l'association entre les codes de télécommandes avec un nom de touche. Coté client, un fichier décrit l'association entre une touche et une action coté application ou un script à lancer.

Démon

Configuration du démon :

/etc/lirc/hardware.conf
# /etc/lirc/hardware.conf
#
# Arguments which will be used when launching lircd
LIRCD_ARGS="-l "
 
#Don't start lircmd even if there seems to be a good config file
START_LIRCMD=false
 
#Don't start irexec, even if a good config file seems to exist.
START_IREXEC=false
 
#Try to load appropriate kernel modules
LOAD_MODULES=true
 
# Run "lircd --driver=help" for a list of supported drivers.
DRIVER=""
# If DEVICE is set to /dev/lirc and udev is in use /dev/lirc0 will be
# automatically used instead
DEVICE="/dev/lirc0"
MODULES="lirc_serial"
 
# Default configuration files for your hardware if any
LIRCD_CONF=""
LIRCMD_CONF=""

Configuration de la télécommande :

/etc/lirc/lircd.conf
begin remote
  name  Hauppauge
  bits           13
  flags RC5|CONST_LENGTH
  eps            30
  aeps          100
  one           969   811
  zero          969   811
  plead        1097
  gap          114605
  toggle_bit      2
 
      begin codes
          Go                       0x00000000000017BB
          Power                    0x00000000000017BD
          TV                       0x000000000000179C
          Videos                   0x0000000000001798
          Music                    0x0000000000001799
          Pictures                 0x000000000000179A
          Guide                    0x000000000000179B
          Radio                    0x000000000000178C
          Up                       0x0000000000001794
          Left                     0x0000000000001796
          Right                    0x0000000000001797
          Down                     0x0000000000001795
          OK                       0x00000000000017A5
          Back/Exit                0x000000000000179F
          Menu/i                   0x000000000000178D
          Vol+                     0x0000000000001790
          Vol-                     0x0000000000001791
          Prev.Ch                  0x0000000000001792
          Mute                     0x000000000000178F
          Ch+                      0x00000000000017A0
          Ch-                      0x00000000000017A1
          Record                   0x00000000000017B7
          Stop                     0x00000000000017B6
          Rewind                   0x00000000000017B2
          Play                     0x00000000000017B5
          Forward                  0x00000000000017B4
          SkipBackward             0x00000000000017A4
          Pause                    0x00000000000017B0
          SkipForward              0x000000000000179E
          1                        0x0000000000001781
          2                        0x0000000000001782
          3                        0x0000000000001783
          4                        0x0000000000001784
          5                        0x0000000000001785
          6                        0x0000000000001786
          7                        0x0000000000001787
          8                        0x0000000000001788
          9                        0x0000000000001789
          Asterix                  0x000000000000178A
          0                        0x0000000000001780
          Sharp                    0x000000000000178E
          Red                      0x000000000000178B
          Green                    0x00000000000017AE
          Yellow                   0x00000000000017B8
          Blue                     0x00000000000017A9
      end codes
end remote

Le lancement de LIRC provoque le chargement des modules lirc_dev et lirc_serial. Les logs du noyaux sont de la forme :

[    9.918060] lirc_dev: IR Remote Control driver registered, major 250
[    9.920592] lirc_serial: module is from the staging directory, the quality is unknown, you have been warned.
[   10.824042] lirc_serial lirc_serial.0: auto-detected active low receiver
[   10.824293] lirc_serial lirc_serial.0: lirc_dev: driver lirc_serial registered at minor = 0

Si les logs noyaux font apparaitre une erreur du type port 03f8 already in use comme par exemple :

[    9.926370] lirc_dev: IR Remote Control driver registered, major 250
[    9.931945] lirc_serial: module is from the staging directory, the quality is unknown, you have been warned.
[    9.938108] lirc_serial lirc_serial.0: port 03f8 already in use
[    9.938179] lirc_serial lirc_serial.0: use 'setserial /dev/ttySX uart none'
[    9.938187] lirc_serial lirc_serial.0: or compile the serial port driver as module and
[    9.938194] lirc_serial lirc_serial.0: make sure this module is loaded first
[    9.938219] lirc_serial: probe of lirc_serial.0 failed with error -16
[    9.944411] platform lirc_serial.0: lirc_dev: driver lirc_serial registered at minor = 0

Il faut alors modifier le fichier /etc/init.d/lirc pour ajouter la libération du port série via la commande setserial avant le chargement du module noyau lirc_serial, ligne 93 :

/etc/init.d/lirc
[...]
if [ ! -f /etc/lirc/lircrc ] || grep -q "^#UNCONFIGURED" /etc/lirc/lircrc; then
    START_IREXEC=false
fi
 
setserial /dev/ttyS0 uart none
setserial /dev/ttyS1 uart none
 
case "$1" in
    start)
[...]

Client

La configuration du client irexec est simple :

/home/mythtv/.lircrc
begin
     remote = Hauppauge
     prog = mythtv
     button = Radio
     config = I
end
 
# adjust fill
begin
     remote = Hauppauge
     prog = mythtv
     button = Prev.Ch
     config = W
end
 
begin
     remote = Hauppauge
     prog = mythtv
     button = Up
     repeat = 3
     config = Up
end
 
begin
     remote = Hauppauge
     prog = mythtv
     button = Down
     repeat = 3
     config = Down
end
 
begin
     remote = Hauppauge
     prog = mythtv
     button = Left
     repeat = 3
     config = Left
end
 
begin
     remote = Hauppauge
     prog = mythtv
     button = Right
     repeat = 3
     config = Right
end
 
begin
     remote = Hauppauge
     prog = mythtv
     button = Vol+
     repeat = 3
     config = F11
end
 
begin
     remote = Hauppauge
     prog = mythtv
     button = Vol-
     repeat = 3
     config = F10
end
 
# aspect ratio
begin
     remote = Hauppauge
     prog = mythtv
     button = Asterix
     config = Ctrl+W
end
 
begin
     remote = Hauppauge
     prog = mythtv
     button = 1
     config = 1  
end
 
begin
     remote = Hauppauge
     prog = mythtv
     button = 2
     config = 2  
end
 
begin
     remote = Hauppauge
     prog = mythtv
     button = 3
     config = 3  
end
 
begin
     remote = Hauppauge
     prog = mythtv
     button = 4
     config = 4  
end
 
begin
     remote = Hauppauge
     prog = mythtv
     button = 5
     config = 5  
end
 
begin
     remote = Hauppauge
     prog = mythtv
     button = 6
     config = 6  
end
 
begin
     remote = Hauppauge
     prog = mythtv
     button = 7
     config = 7  
end
 
begin
     remote = Hauppauge
     prog = mythtv
     button = 8
     config = 8  
end
 
begin
     remote = Hauppauge
     prog = mythtv
     button = 9
     config = 9  
end
 
begin
     remote = Hauppauge
     prog = mythtv
     button = Back/Exit
     config = Esc
end
 
begin
     remote = Hauppauge
     prog = mythtv
     button = Menu/i
     config = M  
end
 
begin
     remote = Hauppauge
     prog = mythtv
     button = Play
     repeat = 3
     config = P
end
 
begin
     remote = Hauppauge
     prog = mythtv
     button = pause
     repeat = 3
     config = P
end
 
begin
     remote = Hauppauge
     prog = mythtv
     button = Ch+
# This is the "up" on the central diamond 
     repeat = 3
     config = J
end
 
begin
     remote = Hauppauge
     prog = mythtv
     button = Ch-
# This is the "down" on the central diamond 
     repeat = 3
     config = U
end
 
begin
     remote = Hauppauge
     prog = mythtv
     button = Mute
     config = |
end
 
begin
     remote = Hauppauge
     prog = mythtv
     button = Rewind
# This is the "left" on the central diamond 
     repeat = 3
     config = Left
end
 
begin
     remote = Hauppauge
     prog = mythtv
     button = Forward
# This is the "right" on the central diamond 
     repeat = 3
     config = Right
end
 
begin
     remote = Hauppauge
     prog = mythtv
# Middle button on the diamond
     button = Ok
     config = Return
end
 
begin
     remote = Hauppauge
     prog = mythtv
     button = Record
     config = R  
end
 
begin
     remote = Hauppauge
     prog = mythtv
     button = Stop
     config = Y
end
 
begin
     remote = Hauppauge
     prog = mythtv
     button = Go
     config = Alt+G
end
 
begin
     remote = Hauppauge
     prog = mythtv
     button = TV
     config = Alt+L
end
 
begin
     remote = Hauppauge
     prog = mythtv
     button = Videos
     config = Alt+T
end
 
begin
     remote = Hauppauge
     prog = mythtv
     button = Music
     config = Alt+M
end
 
begin
     remote = Hauppauge
     prog = mythtv
     button = Pictures
     config = Alt+G
end
 
begin
     remote = Hauppauge
     prog = mythtv
     button = Guide
     config = Alt+P
end
 
begin
     remote = Hauppauge
     prog = mythtv
     button = Yellow
     config = E
     repeat = 3
end
 
begin
     remote = Hauppauge
     prog = mythtv
     button = Green
     config = T
     repeat = 3
end
 
begin
     remote = Hauppauge
     prog = mythtv
     button = Blue 
     repeat = 3
     config = PgDown
end
 
###########################################
# irexec
###########################################
 
begin
     remote = Hauppauge
     prog = irexec
     button = Power
     repeat = 3
     config = sudo halt
end
 
begin                  
     remote = Hauppauge
     prog = irexec
     button = Red
     repeat = 3
     config = killall /usr/bin/mythfrontend
end

Le lancement d' irexec s'effectue de la manière suivante :

irexec -d

Récepteur de Xbox

12/2010 : les récepteurs IR et télécommande de la première Xbox ne sont pas cher et peuvent être adaptés pour fonctionner sur le port USB d'un PC. Récepteur IR d'Xbox + télécommande

Le connecteur du dongle USB est une version modifiée de l'USB avec les 4 fils traditionnels (VCC, GND, D+ et D-) auxquels s'ajoutent une fil pour piloter le retour de force des manettes de jeu. Il est possible de souder un câble USB “normal” directement sur le circuit imprimé en ne connectant que les 4 fils habituels.

Schéma de câblage du récepteur

Assignation des broches :

  1. Rouge = +5V
  2. Blanc = Data -
  3. Vert = Data +
  4. Jaune = Retour de force ⇒ Inutilisé
  5. Noir = Masse, 0V DC

J'ai également dessoudé le récepteur infrarouge et l'ai installé au bout de plusieurs centimètres de fils afin de le déporter et le rendre plus discret. Une fois terminé, le récepteur est reconnu par le noyau avec le module lirc_atiusb. En configurant lirc, je pilote mpd via irexec et mpc (client en ligne de commande pour mpd) pour jouer de la musique pour le garage. :music:

Fichier de mapping des touches :

/etc/lirc/lircd.conf
begin remote
 
  name  Xbox_Remote
  bits            8
  eps            30
  aeps          100
 
  one             0     0
  zero            0     0
  gap          163983
  toggle_bit_mask 0x0
 
      begin codes
          left                     0xA9
          up                       0xA6
          right                    0xA8
          down                     0xA7
          enter                    0x0B
          1                        0xCE
          2                        0xCD
          3                        0xCC
          4                        0xCB
          5                        0xCA
          6                        0xC9
          7                        0xC8
          8                        0xC7
          9                        0xC6
          0                        0xCF
          menu                     0xF7
          display                  0xD5
          rewind                   0xE2
          ffwd                     0xE3
          play                     0xEA
          pause                    0xE6
          stop                     0xE0
          skip-                    0xDD
          skip+                    0xDF
          title                    0xE5
          info                     0xC3
          back                     0xD8
      end codes
 
end remote

Configuration d' irexec :

~/.lircrc
# play button
begin
prog = irexec
button = play
delay = 2
config = mpc toggle
end
 
# right button
begin
prog = irexec
button = right
delay = 2
config = mpc next
end
 
# skip+ button
begin
prog = irexec
button = skip+
delay = 2
config = mpc next
end
 
# skip- button
begin
prog = irexec
button = slip-
delay = 2
config = mpc prev
end
 
# rewind button
begin
prog = irexec
button = rewind
delay = 2
config = mpc prev
end
 
[...]
 
# up button
begin
prog = irexec
button = up
delay = 2
config = mpc volume +7
end
 
# down button
begin
prog = irexec
button = down
delay = 2
config = mpc volume -7
end