Télécommande capteur infrarouge

De FunLab Documentation
Révision datée du 20 avril 2017 à 15:09 par WikiAdmin (discussion | contributions) (Page créée avec « ====== Afficher des LEDs avec une télécommande Infrarouge ====== Pas d'affichage avec une matrice à LEDs cette semaine car votre humble serviteur a cramé sa dotmatrix... »)
(diff) ← Version précédente | Voir la version actuelle (diff) | Version suivante → (diff)
Aller à : navigation, rechercher
Afficher des LEDs avec une télécommande Infrarouge

Pas d'affichage avec une matrice à LEDs cette semaine car votre humble serviteur a cramé sa dotmatrix :/ Mais qu'importe ! avec nos connaissances nous pouvons déjà envisager de contrôler une rangée de LEDS, et plus tard qui sait un groupe de leds bien plus important. Cet exemple est en effet le prélude à un projet plus gros de panneau d'affichage. Mais comme d'habitude on commence tout petit :)

Voici un aperçu du montage : Imag0055.jpg

  • @serviteur: savoir comment tu l'as cramé, ca serait bien, aussi, (savoir quoi ne surtout pas faire nous permettra surement, nous, Arduiniste de sauver quelques composants aux ateliers :) ^^**
Composants

Pour ce tuto vous aurez besoin des composants suivants:

  • Arduino Uno (ou Mega, peu immporte)
  • le câble d'alimentation USB de l'Arduino
  • un récepteur IR
  • une télécommande
  • 8 LEDs (monochromes ou pas peu importe)
  • 8 résistances 220 ou 380 ohms (j'ai utilisé les deux indifféremment)
  • un registre 74HC595
  • des jumpers (des câbles)
  • une banane
Les branchements

Suivre les branchements décrits dans le tutoriel "ShiftOut" d'Arduino [1]

Ensuite ajouter le capteur sur le breadboard comme dans le tuto n°2 : Capteur_infrarouge.

Brancher le pin de gauche sur l'entrée 13 de l'Arduino.

Note : Une fois les branchements effectués, mangez la banane vous l'avez bien mérité.

Programme
LEDs_IR.ino
/*
 Exemple d'affichage de LEDs
 contrôlé par télécommande InfraRouge
 Largement inspiré du "Shift Register Example"
 disponible ici :
 http://www.arduino.cc/en/Tutorial/ShiftOut
 et du "Using an IR Sensor"
 disponible ici :
 http://learn.adafruit.com/ir-sensor/using-an-ir-sensor

 Ce programme lit l'entrée du capteur IR et s'en sert pour afficher des
 LEDs sélectivement dans une ligne à l'aide d'un registre 74HC595.

 Créé le 22/09/13
 par Frédéric Lassinot

 */
#include <IRremote.h>

//Pin connecté au latch pin (ST_CP) du 74HC595
const int latchPin = 8;
//Pin connecté au clock pin (SH_CP) du 74HC595
const int clockPin = 12;
//Pin conencté au Data in (DS) du 74HC595
const int dataPin = 11;
// Pin de réception du signal IR
const int RECV_PIN = 13;

int valeurIR = 0;
int position = 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 vMoins = 16754775;
const int vPlus = 16748655;
const int vRejeu = 4294967295;

IRrecv irrecv(RECV_PIN);

decode_results results;

void setup() {
 irrecv.enableIRIn(); // Start the receiver

 //set pins to output because they are addressed in the main loop
 pinMode(latchPin, OUTPUT);
 pinMode(dataPin, OUTPUT); 
 pinMode(clockPin, OUTPUT);
 Serial.begin(9600);
 Serial.println("reset");
 
 // Reinit
 registerWrite(48, LOW);
}

void loop() {
 // Réception du signal
 if (irrecv.decode(&results)) {
 // Affichage de la valeur
 valeurIR = results.value;
 Serial.print("valeurIR = ");
 Serial.println(valeurIR);
 irrecv.resume(); // Receive the next value
 
 // Correspondance de la valeur reçue et de la LED à activer
 switch ( valeurIR ) {
 case v1:
 // On affiche la première LED
 position = 1;
 break;
 case v2:
 position = 2;
 break;
 case v3:
 position = 3;
 break;
 case v4:
 position = 4;
 break;
 case v5:
 position = 5;
 break;
 case v6:
 position = 6;
 break;
 case v7:
 position = 7;
 break;
 case v8:
 position = 8;
 break;
 case vMoins:
 if (position > 1) {
 position--;
 }
 break;
 case vPlus:
 if (position < 8) {
 position++;
 }
 break;
 case vRejeu:
 // on ne change pas la valeur
 break;
 default:
 break;
 }
 // Affichage de la LED
 // write to the shift register with the correct bit set high:
 registerWrite(position-1, HIGH);
 }
}

// This method sends bits to the shift register:
void registerWrite(int pos, int whichState) {
 Serial.println("registerWrite");
 Serial.print("pos = ");
 Serial.println(pos);
 Serial.println();
// the bits you want to send
 byte bitsToSend = 0;

 // turn off the output so the pins don't light up
 // while you're shifting bits:
 digitalWrite(latchPin, LOW);
 Serial.println("digitalWrite LOW");

 // turn on the next highest bit in bitsToSend:
 // (récupère simplement la puissance de 2 correspondant à pos)
 bitWrite(bitsToSend, pos, whichState);
 Serial.println("bitWrite");
 Serial.print("bitsToSend = ");
 Serial.println(bitsToSend);
 Serial.println();

 // shift the bits out:
 shiftOut(dataPin, clockPin, MSBFIRST, bitsToSend);
 Serial.println("shiftOut");

 // turn on the output so the LEDs can light up:
 digitalWrite(latchPin, HIGH);
 Serial.println("digitalWrite HIGH");

}
Explication du code

Comme précédemment le code se divise en 4 parties (déclarations, setup, récupération du signal et envoi)

La lecture du signal est identique au tuto n°2. La variable position sert à définir quelle LED on veut afficher : elle prend la valeur 1 pour la LED n°1, 2 pour la 2nde etc. Le switch permet d'interpréter les valeurs suivantes : 1 à 8 pour afficher directement une position, et + et - pour faire bouger la position de la LED à afficher.

le "if (position > 1) {" permet d'éviter que la valeur descende sous la position zéro et "if (position < 8) {" évite de dépasser 8.

L'affichage de la LED choisie se fait par l'appel de la méthode registerWrite
registerWrite(position-1, HIGH);
On passe la position -1 car les LEDs correspondent aux valeurs 0 à 7 et pas 1 à 8.


La prochaine fois on verra comment fabriquer un exosquelette avec une canette de coca, un pneu et un vieux clou rouillé. (tuxun: lol, cest bon ca!)

Foire Aux Questions

Si vous avez des questions, posez-les ici!