Nota

Ciao, benvenuto nella Community di SunFounder per appassionati di Raspberry Pi, Arduino e ESP32 su Facebook! Approfondisci Raspberry Pi, Arduino ed ESP32 insieme ad altri appassionati.

Perché unirsi?

  • Supporto Esperto: Risolvi problemi post-vendita e sfide tecniche con l’aiuto della nostra comunità e del nostro team.

  • Impara e Condividi: Scambia suggerimenti e tutorial per migliorare le tue competenze.

  • Anteprime Esclusive: Accedi in anteprima agli annunci dei nuovi prodotti e alle anticipazioni.

  • Sconti Speciali: Godi di sconti esclusivi sui nostri prodotti più recenti.

  • Promozioni e Giveaway Festivi: Partecipa a giveaway e promozioni festive.

👉 Pronto a esplorare e creare con noi? Clicca su [Qui] e unisciti oggi!

Ricevitore Infrarossi

Panoramica

Un ricevitore a infrarossi è un componente che riceve segnali a infrarossi e può ricevere indipendentemente il raggio infrarosso e fornire segnali compatibili con il livello TTL. È simile a un normale transistor in plastica per dimensioni ed è adatto a tutti i tipi di telecomandi e trasmissioni a infrarossi.

Componenti Necessari

In questo progetto, abbiamo bisogno dei seguenti componenti.

È sicuramente conveniente acquistare un kit completo, ecco il link:

Nome

ELEMENTI IN QUESTO KIT

LINK

Elite Explorer Kit

300+

Elite Explorer Kit

Puoi anche acquistarli separatamente dai link seguenti.

INTRODUZIONE DEI COMPONENTI

LINK PER L’ACQUISTO

Arduino Uno R4 WiFi

-

Breadboard

ACQUISTA

Cavi Jumper

ACQUISTA

Resistenza

ACQUISTA

Ricevitore a Infrarossi

ACQUISTA

Cablaggio

../_images/22-ir_receiver_bb.png

Schema Elettrico

../_images/22_irrecv_schematic.png

Codice

Nota

  • Puoi aprire direttamente il file 22-ir_receiver.ino nel percorso elite-explorer-kit-main\basic_project\22-ir_receiver.

  • Oppure copia questo codice nell’IDE di Arduino.

22-ir_receiver.ino
 1/*
 2  This Arduino receive and decode infrared (IR) signals from a remote control. It uses 
 3  the IRremote library to receive the IR signals and map them to corresponding keys like 
 4  numbers, mathematical operations, and other function keys.
 5  
 6  Board: Arduino Uno R4 
 7  Component: Infrared Receiver
 8  Library: https://github.com/Arduino-IRremote/Arduino-IRremote (IRremote by shirriff, z3t0, ArminJo)
 9*/
10
11// Include the necessary libraries
12#include <IRremote.h>
13
14// Define the pin numbers for the IR receiver
15const int IR_RECEIVE_PIN = 2;
16
17void setup() {
18  Serial.begin(9600);                                     // Start serial communication at 9600 baud rate
19  IrReceiver.begin(IR_RECEIVE_PIN, ENABLE_LED_FEEDBACK);  // Start the IR receiver
20}
21
22void loop() {
23  // Check if there is any incoming IR signal
24  if (IrReceiver.decode()) {
25    IrReceiver.printIRResultShort(&Serial);                 // Print the received data in one line
26    // Serial.println(IrReceiver.decodedIRData.command, HEX);  // Print the command in hexadecimal format
27    Serial.println(decodeKeyValue(IrReceiver.decodedIRData.command));  // Map and print the decoded IR signal to corresponding key value
28    Serial.println(IrReceiver.decodedIRData.decodedRawData, HEX); // Print "old" raw data
29    IrReceiver.resume();  // Enable receiving of the next value
30  }
31}
32
33// Function to map received IR signals to corresponding keys
34String decodeKeyValue(long result) {
35  // Each case corresponds to a specific IR command
36  switch (result) {
37    case 0x16:
38      return "0";
39    case 0xC:
40      return "1";
41    case 0x18:
42      return "2";
43    case 0x5E:
44      return "3";
45    case 0x8:
46      return "4";
47    case 0x1C:
48      return "5";
49    case 0x5A:
50      return "6";
51    case 0x42:
52      return "7";
53    case 0x52:
54      return "8";
55    case 0x4A:
56      return "9";
57    case 0x9:
58      return "+";
59    case 0x15:
60      return "-";
61    case 0x7:
62      return "EQ";
63    case 0xD:
64      return "U/SD";
65    case 0x19:
66      return "CYCLE";
67    case 0x44:
68      return "PLAY/PAUSE";
69    case 0x43:
70      return "FORWARD";
71    case 0x40:
72      return "BACKWARD";
73    case 0x45:
74      return "POWER";
75    case 0x47:
76      return "MUTE";
77    case 0x46:
78      return "MODE";
79    case 0x0:
80      return "ERROR";
81    default:
82      return "ERROR";
83  }
84}
  • Qui viene utilizzata la libreria IRremote, puoi installarla dal Library Manager.

    ../_images/22_irrecv_lib.png

Nota

  • C’è un pezzo di plastica trasparente sul retro del telecomando per interrompere l’alimentazione; estrailo prima di utilizzare il telecomando.

Analisi del Codice

Questo codice è progettato per funzionare con un telecomando a infrarossi (IR) utilizzando la libreria IRremote. Ecco la spiegazione:

  1. Inclusione della libreria e definizione delle costanti. Prima, viene inclusa la libreria IRremote e il numero del pin per il ricevitore IR viene definito come 2.

    #include <IRremote.h>
    const int IR_RECEIVE_PIN = 2;
    
  2. Inizializza la comunicazione seriale a un baud rate di 9600. Inizializza il ricevitore IR sul pin specificato (IR_RECEIVE_PIN) e abilita il feedback LED (se applicabile).

    void setup() {
        Serial.begin(9600);                                     // Avvia la comunicazione seriale a 9600 baud
        IrReceiver.begin(IR_RECEIVE_PIN, ENABLE_LED_FEEDBACK);  // Avvia il ricevitore IR
    }
    
  3. Il ciclo loop viene eseguito continuamente per elaborare i segnali del telecomando IR in arrivo.

    void loop() {
      // Controlla se c'è un segnale IR in arrivo
      if (IrReceiver.decode()) {
        // IrReceiver.printIRResultShort(&Serial);                 // Stampa i dati ricevuti su una riga
        // Serial.println(IrReceiver.decodedIRData.command, HEX);  // Stampa il comando in formato esadecimale
        Serial.println(decodeKeyValue(IrReceiver.decodedIRData.command));  // Mappa e stampa il segnale IR decodificato al valore corrispondente
    
        IrReceiver.resume();  // Abilita la ricezione del prossimo valore
      }
    }
    
    • Controlla se viene ricevuto un segnale IR e se è stato decodificato correttamente.

    • Decodifica il comando IR e lo memorizza in decodedValue utilizzando una funzione personalizzata decodeKeyValue().

    • Stampa il valore IR decodificato sul monitor seriale.

    • Riprende la ricezione del segnale IR per il prossimo segnale.


  4. Funzione di supporto per mappare i segnali IR ricevuti ai tasti corrispondenti

    ../_images/22_irrecv_key.png
    // Funzione per mappare i segnali IR ricevuti ai tasti corrispondenti
    String decodeKeyValue(long result) {
      // Ogni caso corrisponde a un comando IR specifico
      switch (result) {
        case 0x16:
          return "0";
        case 0xC:
          return "1";
        case 0x18:
          return "2";
        case 0x5E:
          return "3";
        case 0x8:
          return "4";
        case 0x1C:
          return "5";
        case 0x5A:
          return "6";
        case 0x42:
          return "7";
        case 0x52:
          return "8";
        case 0x4A:
          return "9";
        case 0x9:
          return "+";
        case 0x15:
          return "-";
        case 0x7:
          return "EQ";
        case 0xD:
          return "U/SD";
        case 0x19:
          return "CYCLE";
        case 0x44:
          return "PLAY/PAUSE";
        case 0x43:
          return "FORWARD";
        case 0x40:
          return "BACKWARD";
        case 0x45:
          return "POWER";
        case 0x47:
          return "MUTE";
        case 0x46:
          return "MODE";
        case 0x0:
          return "ERROR";
        default:
          return "ERROR";
      }
    }