Projet 29 Télécommande IR

1. Description

La télécommande IR utilise un signal IR pour contrôler la LED, ce qui simplifie grandement le processus de contrôle de la LED.

2. Principe de fonctionnement

Dans ce projet, nous utilisons souvent un porteuse d’environ 38K pour la modulation.

Le système de télécommande IR comprend la modulation, l’émission et la réception. Il envoie des données par modulation, ce qui améliore l’efficacité de transmission et réduit la consommation d’énergie.

Généralement, la fréquence de modulation porteuse est comprise entre 30kHz et 60kHz (habituellement 38kHz). Le rapport cyclique de l’onde carrée est de 1/3, comme illustré ci-dessous, ce qui est déterminé par le quartz oscillateur à 455kHz côté émission.

Une division entière de fréquence est essentielle pour le quartz oscillateur à ce niveau, et le coefficient de fréquence est généralement évalué à 12. Par conséquent, 455kHz÷12≈37,9kHz≈38kHz.

Schéma d’émission complet de la porteuse 38KH :

Fréquence porteuse : 38KHz

Longueur d’onde : 940nm

Angle de réception : 90°

Distance de contrôle : 6M

Schéma des boutons de la télécommande :

3. Schéma de câblage

4. Code de test

/*
  keyestudio ESP32 Inventor Learning Kit  
  Project 29.1 IR Remote Control
  http://www.keyestudio.com
*/
#include <Arduino.h>
#include <IRremoteESP8266.h>
#include <IRrecv.h>
#include <IRutils.h>

const uint16_t recvPin = 19;  // Infrared receiving pin
IRrecv irrecv(recvPin);  // Create a class object used to receive class
decode_results results;   // Create a decoding results class object
long ir_rec;

void setup()
{
  Serial.begin(9600); // Initialize the serial port and set the baud rate to 9600
  irrecv.enableIRIn(); // start receiving signals
}

void loop() 
{
  if (irrecv.decode(&results)) 
  {
    ir_rec = results.value; //assign the signal to the variable ir_rec
    if(ir_rec != 0)
    {		//Prevente the code from repeating execute when the button is pressed 
        Serial.print(ir_rec, HEX); //Print the variable ir_rec in hexadecimal
        Serial.println();//Wrapping lines
    }
    irrecv.resume(); //Release the IR remote and receive the next value.
  }
} 

5. Résultat du test

Après avoir connecté le câblage et téléversé le code, ouvrez le moniteur série et réglez le débit en bauds à 9600.

Appuyez sur un bouton de la télécommande, et vous verrez la valeur en hexadécimal.

6. Extension des connaissances

Ensuite, nous allons utiliser une télécommande IR pour contrôler la LED. Appuyez sur OK pour allumer la LED et appuyez de nouveau pour l’éteindre.

Schéma de câblage :

Code :

/*
  keyestudio ESP32 Inventor Learning Kit 
  Project 29.2 IR Remote Control
  http://www.keyestudio.com
*/
#include <Arduino.h>
#include <IRremoteESP8266.h>
#include <IRrecv.h>
#include <IRutils.h>

int led = 25;
int led_val = 0;
const uint16_t recvPin = 19;  // Infrared receiving pin
IRrecv irrecv(recvPin);       // Create a class object used to receive class
decode_results results;       // Create a decoding results class object
long ir_rec;

void setup() 
{
  Serial.begin(9600);   // Initialize the serial port and set the baud rate to 9600
  irrecv.enableIRIn();  // start receiving signals
  pinMode(led, OUTPUT);
}

void loop() 
{
  if (irrecv.decode(&results)) 
  {
    ir_rec = results.value;      //assign the signal to the variable ir_rec
    if (ir_rec != 0) 
    {           //Prevente the code from repeating execute when the button is pressed
      if (ir_rec == 0xFF02FD) //Determine whether the received IR signal is from button OK
      {  
        led_val = !led_val;      //Reverse a variable. If the initial value is 0, it turns to 1 after reversing  
        digitalWrite(led, led_val);
      }
    }
    irrecv.resume();  //Release the IR remote and receive the next value.
  }
}

Résultat du test :

Appuyez sur OK pour allumer la LED et appuyez de nouveau pour l’éteindre.