Обзор
KY-022 — это инфракрасный (IR) приемник на базе demodulator‑модуля, способный детектировать сигналы с несущей 38кГц. Модуль часто используется в проектах, где требуется принимать команды от пультов ДУ, например для домашней автоматики, робототехники и беспроводного управления.
KY-022 — IR‑приемник с demodulator‑модулем, работающий на частоте 38кГц. Он выдаёт цифровой сигнал (0/1) после демодуляции и подходит для большинства бытовых ИК‑пультов. Встроенный светодиод информирует о приёме сигнала. Питание: 3.3–5В.
О датчике инфракрасного приема KY-022
KY-022 — это готовый модуль с инфракрасным приемником (часто на базе VS1838B или аналога), который предназначен для приёма сигналов, модулированных на частоте 38кГц. Приёмник содержит встроенный демодулятор и усилитель, на выходе выдаёт чистый цифровой сигнал (HIGH/LOW), соответствующий наличию или отсутствию несущей. Модуль также имеет светодиодный индикатор, который мигает при обнаружении ИК‑сигнала.
Модуль работает от 3.3В до 5В и совместим с большинством микроконтроллеров, включая Arduino, ESP32, Raspberry Pi и другие. Он подходит для приёма сигналов от бытовых пультов ДУ (телевизоры, кондиционеры, аудиосистемы), а также для создания собственных ИК‑управляемых проектов. Для пары передатчика используйте модуль KY-005.
Приобретите KY-022
Характеристики KY-022
Полные технические характеристики инфракрасного приемника KY-022.
Распиновка KY-022
Распиновка KY-022 включает три вывода: GND (земля), VCC (питание) и OUT (цифровой выход демодулированного сигнала).
- Выход: цифровой (демодулированный сигнал).
- Видимость: встроенный светодиод мигает при приёме.
- Совместимость: работает с большинством ИК‑пультов (NEC, RC5 и др.).
| № | Название | Тип | Описание | Примечания |
|---|---|---|---|---|
| 1 | - (GND) | Питание | Общая земля | Подключить к GND микроконтроллера |
| 2 | VCC | Питание | Питание модуля | 3.3В или 5В (совместимо) |
| 3 | OUT (S) | Выход | Цифровой выход (demodulated IR) | Подключить к цифровому GPIO |
Подключение KY-022 к ESP32
Для подключения KY-022 к ESP32 необходимо соединить три вывода модуля с соответствующими пинами микроконтроллера. Модуль работает как обычный цифровой вход: когда принимает 38кГц сигнал, на выводе OUT появляются соответствующие импульсы, которые декодируются программно.
| Вывод KY-022 | Подключение | Вывод ESP32 | Описание |
|---|---|---|---|
| - (GND) обязательно | → | GND | Общая земля |
| VCC обязательно | → | 3.3V | Питание (рекомендуется 3.3В) |
| OUT обязательно | → | GPIO4 | Цифровой вход (любой GPIO) |
Устранение неполадок KY-022
Распространённые проблемы и решения, которые помогут запустить модуль.
Датчик не реагирует на пульт
Нет сигнала на выходе при нажатии кнопок
Причины: неправильное подключение, отсутствие питания, неработающий пульт, частотное несоответствие.
Решение: проверьте GND/VCC/OUT, убедитесь что питание есть (3.3В или 5В), проверьте пульт (батарейки, направление), убедитесь что пульт использует 38кГц модуляцию. Встроенный LED должен мигать при приёме.
Постоянный сигнал на выходе
OUT всегда в HIGH или зависает
Возможные причины: помехи от разных источников света (солнце, лампы), отсутствие фильтрации в коде, неподходящий пины.
Решение: избегайте прямого солнечного света, используйте калибровочные задержки в коде, проверьте что пин не используется другими периферийными устройствами. Для фильтрации добавьте проверку длительности импульсов.
IRremote не находит сигнал
Библиотека IRremote ничего не выводит
Причины: неверный пин в `IRrecv irrecv(RECV_PIN)`, конфликт прерываний, несовместимость протокола.
Решение: укажите правильный доступный GPIO, избегайте пинов с особым назначением. Для ESP32 используйте `IRrecv irrecv(GPIO_NUM_4)`. Также можно включить декодирование нескольких протоколов через `irrecv.setUnknownThreshold()`.
Неправильные коды при декодировании
Код не совпадает с ожидаемым
Причины: низкое SNR, помехи, разная расстановка битов у производителей.
Решение: убедитесь в достаточной близости пульта к приёмнику, используйте `decode_results` для анализа длительности маркеров/пробелов. Можно реализовать собственный декодер, если нужны специфические протоколы.
Советы по отладке
Serial монитор
Проверка логов и ошибок
Проверка напряжения
Мультиметр и целостность цепи
Дополнительные ресурсы
Примеры программирования KY-022
Готовые к использованию примеры кода для различных платформ и фреймворков
Пример для Arduino
Совместим с Arduino IDE и платами ESP32
C++
Пример для Arduino
Совместим с Arduino IDE и платами ESP32
#include <IRremote.h>
const int RECV_PIN = 11; // Пин подключения KY-022
IRrecv irrecv(RECV_PIN);
decode_results results;
void setup() {
Serial.begin(9600);
irrecv.enableIRIn(); // Запуск приёмника
Serial.println("KY-022 Infrared Receiver Test");
}
void loop() {
if (irrecv.decode(&results)) {
Serial.print("Получен код: ");
Serial.println(results.value, HEX);
irrecv.resume(); // Готовность к приёму следующего сигнала
}
delay(100); // Небольшая пауза для стабильности
}
Пример для Arduino использует библиотеку IRremote для работы с IR‑приёмником KY-022. В setup() запускается последовательный порт и инициализируется приёмник. В loop() проверяется наличие декодированного сигнала; при успехе его HEX‑код выводится в монитор порта. Задержка 100 мс стабилизирует считывание.
Требуемая библиотека
Установите IRremote через менеджер библиотек Arduino IDE:
- Sketch → Include Library → Manage Libraries.
- Найдите ‘IRremote’ и установите.
Или загрузите с официального репозитория:
Пример для ESP-IDF
Официальный фреймворк Espressif для разработки IoT
C++
Пример для ESP-IDF
Официальный фреймворк Espressif для разработки IoT
#include <stdio.h>
#include "freertos/FreeRTOS.h"
#include "freertos/task.h"
#include "driver/rmt.h"
#define RMT_RX_CHANNEL RMT_CHANNEL_0
#define RMT_RX_GPIO GPIO_NUM_4
#define RMT_CLK_DIV 80
#define RMT_TICK_10_US (80000000 / RMT_CLK_DIV / 100000)
void app_main(void) {
rmt_config_t rmt_rx_config = {
.rmt_mode = RMT_MODE_RX,
.channel = RMT_RX_CHANNEL,
.gpio_num = RMT_RX_GPIO,
.clk_div = RMT_CLK_DIV,
.mem_block_num = 1,
.rx_config = {
.filter_en = true,
.filter_ticks_thresh = 100,
.idle_threshold = RMT_TICK_10_US * 1000,
}
};
rmt_config(&rmt_rx_config);
rmt_driver_install(rmt_rx_config.channel, 1000, 0);
ir_parser_config_t ir_parser_config = IR_PARSER_DEFAULT_CONFIG((ir_dev_t)rmt_rx_config.channel);
ir_parser_config.flags |= IR_TOOLS_FLAGS_PROTO_NEC;
ir_parser_handle_t ir_parser = ir_parser_rmt_new_nec(&ir_parser_config);
RingbufHandle_t rb = NULL;
rmt_get_ringbuf_handle(rmt_rx_config.channel, &rb);
rmt_rx_start(rmt_rx_config.channel, true);
printf("KY-022 Infrared Receiver Test\n");
while (1) {
size_t rx_size = 0;
rmt_item32_t *items = (rmt_item32_t *)xRingbufferReceive(rb, &rx_size, pdMS_TO_TICKS(1000));
if (items) {
ir_nec_data_t nec_data;
if (ir_parser->input(ir_parser, items, rx_size / 4) == ESP_OK) {
if (ir_parser->get_scan_code(ir_parser, &nec_data) == ESP_OK) {
printf("Received NEC code: 0x%08X\n", nec_data);
}
}
vRingbufferReturnItem(rb, (void *)items);
}
}
}
Этот пример ESP‑IDF настраивает RMT‑драйвер на ESP32 для приёма ИК‑сигналов через KY‑022 на GPIO4. Используется компонент ir_tools для парсинга протокола NEC. Код инициализирует RMT в режиме приёма, запускает парсер, а в бесконечном цикле считывает данные из ringbuffer и выводит принятые коды в шестнадцатеричном виде.
Пример для ESPHome
Конфигурация ESPHome для Home Assistant
YAML
Пример для ESPHome
Конфигурация ESPHome для Home Assistant
remote_receiver:
- pin: GPIO4
dump: all
id: ir_receiver
tolerance: 25%
buffer_size: 2kb
filter: 50us
binary_sensor:
- platform: remote_receiver
name: "KY-022 IR Signal Received"
remote_receiver_id: ir_receiver
Конфигурация ESPHome задаёт параметры ИК‑приёмника на GPIO4. dump: all включает логирование всех принятых сигналов. Параметры tolerance и filter улучшают стабильность распознавания. Создаётся бинарный сенсор, который срабатывает при получении любого сигнала и передаётся в Home Assistant.
Пример для PlatformIO
Профессиональная среда разработки
C++
Пример для PlatformIO
Профессиональная среда разработки
platformio.ini
[env:esp32]
platform = espressif32
board = esp32dev
framework = arduino
monitor_speed = 115200
lib_deps =
z3t0/IRremote
main.cpp
#include <Arduino.h>
#include <IRremote.h>
#define RECV_PIN 4 // Пин подключения KY-022
IRrecv irrecv(RECV_PIN);
decode_results results;
void setup() {
Serial.begin(115200);
Wire.begin(21, 22); // I2C не требуется для KY-022, только для примера
// Инициализация IR‑приёмника
if (!irrecv.begin(RECV_PIN, true)) { // true = прерывание включено
Serial.println("IR‑приёмник не инициализирован!");
while (1);
}
Serial.println("KY-022 Infrared Receiver Test");
}
void loop() {
if (irrecv.decode(&results)) {
Serial.printf("Получен IR код: 0x%lX\n", results.value);
irrecv.resume(); // Готовность к следующему приёму
}
delay(100);
}
Файл platformio.ini настраивает плату ESP32 и подключает библиотеку IRremote. В main.cpp инициализируется IR‑приёмник на GPIO4. При получении сигнала его шестнадцатеричный код выводится в монитор порта. Библиотека автоматически обрабатывает различные ИК‑протоколы (NEC, Sony, RC5 и др.).
Пример для MicroPython
Python для микроконтроллеров
Python
Пример для MicroPython
Python для микроконтроллеров
from machine import Pin, Timer
import time
IR_PIN = Pin(4, Pin.IN) # Пин подключения KY-022
# Глобальные переменные для захвата сигнала
pulses = []
last_tick = 0
def ir_callback(pin):
global last_tick, pulses
current_tick = time.ticks_us()
if last_tick > 0:
pulse_len = time.ticks_diff(current_tick, last_tick)
pulses.append(pulse_len)
last_tick = current_tick
# Прерывание по фронту (+Rising+Falling)
IR_PIN.irq(trigger=Pin.IRQ_FALLING | Pin.IRQ_RISING, handler=ir_callback)
print("KY-022 Infrared Receiver Test (MicroPython)")
while True:
if len(pulses) > 0:
print("Количество импульсов:", len(pulses))
# Можно добавить парсинг по длительностям (NEC, RC5 и др.)
pulses = [] # Сброс после обработки
time.sleep(0.1)
Этот скрипт MicroPython настраивает GPIO4 как вход для KY‑022 и использует прерывание для захвата длительностей между перепадами сигнала. Массив pulses содержит таймстемпы в микросекундах, которые потом можно обработать вручную для определения протокола. Основной цикл выводит количество захваченных импульсов. Для готового парсинга можно использовать библиотеку micropython_ir (если доступна).
Итоги KY-022
Инфракрасный приёмник **KY-022** — это простой, но эффективный модуль для приёма ИК‑сигналов с пультов ДУ. Он совместим с Arduino, ESP32 (ESP‑IDF/PlatformIO), ESPHome и MicroPython, а также отлично подходит для домашней автоматики и обучающих проектов.
Рекомендации
Размещайте модуль вдали от источников солнечного света и мощных LED, направляйте пульт прямо на приёмник в пределах 5–8 метров. Для надёжности используйте библиотеку IRremote с правильной настройкой пина и проверяйте, что выбранный GPIO не конфликтует с другими функциями.
Безопасность прежде всего
Пины модуля не защищены от переполюсовки. Подключайте VCC только к 3.3В (рекомендуется) или 5В, но строго соблюдайте полярность. Не замыкайте OUTPUT на VCC/GND — это может повредить демодулятор.
Готовы начать создавать?
Теперь, когда у вас есть вся необходимая информация, пора интегрировать KY-022 в проект на ESP32 и воплотить идеи в жизнь!
Изучите альтернативные датчики
Ищете альтернативы **KY-022**? Посмотрите эти похожие датчики — возможно, они лучше подойдут под задачи вашего проекта.

KY-050 Ультразвуковой датчик расстояния
KY-050 — это ультразвуковой датчик расстояния, способный измерять дистанцию от 2 см до 300 см с высоким разрешением...

KY-034 Модуль автоматического цветного светодиода
KY-034 — это модуль автоматически мигающего семицветного светодиода. Идеально подходит для декоративной подсветки и индикации...

KY-054 Модуль фототранзистора
KY-054 — это модуль фототранзистора, который определяет уровень освещенности и выдает аналоговое напряжение...

KY-005 Модуль ИК-передатчика
KY-005 — это модуль инфракрасного передатчика (38кГц). Отличная пара для приемника KY-022. Соберите свой пульт ДУ...