Communication infrarouge - télécommande

Un télécommande envoi un signal infrarouge. Combiné à un capteur infrarouge, on peut transmettre un signal à distance. Une télécommande universel émet des signaux à 38,5 kHz pour une courte période de temps.

L'exemple que nous utiliserons utilise le standard universel de SONY TV.

  • La télécommande commance par émettre un signal d'une duré de 2,4ms pour indiquer le début de la transmission.
  • Par la suite, la télécomande émet 12 impulsion de 0,6ms ou 1,2ms. Une impulsion de 0,6ms indique la valeur binaire 0 et une impulsion de 1,2ms indique le nombre binaire 1.
  • De ces 12 impulsions, les sept premières indiquent la touche de la télécomande qui a été appuyée
  • Les 5 dernières impulsions indiquent si le signal s'adresse à la télévision, VHS, DVD, ...

 

 

ir receivertélécommande

télécommande

Pour déterminer le message envoyé par la télécommande, il suffit de mesurer la longueur des impulsions. On obtiendra un nombre de 12 bits qui indiquera le bouton appuyé par l'utilisateur. Les impulsions de la télécomande sont négatives, c'est à dire que le singal est à la base à 5V et que les impulsion sont à 0V.

signal télécommande

Exemple

Dans cet exemple, nous capterons le signal envoyé par la télécommande. En exécutant le code ci-dessous, remarquez que le signal envoyé par le capteur est toujours. Lorsqu'on appui sur l'un des bouton de la télécomande vis à vis le capteur infrarouge, l'entrée varie de 0 à 1. Ce sont les impulsions envoyées par la télécommande.

ir diagram

 

Télécommande circuit

Assurez-vous pour les prochains exercices que la télécomande utilise le standart de SONY TV. Référez-vous au guide d'utilisation de votre télécomande universelle. Dans le cas de la télécomande utilisez dans cet exercice, il faut appuyez sur le bouton set-up jusqu'à ce que la lumière rouge reste allumé et ensuite entrez le nombre 605.

code

' {$STAMP BS2}
' {$PBASIC 2.5}


impulsion VAR Word
DO
ESPACEDEBUG CRSRXY,0,0, ? IN9
LOOP

ESPACE

code

Pour capter la longeur des impulsions, on peut utiliser la commande PULSIN, qui est le complément ou l'onverse de la commande PULSOUT.

PULSIN pin, état, durée

Cette commande calcule la durée d'une impulsion sur l'interface pin. Le paramètre état permet de calculer soit les impulsions négatives ou positives. Lorsque état=1, le microcontrôleur calcule les impulsions positives et inversement, lorsque état=0, le microcontrôleur calcule la longueur des impulsions à 0V. La durée de l'impulsion est copié dans la variable duré puisque le microcontrôleur vérifie la sortie à chaque 2 milisecondes, il faut multiplié la durée par 2 pour obtenir le temps en miliseconde.

code

' {$STAMP BS2}
' {$PBASIC 2.5}


impulsion VAR Word
DO
ESPACE'mesure la durée du signal à 0V
ESPACEPULSIN 9, 0, impulsion
ESPACEDEBUG CLS, ? impulsion
LOOP

ESPACE

code

 

Exemple - Capture des bits d'un message

Dans cet exemple, on utilisera le même scéma de branchement que dans l'exemple précédant.

code

' {$STAMP BS2}
' {$PBASIC 2.5}


tempsDebut VAR Word
temps1 VAR Word
temps2 VAR Word
temps3 VAR Word
temps4 VAR Word
temps5 VAR Word
temps6 VAR Word
temps7 VAR Word
temps8 VAR Word
temps9 VAR Word
temps10 VAR Word
temps11 VAR Word
temps12 VAR Word

' Affiche les titres
DEBUG "Mesure des durées des impulsions", CR,CR,
"Element Durée, 2-us", CRR,
"------- --------------"
DO
ESPACE' Attendre le début du message.
ESPACEDO
ESPACEPULSIN 9, 1, tempsDebut
ESPACELOOP UNTIL tempsDebut > 1000 ESPACE'1000 => 2000 millisecondes

ESPACE'Mesure la durée des 12 impulsions du message
ESPACEPULSIN 9, 0, temps1
ESPACEPULSIN 9, 0, temps2
ESPACEPULSIN 9, 0, temps3
ESPACEPULSIN 9, 0, temps4
ESPACEPULSIN 9, 0, temps5
ESPACEPULSIN 9, 0, temps6
ESPACEPULSIN 9, 0, temps7
ESPACEPULSIN 9, 0, temps8
ESPACEPULSIN 9, 0, temps9
ESPACEPULSIN 9, 0, temps10
ESPACEPULSIN 9, 0, temps11
ESPACEPULSIN 9, 0, temps12

ESPACEDEBUG CRSRXY,0,4, "Temps 1", CRSRXY,9,4, DEC5 temps1
ESPACEDEBUG CRSRXY,0,5, "Temps 2", CRSRXY,9,5, DEC5 temps2
ESPACEDEBUG CRSRXY,0,6, "Temps 3", CRSRXY,9,6, DEC5 temps3
ESPACEDEBUG CRSRXY,0,7, "Temps 4", CRSRXY,9,7, DEC5 temps4
ESPACEDEBUG CRSRXY,0,8, "Temps 5", CRSRXY,9,8, DEC5 temps5
ESPACEDEBUG CRSRXY,0,9, "Temps 6", CRSRXY,9,9 , DEC5 temps6
ESPACEDEBUG CRSRXY,0,10, "Temps 7", CRSRXY,9,10, DEC5 temps7
ESPACEDEBUG CRSRXY,0,11, "Temps 8", CRSRXY,9,11, DEC5 temps8
ESPACEDEBUG CRSRXY,0,12, "Temps 9", CRSRXY,9,12, DEC5 temps9
ESPACEDEBUG CRSRXY,0,13, "Temps 10", CRSRXY,9,13, DEC5 temps10
ESPACEDEBUG CRSRXY,0,14, "Temps 11", CRSRXY,9,14, DEC5 temps11
ESPACEDEBUG CRSRXY,0,15, "Temps 12", CRSRXY,9,15, DEC5 temps12

LOOP
END

code

Exemple - Transformer les bits du message en un nombre

code

' {$STAMP BS2}
' {$PBASIC 2.5}


temps1 VAR Word
temps2 VAR Word
temps3 VAR Word
temps4 VAR Word
temps5 VAR Word
temps6 VAR Word
temps7 VAR Word

remoteCode VAR Byte

DO
ESPACEDO
ESPACEPULSIN 9, 1, temps1
ESPACELOOP UNTIL temps1 > 1000

ESPACE'Mesure la durée des 12 impulsions du message
ESPACEPULSIN 9, 0, temps1
ESPACEPULSIN 9, 0, temps2
ESPACEPULSIN 9, 0, temps3
ESPACEPULSIN 9, 0, temps4
ESPACEPULSIN 9, 0, temps5
ESPACEPULSIN 9, 0, temps6
ESPACEPULSIN 9, 0, temps7
ESPACE
ESPACE'Contruit le nombre un bit à la fois
ESPACEremoteCode=0
ESPACEIF temps1>450 THEN remoteCode.BIT0 = 1
ESPACEIF temps2>450 THEN remoteCode.BIT1 = 1
ESPACEIF temps3>450 THEN remoteCode.BIT2 = 1
ESPACEIF temps4>450 THEN remoteCode.BIT3 = 1
ESPACEIF temps5>450 THEN remoteCode.BIT4 = 1
ESPACEIF temps6>450 THEN remoteCode.BIT5 = 1
ESPACEIF temps7>450 THEN remoteCode.BIT6 = 1

ESPACEDEBUG CRSRXY, 0, 0, DEC2 ? remoteCode

LOOP
END

code

Exercice

Utiliser 2 microcontrôleurs pour envoyer un message infrarouge de l'un à l'autre. Le microcontrôleur qui envoi le message utilise une LED infrarouge combiner avec la commande PULSOUT. De l'autre côté, le second microcontrôleur utilise un capteur infrarouge avec la commande PULSIN.