|
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, ...
|
|
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.
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.
|
|
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.
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.
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.
|
' {$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
' Attendre le début du message.
DO
PULSIN 9, 1, tempsDebut
LOOP UNTIL tempsDebut > 1000 '1000 => 2000 millisecondes
'Mesure la durée des 12 impulsions du message
PULSIN 9, 0, temps1
PULSIN 9, 0, temps2
PULSIN 9, 0, temps3
PULSIN 9, 0, temps4
PULSIN 9, 0, temps5
PULSIN 9, 0, temps6
PULSIN 9, 0, temps7
PULSIN 9, 0, temps8
PULSIN 9, 0, temps9
PULSIN 9, 0, temps10
PULSIN 9, 0, temps11
PULSIN 9, 0, temps12
DEBUG CRSRXY,0,4, "Temps 1", CRSRXY,9,4, DEC5 temps1
DEBUG CRSRXY,0,5, "Temps 2", CRSRXY,9,5, DEC5 temps2
DEBUG CRSRXY,0,6, "Temps 3", CRSRXY,9,6, DEC5 temps3
DEBUG CRSRXY,0,7, "Temps 4", CRSRXY,9,7, DEC5 temps4
DEBUG CRSRXY,0,8, "Temps 5", CRSRXY,9,8, DEC5 temps5
DEBUG CRSRXY,0,9, "Temps 6", CRSRXY,9,9 , DEC5 temps6
DEBUG CRSRXY,0,10, "Temps 7", CRSRXY,9,10, DEC5 temps7
DEBUG CRSRXY,0,11, "Temps 8", CRSRXY,9,11, DEC5 temps8
DEBUG CRSRXY,0,12, "Temps 9", CRSRXY,9,12, DEC5 temps9
DEBUG CRSRXY,0,13, "Temps 10", CRSRXY,9,13, DEC5 temps10
DEBUG CRSRXY,0,14, "Temps 11", CRSRXY,9,14, DEC5 temps11
DEBUG CRSRXY,0,15, "Temps 12", CRSRXY,9,15, DEC5 temps12
LOOP
END
|
|
Exemple - Transformer les bits du message en un nombre
|
' {$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
DO
PULSIN 9, 1, temps1
LOOP UNTIL temps1 > 1000
'Mesure la durée des 12 impulsions du message
PULSIN 9, 0, temps1
PULSIN 9, 0, temps2
PULSIN 9, 0, temps3
PULSIN 9, 0, temps4
PULSIN 9, 0, temps5
PULSIN 9, 0, temps6
PULSIN 9, 0, temps7
'Contruit le nombre un bit à la fois
remoteCode=0
IF temps1>450 THEN remoteCode.BIT0 = 1
IF temps2>450 THEN remoteCode.BIT1 = 1
IF temps3>450 THEN remoteCode.BIT2 = 1
IF temps4>450 THEN remoteCode.BIT3 = 1
IF temps5>450 THEN remoteCode.BIT4 = 1
IF temps6>450 THEN remoteCode.BIT5 = 1
IF temps7>450 THEN remoteCode.BIT6 = 1
DEBUG CRSRXY, 0, 0, DEC2 ? remoteCode
LOOP
END
|
|
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.
|
|