Capteur infrarouge

De FunLab Documentation
Aller à : navigation, rechercher

Bonjour !

Voici un second tutoriel pour l'utilisation d'un Arduino Uno. Celui-ci consiste à faire briller une LED avec un signal Infrarouge.

Composants

Pour ce tuto vous aurez besoin des composants suivants:

  • Arduino Uno ( la Mega n'a pas la même réaction ...)
  • le câble d'alimentation USB de l'Arduino
  • un récepteur IR ( TSOP 1736 )
  • une LED
  • une résistance 220 ohms
  • des jumpers (des câbles)

Les branchements

Suivre les branchements décrits dans le tutoriel Using an IR Sensor de Adafruit disponible ici : http://learn.adafruit.com/ir-sensor/using-an-ir-sensor Modification par rapport au schéma : Brancher le PIN de lecture (la branche gauche) du capteur IR au pin 11 de l'Arduino au lieu du 2.

Ensuite brancher une LED sur la breadboard. Relier son Plus à une résistance 220 ohms et la résistance au PIN 10 de l'Arduino. Relier le Moins de la LED à la terre.

Configuration logicielle

Installer la bibliothèque logicielle IRremote qui va nous permettre de lire et d'exploiter le signal IR plus facilement. Elle est disponible à cette adresse : https://github.com/shirriff/Arduino-IRremote

Télécharger la bibliothèque en cliquant sur le lien "Download as ZIP" en bas à droite de la page.

Ouvrir le zip et extraire le répertoire contenu sur votre disque dur. Renommer le répertoire en enlevant les "-" dans le nom, sans quoi l'installation ne marchera pas.

Ouvrir un sketch Arduino et Aller dans le menu Croquis -> Importer une bibliothèque -> Add library Sélectionner le répertoire... Et voilà !


Entrer le code suivant dans un nouveau sketch:

IRLEDdemo.ino
#include <IRremote.h>

int RECV_PIN = 11;
int led = 10;
int brightness = 254;


IRrecv irrecv(RECV_PIN);

decode_results results;

void setup()
{
  Serial.begin(9600);
  irrecv.enableIRIn(); // Start the receiver
  // initialize the digital pin as an output.
  pinMode(led, OUTPUT);     
}

void loop() {
  if (irrecv.decode(&results)) {
    Serial.println(results.value, HEX);
    irrecv.resume(); // Receive the next value
    // set the brightness :
    if (brightness < 0) {
      brightness = 254;
    } else {
      brightness = brightness - 10;
    }
    analogWrite(led, brightness);    
    Serial.println(brightness);
  }
}

(Très largement inspiré du tuto IRrecvDemo dispo dans les exemples fournis avec la bibliothèque)

Téléverser le programme dans l'Arduino, attendre quelques secondes.

Tests du capteur

Saisir la télécommande, crier d'une voix forte et grave : "Que la lumière soit!" et appuyer sur un bouton de la télécommande au hasard.

Normalement la diode s'allume.

Presser plusieurs fois les touches de la télécommande et vous constaterez que la diode diminue en intensité. Si vous continuez la diode se rallume à fond, puis diminue à nouveau à chaque pression etc.

Contrôle de la puissance par télécommande

Et maintenant quelque chose de plus intéressant : régler la puissance de la LED sur les numéros des boutons de la télécommande (0 = éteinte, 9 = maximum etc.)


IRTelecommande.ino
#include <IRremote.h>

int RECV_PIN = 11;
int led = 10;
int brightness = 0;
int valeurIR = 0;

const int v0 = 16738455;
const int v1 = 16724175;
const int v2 = 16718055;
const int v3 = 16743045;
const int v4 = 16716015;
const int v5 = 16726215;
const int v6 = 16734885;
const int v7 = 16728765;
const int v8 = 16730805;
const int v9 = 16732845;
const int vRejeu = 4294967295;
const int vPlus = 16748655;
const int vMoins = 16754775;

IRrecv irrecv(RECV_PIN);

decode_results results;

void setup()
{
  Serial.begin(9600);
  irrecv.enableIRIn(); // Start the receiver
  // initialize the digital pin as an output.
  pinMode(led, OUTPUT);     
}

void loop() {
  if (irrecv.decode(&results)) {
    Serial.println(results.value, HEX);
    Serial.println(results.value);
    valeurIR = results.value;
    irrecv.resume(); // Receive the next value
    
    switch ( valeurIR ) {
    case v0:
      brightness = 0;
      break;
    case v1:
      brightness = 25;
      break;
    case v2:
      brightness = 50;
      break;
    case v3:
      brightness = 75;
      break;
    case v4:
      brightness = 100;
      break;
    case v5:
      brightness = 125;
      break;
    case v6:
      brightness = 150;
      break;
    case v7:
      brightness = 175;
      break;
    case v8:
      brightness = 200;
      break;
    case v9:
      brightness = 225;
      break;
    case vMoins:
      brightness = brightness - 25;
      break;
    case vPlus:
      brightness = brightness + 25;
      break;
    case vRejeu:
      // on ne change pas la valeur
      break;
    default:
      brightness = 0;
      break;
    }

    // plafonne la valeur de brightness
    if (brightness > 254) {
      brightness = 254;
    } if (brightness < 0) {
      brightness = 0;
    }
    
    delay(100);               // wait for a second
    // set the brightness of pin 9:
    analogWrite(led, brightness);
    Serial.println(brightness);
  }
}
Foire Aux Questions

Si vous avez des questions, posez-les ici!