Schema conectare IR cu ESP32
Schema conectare IR cu ESP32

KY-022 Infrared Receiver Module (VS1838B/1838) pentru Arduino și ESP32

KY-022 este un modul receptor infraroșu (IR) de tip „demodulator” (de obicei bazat pe VS1838B/1838) folosit pentru a recepționa comenzi de la telecomenzi IR clasice (TV, audio, AC etc.). Modulul recepționează semnal IR modulat în jur de 38 kHz și oferă la ieșire un semnal digital (impulsuri) pe care un microcontroler îl poate decoda în protocoale uzuale (NEC, RC5/RC6, Sony, Panasonic etc.).

În acest articol explicăm: principiul de funcționare, pini și parametri, conectarea sigură la ESP32 și exemple de cod (Arduino IDE / Arduino core pentru ESP32), plus recomandări de depanare.

Schema conectare IR cu ESP32
Schema conectare IR cu ESP32

1) Ce conține modulul KY-022

  • Receptor IR demodulator (VS1838B/1838 sau echivalent), optimizat pentru purtătoare de ~38 kHz.
  • LED indicator pe placă (de regulă clipește/aprinde la recepție).
  • Rezistor(i)
  • Header cu 3 pini.

Important: KY-022 nu este „fototranzistor simplu”. Receptorul include filtrare + amplificare + demodulare, adică „decodifica” datele de pe purtătoarea de 38 kHz și scoate la ieșire impulsuri digitale, mult mai ușor de decodat software.

2) Cum funcționează recepția IR (pe scurt, dar corect)

Telecomenzile IR transmit date printr-un LED IR (≈940 nm) care pulsează la o frecvență purtătoare (tipic 38 kHz). Datele nu sunt trimise ca nivel logic constant, ci ca rafale („bursts”) de 38 kHz, separate de pauze. Lungimea acestor rafale și pauze codifică biții (ex. NEC folosește durate diferite pentru 0/1).

Receptorul demodulator din KY-022:

  • filtrează lumina ambientală (soare, becuri) și zgomotul,
  • detectează componenta modulatã la ~38 kHz,
  • produce un semnal digital (de obicei activ-low): în repaus ieșirea stă HIGH, iar la rafale IR apar impulsuri LOW.

3) Pinout și parametri (utili în practică)

3.1 Pinout KY-022

Pe multe plăcuțe KY-022 pinii sunt marcați S (Signal), + (VCC, de obicei pinul din mijloc) și (GND). Verifică serigrafia de pe modulul tău.

Conectare IR la ESP32
Conectare IR la ESP32
Pin KY-022 Rol Observații
S Ieșire digitală Semnal demodulat (impulsuri). Conectează la un GPIO de intrare pe ESP32.
+ (de obicei pinul din mijloc) VCC Recomandat 3.3V pentru ESP32.
GND Masa comună.

3.2 Parametri tipici

  • Tensiune de operare: 3.3 V – 5 V
  • Curent: ~0.4 – 1.5 mA
  • Distanță recepție: până la ~18 m (în condiții bune)
  • Unghi recepție: aproximativ ±45°
  • Frecvență purtătoare: 38 kHz

4) Conectarea la ESP32 (corect și sigur)

4.1 Regula de bază: alimentează KY-022 la 3.3V când lucrezi cu ESP32

ESP32 nu este tolerant la 5V pe pini GPIO. Dacă alimentezi KY-022 la 5V, există șansa ca ieșirea S să urce aproape de 5V (în funcție de varianta modulului), ceea ce poate deteriora ESP32. Soluția simplă: VCC = 3.3V.

4.2 Alegerea GPIO-ului pe ESP32

Alege un pin configurabil ca intrare digitală și evită pinii de „strapping”/boot (în funcție de placă). În practică, merg bine pini precum GPIO 14, 16, 17, 18, 19, 21, 22, 23, 25, 26, 27, 32, 33 (în funcție de modul/placă).

4.3 Schema de conexiuni (exemplu)

KY-022 ESP32
+ (VCC) 3V3
(GND) GND
S (Signal) GPIO 27 (exemplu)

Notă: Dacă folosești fire lungi sau mediul e zgomotos, păstrează masa bună și cablurile cât mai scurte. KY-022 consumă puțin, dar stabilitatea alimentării contează.


5) Software pe ESP32: decodare IR în Arduino IDE (varianta recomandată)

Cea mai directă variantă pentru Arduino IDE + ESP32 este biblioteca Arduino-IRremote (din Library Manager). Ea știe să decodifice protocoale comune și îți afișează rapid codurile butoanelor.

5.1 Instalare

  1. Arduino IDE → Tools → selectează placa ESP32 (ex. “ESP32 Dev Module”).
  2. SketchInclude LibraryManage Libraries…
  3. Caută “IRremote” și instalează biblioteca Arduino-IRremote.

5.2 Exemplu minimal: citește codurile telecomenzii și le afișează în Serial Monitor

Conectează KY-022 la GPIO 27 (sau alt GPIO ales) și încarcă sketch-ul de mai jos.

// ESP32 + KY-022 (VS1838B/1838) - Recepție IR cu Arduino-IRremote
// Conexiuni:
//   KY-022 VCC  -> 3V3
//   KY-022 GND  -> GND
//   KY-022 S    -> GPIO 27 (sau alt pin de intrare)

#include <Arduino.h>
#include <IRremote.hpp>

static const uint8_t IR_RECEIVE_PIN = 14;

void setup() {
  Serial.begin(115200);
  delay(200);

  // ENABLE_LED_FEEDBACK: folosește LED-ul intern al plăcii (dacă există) ca feedback.
  // Pentru KY-022 LED-ul de pe modul e hardware, independent.
  IrReceiver.begin(IR_RECEIVE_PIN, ENABLE_LED_FEEDBACK);

  Serial.println("KY-022 + ESP32: IR receiver ready.");
  Serial.println("Apasa un buton pe telecomanda si urmareste rezultatele.");
}

void loop() {
  if (IrReceiver.decode()) {
    // Afișare scurtă (protocol, address, command, etc.)
    IrReceiver.printIRResultShort(&Serial);
    Serial.println();

    // Dacă vrei RAW timings (util pentru protocoale necunoscute):
    // IrReceiver.printIRResultRawFormatted(&Serial, true);
    // Serial.println();

    IrReceiver.resume(); // Pregătește pentru următorul frame
  }
}

5.3 Cum mapezi butoanele telecomenzii

  1. Deschide Serial Monitor la 115200 baud.
  2. Apasă fiecare buton și notează protocol + address + command (sau valoarea afișată).
  3. Construiește un tabel (ex. “VOL+ → comandă 0x18”) și folosește un switch în cod pentru acțiuni.

5.4 Exemplu: controlează un LED (sau un releu) în funcție de o comandă IR

#include <Arduino.h>
#include <IRremote.hpp>

static const uint8_t IR_RECEIVE_PIN = 14;
static const uint8_t LED_PIN = 2; // pe multe plăci ESP32, GPIO2 are LED onboard (verifică placa ta)

uint32_t lastCommand = 0;

void setup() {
  Serial.begin(115200);
  pinMode(LED_PIN, OUTPUT);
  digitalWrite(LED_PIN, LOW);

  IrReceiver.begin(IR_RECEIVE_PIN, DISABLE_LED_FEEDBACK);
  Serial.println("IR control ready.");
}

void loop() {
  if (IrReceiver.decode()) {
    // Pentru multe protocoale, comanda e în IrReceiver.decodedIRData.command
    uint16_t cmd = IrReceiver.decodedIRData.command;
    uint16_t addr = IrReceiver.decodedIRData.address;

    Serial.print("ADDR=0x"); Serial.print(addr, HEX);
    Serial.print(" CMD=0x");  Serial.println(cmd, HEX);

    // Exemplu: înlocuiește 0x45 cu comanda reală a butonului tău
    if (cmd == 0x45) {
      digitalWrite(LED_PIN, !digitalRead(LED_PIN));
    }

    IrReceiver.resume();
  }
}

6) Alternativă: IRremoteESP8266 (util dacă vrei suport extins pentru A/C și protocoale exotice)

Pentru proiecte de tip “smart remote” (mai ales cu aparate de aer condiționat), biblioteca IRremoteESP8266 e o opțiune bună. Are multe implementări specifice. Pentru recepție simplă de telecomandă TV, Arduino-IRremote e, de obicei, suficient.


7) Probleme frecvente și depanare

  • Nu apare nimic în Serial Monitor:
    • Verifică alimentarea (VCC=3.3V, GND comun).
    • Verifică pinul GPIO selectat (și că este setat corect în cod).
    • Testează telecomanda cu camera telefonului (ar trebui să vezi LED-ul IR pâlpâind).
  • Primești “UNKNOWN” sau valori instabile:
    • Evită lumina solară directă pe receptor; LED-uri puternice pot produce zgomot.
    • Apropie telecomanda și aliniaz-o cu receptorul (unghi/distanță).
    • Încearcă să afișezi RAW timings și să confirmi că semnalul e coerent.
  • Resetări/boot ciudat la ESP32:
    • Mută semnalul de pe pini sensibili la boot (schimbă GPIO-ul pe unul “safe”).

8) Recomandări de proiecte cu KY-022 + ESP32

  • Control local pentru benzi LED / iluminat (mapare butoane → scene Home Assistant prin MQTT).
  • Receptor IR “bridge” (IR → Wi-Fi) pentru echipamente vechi fără conectivitate.
  • Înregistrare coduri telecomandă și replicare cu un emițător IR (ex. KY-005 + tranzistor + LED IR).

Concluzie: KY-022 este o soluție simplă și ieftină pentru recepție IR. Cheia integrării corecte cu ESP32 este alimentarea la 3.3V și folosirea unei biblioteci de decodare care știe protocoalele uzuale.

Susține acest blog

Cumpărând de pe https://mag.automatic-house.ro/ro/ susții blogul meu, iar 10% din vânzări vor fi direcționate către Fundația Dăruiește Viață. Îți mulțumesc!

Mulțumesc pentru atenție! 

Pentru întrebări și/sau consultanță tehnică vă stau la dispoziție pe blog mai jos în secțiunea de comentarii sau pe email simedruflorin@automatic-house.ro.
O zi plăcută tuturor !

Back to top of page

De Florin Simedru

Autor

Lasă un răspuns

Adresa ta de email nu va fi publicată. Câmpurile obligatorii sunt marcate cu *


Perioada de verificare reCAPTCHA a expirat. Vă rugăm să reîncărcați pagina.