Outils pour utilisateurs

Outils du site


Action disabled: diff
tpir

Ceci est une ancienne révision du document !


TD Bus de communication : Communication infrarouge NEC étendue

Objectifs

  • Génération des signaux de commandes infrarouge
  • Compréhension du format de trame NEC étendue
  • Utilisation de la maquette Arduino
  • Configuration des périphériques TIMER et PWM

Carte d'extension pour le TD/TP

Le shield à utiliser pour ce TP est présenté en tdcom2. Nous utiliserons une Led infrarouge pour émettre des trames à l'aide de l'Arduino. Une led verte est utilisée sur la maquette pour visualiser à l’œil nu l'activité en émission.

Analyse

Format des trames

Pour rappel, une trame NEC étendue est constitué d'un train de bits modulé à 38Khz. Il existe 2 types de trames:

  1. les trames complètes
  2. les trames de répétition

La trame complète contient:

  1. un entête de trame
  2. une adresse sur 16 bits (identifiant la télécommande)
  3. une valeur sur 8 bits (identifiant la touche)
  4. le complément à 1 de la précédente valeur sur 8 bits
  5. l'envoi d'un bit à 1 et un retour à l'état de repos

La trame de répétition contient:

  1. un entête de trame
  2. l'envoi d'un bit à 1 et un retour à l'état de repos

La durée séparant le début de 2 trames (complète ou de répétition) doit être au moins de 110ms.

Codage des bits

Les bits sont codés de la manière suivante:

  1. Le bit “1” est représenté par un train d'impulsion à 38Khz (avec rapport cyclique 50%) pendant 560us suivi par une inactivité pour une durée totale du bit de 2.25ms.
  2. Le bit “0” est représenté par un train d'impulsion à 38Khz (avec rapport cyclique 50%) pendant 560us suivi par une inactivité pour une durée totale du bit de 1.12ms.

Les entêtes de trames sont codés de la manière suivante:

  1. La trame complète commence par un train d'impulsion à 38Khz (avec rapport cyclique 50%) pendant 9ms suivi par une inactivité de durée 4.5ms.
  2. La trame de répétition commence par un train d'impulsion à 38Khz (avec rapport cyclique 50%) pendant 9ms suivi par une inactivité de durée 2.25ms.

Dessin des chronogrammes

Dessiner l'allure des chronogrammes pour l'envoie d'une trame complète depuis la télécommande 0x1234 pour la touche 0x56.

Dessiner l'allure des chronogrammes pour l'envoie d'une trame de répétition depuis la télécommande 0x1234 pour la touche 0x56.

Codage et tests

Utiliser une caméra de téléphone portable pour visualiser l'activité de la Led infrarouge.

Utilisation d'une librarie

infrarouge

protocole: http://www.circuitvalley.com/2013/09/nec-protocol-ir-infrared-remote-control.html

arduino: http://www.righto.com/2009/08/multi-protocol-infrared-remote-library.html

Hardware setup The library can use ANY of the digital input signals to receive the input from a 38KHz IR receiver module. It has been tested with the Radio Shack 276-640 IR receiver and the Panasonic PNA4602. Simply wire power to pin 1, ground to pin 2, and the pin 3 output to an Arduino digital input pin, e.g. 11. These receivers provide a filtered and demodulated inverted logic level output; you can't just use a photodiode or phototransistor. I have found these detectors have pretty good range and easily work across a room.

led emettrice à connecter à PIN 3 (PWM)

https://www.pjrc.com/teensy/td_libs_IRremote.html

https://gist.github.com/EEVblog/6206934

http://forum.arduino.cc/index.php?topic=18230.0

http://www.build-electronic-circuits.com/arduino-remote-control/

ressources:

http://techdocs.altium.com/display/FPGA/NEC+Infrared+Transmission+Protocol

http://www.sbprojects.com/knowledge/ir/nec.php

il faut du 950nm (j'en ai 10): http://forums.futura-sciences.com/electronique/83501-led-ir.html

recepteur

VISHAY - TSOP2238 - RECEPTEUR IR 38KHZ , ref farnell 4913073

datasheet: http://www.farnell.com/datasheets/30485.pdf

fonctionne uniquement en alimentation 5V

à terme prévoir alim en 5V et signal en sortie en 3.3 ou 5V (via vin et circuit mise à niveau)

install librairie

wget https://github.com/shirriff/Arduino-IRremote/archive/master.zip

dezipper dans /usr/share/arduino/libraries/IRremote
testemit.ino
#include <IRremote.h>
IRsend irsend;
void setup()
{}
byte i=0;
void loop() {
 irsend.sendNEC(0xa90, i);
 i++;
 delay(200);
}
testrcv.ino
#include <IRremote.h>
 
int RECV_PIN = A0;
int VCC_PIN = A1 ;
int GND_PIN = A2 ;
 
IRrecv irrecv(RECV_PIN);
 
decode_results results;
 
void setup()
{
  Serial.begin(9600);
  pinMode(VCC_PIN, OUTPUT);
  pinMode(GND_PIN, OUTPUT);
  digitalWrite(VCC_PIN, HIGH);
  digitalWrite(GND_PIN, LOW);
  irrecv.enableIRIn(); // Start the receiver
}
 
void loop() {
  if (irrecv.decode(&results)) {
    Serial.println(results.value, HEX);
    irrecv.resume(); // Receive the next value
  }
  delay(100);
}
tpir.1427636837.txt.gz · Dernière modification : 2015/03/29 15:47 de bvandepo