Une diode électroluminescente qui émet dans le domaine de l'infrarouge. En fonction de la tension d'entrée, des résistances en série sont nécessaires.

Données techniques

Vf 1,1V
If 20mA
Longueur d'onde d'émission 940nm (lumière invisible)

Les désignations (Vf et If) font référence à la tension directe et au courant direct de la diode électroluminescente.

Résistances de série:

Rf (3,3V) 120Ω

(par exemple, lorsqu'il est utilisé avec des microcontrôleurs basés sur un noyau de CPU ARM, comme le Raspberry-Pi).

Rf (5V) 220Ω

(par exemple, lorsqu'il est utilisé avec des microcontrôleurs basés sur Atmel Atmega comme Arduino).

La désignation (Rf) fait référence à la résistance en série requise devant la DEL en fonction de la tension appliquée.

*Sur la carte, il y a la possibilité de souder directement la résistance requise. **L'emplacement pour souder la résistance est directement au-dessus des broches de connexion sur le PCB. Dans ce cas, on peut utiliser la broche du milieu, qui contient alors la résistance.

Affectation des broches

Exemple de code Arduino

Baudrate der seriellen Ausgabe sollte auf 115200 gestellt werden sonst funktioniert das Fernbedienungs Beispiel nicht

Exemple de code ON/OFF

Affectation des broches Arduino

Arduino Récepteur
Pin 3 Signal
5V +V
Masse GND

Cet exemple de code montre comment une LED peut être alternativement allumée pendant quatre secondes puis éteinte pendant deux secondes à l'aide d'une broche de sortie définissable.

int Led = 13;
 
void setup ()
{
  pinMode (Led, OUTPUT); // Déclaration de la broche de sortie LED
}
 
void loop () //Boucle de programme principale
{
  digitalWrite (Led, HIGH); // la LED est activée
  delay (4000); // Temporisation de 4 secondes
  digitalWrite (Led, LOW); // la LED est déactivée
  delay (2000); // Temporisation de 2 secondes
}

Télécharger l'exemple de programme

KY005-Arduino-ON-OFF.zip

Exemple de code de télécommande

Affectation des broches Arduino

Arduino Récepteur
Pin 2 Signal
5V +V
Masse GND
Arduino Émetteur
Pin 3 Signal
Masse* GND+Résistance
Masse GND
  • *Uniquement si la résistance série a été soudée sur le module et n'est pas connectée devant le module.

En utilisant les deux modules capteurs KY-005 et KY-022, il est possible de construire un système télécommande infrarouge + récepteur infrarouge. Pour ce faire, deux Arduinos sont nécessaires en plus des deux modules. Ceux-ci agissent alors comme un émetteur et comme un récepteur des signaux. Il est seulement important de savoir ce que le récepteur des signaux de la console série émet et ce que l'émetteur envoie, car cela doit correspondre.

Pour l'exemple de code suivant, une bibliothèque supplémentaire est nécessaire :

Arduino-IRremote par Ken Shirriff | publié sous la licence MIT.

La bibliothèque n'est pas incluse dans le paquet et doit être copiée dans le dossier "library" avant de démarrer l'IDE Arduino.

Il se trouve par défaut dans le chemin suivant de votre installation Windows :

C:\User[nom d'utilisateur]\Documents\Arduino\Librairies

Avec les systèmes de transmission infrarouge, il existe différents protocoles dans lesquels les données peuvent être envoyées. Dans l'exemple suivant, le protocole NEC est utilisé pour l'envoi à l'aide de l'exemple SimpleSender modifié et de l'exemple SimpleReceiver modifié - la bibliothèque utilisée "Arduino-IRremote" s'occupe indépendamment de la conversion en séquence de données correcte. Cependant, il existe d'autres protocoles/encodages au sein de la bibliothèque - ceux-ci sont identifiés dans la documentation/code de la bibliothèque. Documentation.

Afin d'utiliser le code qui suit maintenant, il y a quelques éléments importants à garder à l'esprit. Tout d'abord, vous devez ouvrir l'exemple déjà existant de la bibliothèque car il ouvre un fichier très important qui est nécessaire pour la réception. Pour ouvrir cet exemple, allez dans Fichier -> Exemples -> IRremote -> SimpleReceiver. Une fois que vous avez fait cela, il suffit de remplacer le code de l'exemple par le code ci-dessous pour le récepteur. Après cela, il vous suffit de sélectionner l'Arduino auquel vous avez connecté votre récepteur. Pour ce faire, allez dans Outils -> Port -> COM. Il est important que vous sélectionniez le COM auquel est connecté votre premier Arduino qui servira plus tard de récepteur. Dans cet exemple, il est possible de modifier les lignes 88 à 93.

Code pour le récepteur

/*
 * SimpleReceiver.cpp
 *
 * Demonstrates receiving NEC IR codes with IRrecv
 *
 *  Copyright (C) 2020-2021  Armin Joachimsmeyer
 *  armin.joachimsmeyer@gmail.com
 *
 *  This file is part of Arduino-IRremote https://github.com/Arduino-IRremote/Arduino-IRremote.
 *
 *  MIT License
 */

/*
 * Specify which protocol(s) should be used for decoding.
 * If no protocol is defined, all protocols are active.
 */
//#define DECODE_DENON        // Includes Sharp
//#define DECODE_JVC
//#define DECODE_KASEIKYO
//#define DECODE_PANASONIC    // the same as DECODE_KASEIKYO
//#define DECODE_LG
#define DECODE_NEC          // Includes Apple and Onkyo
//#define DECODE_SAMSUNG
//#define DECODE_SONY
//#define DECODE_RC5
//#define DECODE_RC6

//#define DECODE_BOSEWAVE
//#define DECODE_LEGO_PF
//#define DECODE_MAGIQUEST
//#define DECODE_WHYNTER

//#define DECODE_DISTANCE     // universal decoder for pulse width or pulse distance protocols
//#define DECODE_HASH         // special decoder for all protocols

#include <Arduino.h>

/*
 * Define macros for input and output pin etc.
 */
#include "PinDefinitionsAndMore.h"

#include <IRremote.h>

void setup() {
    Serial.begin(115200);
    // Just to know which program is running on my Arduino
    Serial.println(F("START " __FILE__ " from " __DATE__ "\r\nUsing library version " VERSION_IRREMOTE));

    /*
     * Start the receiver, enable feedback LED and take LED feedback pin from the internal boards definition
     */
    IrReceiver.begin(IR_RECEIVE_PIN, ENABLE_LED_FEEDBACK, USE_DEFAULT_FEEDBACK_LED_PIN);

    Serial.print(F("Ready to receive IR signals at pin "));
    Serial.println(IR_RECEIVE_PIN);
}

void loop() {
    /*
     * Check if received data is available and if yes, try to decode it.
     * Decoded result is in the IrReceiver.decodedIRData structure.
     *
     * E.g. command is in IrReceiver.decodedIRData.command
     * address is in command is in IrReceiver.decodedIRData.address
     * and up to 32 bit raw data in IrReceiver.decodedIRData.decodedRawData
     */
    if (IrReceiver.decode()) {

        // Print a short summary of received data
        IrReceiver.printIRResultShort(&Serial);
        if (IrReceiver.decodedIRData.protocol == UNKNOWN) {
            // We have an unknown protocol here, print more info
            IrReceiver.printIRResultRawFormatted(&Serial, true);
        }
        Serial.println();

        /*
         * !!!Important!!! Enable receiving of the next value,
         * since receiving has stopped after the end of the current received data packet.
         */
        IrReceiver.resume(); // Enable receiving of the next value

        /*
         * Finally, check the received data and perform actions according to the received command
         */
        if (IrReceiver.decodedIRData.command == 0x34) {
            Serial.println("Signal received");
        } else if (IrReceiver.decodedIRData.command == 0x36) {
            Serial.println("Signal received and it is a different one this time around");
        } else {
            Serial.println("Signal received but sadly not the correct one");
        }
    }
}

Là encore, pour utiliser le code suivant, il faut tenir compte de quelques éléments importants. Tout d'abord, vous devez ouvrir l'exemple existant de la bibliothèque, car un fichier très important est ouvert et est nécessaire pour l'envoi. Pour ouvrir cet exemple, allez dans Fichier -> Exemples -> IRremote -> SimpleSender. Une fois que vous avez fait cela, il suffit de remplacer le code de l'exemple par le code ci-dessous pour l'émetteur. Ensuite, il vous suffit de sélectionner l'Arduino auquel vous avez connecté votre émetteur. Vous procédez comme suit : vous allez dans Outils -> Port -> COM. Il est important que vous sélectionniez le COM auquel est connecté votre deuxième Arduino qui servira plus tard d'émetteur. Dans cet exemple, il est possible de modifier les lignes 49 à 58.

Après avoir configuré votre émetteur, il est important de revenir au COM avec le bon port pour obtenir la sortie série de l'Arduino récepteur.

Code de l'émetteur

/*
   SimpleSender.cpp

    Demonstrates sending IR codes in standard format with address and command
    An extended example for sending can be found as SendDemo.

    Copyright (C) 2020-2021  Armin Joachimsmeyer
    armin.joachimsmeyer@gmail.com

    This file is part of Arduino-IRremote https://github.com/Arduino-IRremote/Arduino-IRremote.

    MIT License
*/
#include <Arduino.h>

/*
   Define macros for input and output pin etc.
*/
#include "PinDefinitionsAndMore.h"

//#define SEND_PWM_BY_TIMER
//#define USE_NO_SEND_PWM

#include <IRremote.h>

void setup() {
  pinMode(LED_BUILTIN, OUTPUT);

  Serial.begin(115200);

  // Just to know which program is running on my Arduino
  Serial.println(F("START " __FILE__ " from " __DATE__ "\r\nUsing library version " VERSION_IRREMOTE));

  /*
     The IR library setup. That's all!
  */
  IrSender.begin(IR_SEND_PIN, ENABLE_LED_FEEDBACK); // Specify send pin and enable feedback LED at default feedback LED pin

  Serial.print(F("Ready to send IR signals at pin "));
  Serial.println(IR_SEND_PIN);
}

/*
   Set up the data to be sent.
   For most protocols, the data is build up with a constant 8 (or 16 byte) address
   and a variable 8 bit command.
   There are exceptions like Sony and Denon, which have 5 bit address.
*/
uint16_t sAddress = 0x0102;
uint8_t sCommand = 0x34;

uint16_t sAddress1 = 0x0101;
uint8_t sCommand1 = 0x35;

uint16_t sAddress2 = 0x0103;
uint8_t sCommand2 = 0x36;

uint8_t sRepeats = 0;

void loop() {

  Serial.println(F("Send NEC with 16 bit address"));
  Serial.flush();

  // Results for the first loop to: Protocol=NEC Address=0x102 Command=0x34 Raw-Data=0xCB340102 (32 bits)
  IrSender.sendNEC(sAddress, sCommand, sRepeats);
  delay(1000);
  IrSender.sendNEC(sAddress1, sCommand1, sRepeats);
  delay(1000);
  IrSender.sendNEC(sAddress2, sCommand2, sRepeats);

  /*
     If you cannot avoid to send a raw value directly like e.g. 0xCB340102 you must use sendNECRaw()
  */
  //    Serial.println(F("Send NECRaw 0xCB340102"));
  //    IrSender.sendNECRaw(0xCB340102, sRepeats);

  delay(1000);  // delay must be greater than 5 ms (RECORD_GAP_MICROS), otherwise the receiver sees it as one long signal
}

Télécharger l'exemple de programme

KY005-Arduino-Remote.zip

Exemple de code Raspberry Pi

Deux exemples d'application de ce module de détection sont présentés ici. Un qui allume et éteint brièvement la diode de l'émetteur infrarouge (émettant une lumière non visible - peut être vu à travers la caméra d'un téléphone portable par exemple), et un exemple d'application directe pour le Raspberry Pi où il peut être programmé soit comme un récepteur infrarouge pour des télécommandes pour contrôler par exemple le logiciel de centre multimédia OpenElec, soit comme un émetteur infrarouge pour une télécommande contrôlée par logiciel.

Exemple de code ON/OFF

Affectation des broches Raspberry Pi

Raspberry Pi Capteur
GPIO 24 [Pin 18] Signal
Masse* [Pin 6] +V
Masse [Pin 6] GND
  • *Uniquement si la résistance en série est soudée sur le module et non connectée devant le module.
#!/usr/bin/python
# coding=utf-8
 
# Les modules nécessaires sont importés et mis en place
import RPi.GPIO as GPIO
import time
   
GPIO.setmode(GPIO.BCM)
   
# La broche d'entrée du capteur est déclarée. En outre la résistance de Pull-up est activée.
LED_PIN = 24
GPIO.setup(LED_PIN, GPIO.OUT, initial= GPIO.LOW)
   
print "LED-Test [Appuyez sur Ctrl + C pour terminer le test]"
  
# Boucle de programme principale
try:
        while True:
                print("LED 4 secondes ON")
                GPIO.output(LED_PIN,GPIO.HIGH) #la LED est allumée
                time.sleep(4) #Temporisation de 4 secondes
                print("LED 2 secondes OFF") 
                GPIO.output(LED_PIN,GPIO.LOW) #La LED est éteinte
                time.sleep(2) #Temporisation de 2 secondes
   
# remise en place de tous les GPIO en entrées
except KeyboardInterrupt:
        GPIO.cleanup()

Exemple de téléchargement de programme

KY005-RPi-ON-OFF.zip

Pour commencer avec la commande :

sudo python3 KY005.py

Exemple de code de télécommande

Affectation des broches Raspberry Pi:

Raspberry Pi Récepteur
GPIO15 [Pin 8] Signal
3,3V [Pin 17] +V
Masse [Pin 25] GND
Raspberry Pi Émetteur
GPIO14 [Pin 10] Signal
Masse* [Pin 9] GND+Résistance
Masse [Pin 6] GND

Grâce à son architecture de processeur avancée, le Raspberry Pi a l'avantage, par rapport à l'Arduino, de pouvoir exécuter un système d'exploitation Linux complet. À l'aide d'un récepteur infrarouge, il est possible non seulement d'échanger de simples signaux de données, mais aussi de commander à distance des logiciels complets, tels que le logiciel de centre multimédia OpenElec.

A cet effet, les modules KY-005 sont appliqués comme émetteurs infrarouges et KY-022 comme récepteurs infrarouges.

Pour mettre en place un système de commande infrarouge, vous allez suivre les étapes suivantes.

Source des étapes qui suivent maintenant.

Tout d'abord, vous allez éditer le fichier config.txt en utilisant la commande.....

sudo nano /boot/config.txt

...entrez. Ensuite, mettez ce qui suit à la fin de ce fichier.

dtoverlay=gpio-ir,gpio_pin=14
dtoverlay=gpio-ir-tx,gpio_pin=15

Vous pouvez arrêter l'édition avec la combinaison de touches [CTRL+X] et enregistrer avec [CTRL+Y].

Après avoir connecté le Raspberry Pi en utilisant...

sudo reboot

... redémarré, vous allez maintenant exécuter les commandes suivantes...

lsmod | grep gpio
cat /proc/bus/input/devices

... Vous devriez alors voir ce qui suit.

I: Bus=0019 Vendor=0001 Product=0001 Version=0100
N: Name="gpio_ir_recv"
P: Phys=gpio_ir_recv/input0
S: Sysfs=/devices/platform/ir-receiver@e/rc/rc0/input0
U: Uniq=
H: Handlers=kbd event0 
B: PROP=0
B: EV=100013
B: KEY=fff 0 0 4200 108fc32e 2376051 0 0 0 7 158000 4192 4001 8e9680 0 0 10000000
B: MSC=10

La prochaine chose que vous devez faire est d'installer ir-keytable...

sudo apt-get install ir-keytable -y

... pour confirmer une installation réussie, vous devez...

ir-keytable

... et obtenir également le résultat suivant.

Found /sys/class/rc/rc0/ (/dev/input/event0) with:
	Name: gpio_ir_recv
	Driver: gpio_ir_recv, table: rc-rc6-mce
	LIRC device: /dev/lirc1
	Attached BPF protocols: Operation not permitted
	Supported kernel protocols: lirc rc-5 rc-5-sz jvc sony nec sanyo mce_kbd rc-6 sharp xmp imon 
	Enabled kernel protocols: lirc rc-6 
	bus: 25, vendor/product: 0001:0001, version: 0x0100
	Repeat delay = 500 ms, repeat period = 125 ms

Après tout cela, voici quelques étapes supplémentaires....

sudo ir-keytable -p all

... est utilisé pour afficher tous les protocoles possibles qui peuvent être utilisés.

Protocols changed to lirc rc-5 rc-5-sz jvc sony nec sanyo mce_kbd rc-6 sharp xmp imon 
sudo ir-keytable

Est maintenant entré pour voir quel périphérique est utilisé pour l'envoi (il y a la possibilité que soit rc0 ou rc1 soit utilisé (voir /sys/class/rc/rc0 ou rc1))...

Found /sys/class/rc/rc0/ (/dev/input/event0) with:
	Name: gpio_ir_recv
	Driver: gpio_ir_recv, table: rc-rc6-mce
	LIRC device: /dev/lirc1
	Attached BPF protocols: Operation not permitted
	Supported kernel protocols: lirc rc-5 rc-5-sz jvc sony nec sanyo mce_kbd rc-6 sharp xmp imon 
	Enabled kernel protocols: lirc rc-6 
	bus: 25, vendor/product: 0001:0001, version: 0x0100
	Repeat delay = 500 ms, repeat period = 125 ms

Selon le cas, la commande suivante sera modifiée en fonction des besoins.

ir-keytable -t -s rc0

Ceci termine maintenant la configuration de notre récepteur, nous allons maintenant utiliser notre émetteur pour envoyer quelque chose à notre récepteur.

cat /etc/rc_keymaps/rc6_mce.toml | grep SLEEP

Le résultat de la commande exécutée précédemment devrait...

0x800f040c = "KEY_SLEEP"

... devrait apparaître. Après cela, il ne vous reste plus qu'à exécuter une dernière commande...

ir-ctl -S rc6_mce:0x800f040c -d /dev/lirc1

... et vous avez maintenant terminé et vous avez une installation qui fonctionne.

Exemple de code Micro:Bit

Exemple de code ON/OFF

Affectation des broches Micro:Bit :

Micro:Bit Émetteur
Pin 0 Signal
- +V
Masse GND

Ceci est un exemple MakeCode pour Micro:Bit qui fait essentiellement la même chose que les deux autres exemples. Cependant, cet exemple est plus proche de celui du Raspberry Pi que de celui de l'Arduino.

Téléchargement d'un exemple de programme

microbit-KY-005.zip

Exemple de code de télécommande

Pinout Micro:Bit :

Micro:Bit Émetteur
Pin 0 Signal
- +V
Masse GND
Micro:Bit Récepteur
Pin 1 Signal
3V +V
Masse GND

Ceci est un exemple MakeCode pour Micro:Bit qui fait essentiellement la même chose que les deux autres exemples. Cependant, cet exemple est plus proche de celui du Raspberry Pi que de celui de l'Arduino.

Deux bibliothèques supplémentaires sont nécessaires pour l'exemple de code suivant :

pxt-makerbit-ir-transmitter de 1010Technologies | publié sous la licence MIT

pxt-makerbit-ir-receiver de 1010Technologies | publié sous la licence MIT.

Vous devez d'abord ajouter ces bibliothèques à votre IDE avant d'utiliser le code.

Pour ce faire, allez dans Extensions dans votre IDE et utilisez les deux URL suivantes https://github.com/1010Technologies/pxt-makerbit-ir-transmitter.git et https://github.com/1010Technologies/pxt-makerbit-ir-receiver.git pour rechercher la bibliothèque et l'ajouter. Il convient de mentionner que, parfois, les bibliothèques n'apparaissent qu'après que vous ayez ajouté la deuxième bibliothèque.

Téléchargement d'un exemple de programme

microbit-KY-005.zip