Инфракрасный приемник KY-022

Узнайте всё об инфракрасном приемнике KY-022: спецификации, распиновка, схемы подключения, даташит и примеры кода для Arduino, ESP32, ESP-IDF, PlatformIO, MicroPython

Инфракрасный 38kHz

Обзор

KY-022 — это инфракрасный (IR) приемник на базе demodulator‑модуля, способный детектировать сигналы с несущей 38кГц. Модуль часто используется в проектах, где требуется принимать команды от пультов ДУ, например для домашней автоматики, робототехники и беспроводного управления.

KY-022 — IR‑приемник с demodulator‑модулем, работающий на частоте 38кГц. Он выдаёт цифровой сигнал (0/1) после демодуляции и подходит для большинства бытовых ИК‑пультов. Встроенный светодиод информирует о приёме сигнала. Питание: 3.3–5В.

Инфракрасный приемник KY-022
Быстрая навигация
Основные разделы статьи
Примеры кода
Популярные платформы

О датчике инфракрасного приема KY-022

KY-022 — это готовый модуль с инфракрасным приемником (часто на базе VS1838B или аналога), который предназначен для приёма сигналов, модулированных на частоте 38кГц. Приёмник содержит встроенный демодулятор и усилитель, на выходе выдаёт чистый цифровой сигнал (HIGH/LOW), соответствующий наличию или отсутствию несущей. Модуль также имеет светодиодный индикатор, который мигает при обнаружении ИК‑сигнала.

Модуль работает от 3.3В до 5В и совместим с большинством микроконтроллеров, включая Arduino, ESP32, Raspberry Pi и другие. Он подходит для приёма сигналов от бытовых пультов ДУ (телевизоры, кондиционеры, аудиосистемы), а также для создания собственных ИК‑управляемых проектов. Для пары передатчика используйте модуль KY-005.

Где купить

Приобретите KY-022

Технические характеристики

Характеристики KY-022

Полные технические характеристики инфракрасного приемника KY-022.

Напряжение питания
3.3 – 5 В
Ток потребления
0.4 – 1.5 мА
Радиус действия
до 18 м
Угол приёма
±45°
Несущая частота
38 кГц
Выход
Цифровой (demodulated)
Скачать полный даташит
Конфигурация пинов

Распиновка KY-022

Распиновка KY-022 включает три вывода: GND (земля), VCC (питание) и OUT (цифровой выход демодулированного сигнала).

Визуальная диаграмма распиновки
Основное
Распиновка KY-022
Всего выводов
3
Типы
Питание + цифровой
Быстрые советы
  • Выход: цифровой (демодулированный сигнал).
  • Видимость: встроенный светодиод мигает при приёме.
  • Совместимость: работает с большинством ИК‑пультов (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
Подключений
3
Статус
Все обязательны
Протокол
Цифровой вход (PWM)
Подключения пинов
Вывод KY-022 Подключение Вывод ESP32 Описание
- (GND) обязательно GND Общая земля
VCC обязательно 3.3V Питание (рекомендуется 3.3В)
OUT обязательно GPIO4 Цифровой вход (любой GPIO)
📍 Частота: 38кГц 🔌 Выход: цифровой (demodulated) ⚡ Питание: 3.3Б (рекомендуется) 📡 Угол приёма: ±45° 🎯 Радиус: до 18 м 💡 Индикация: встроенный LED 🔗 Пара: KY-005 (передатчик)
Помощь и поддержка

Устранение неполадок 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 монитор
Проверка логов и ошибок
Используйте Serial монитор для вывода полученных кодов (например, `results.value, HEX`). Это позволяет убедиться, что сигнал принимается и декодируется. При отсутствии вывода проверьте инициализацию приёмника и корректность пина.
Проверка напряжения
Мультиметр и целостность цепи
Проверьте мультиметром наличие питания на выводах VCC и GND. Убедитесь, что уровень напряжения соответствует заявленному (3.3В или 5В). Проверьте цепь вывода OUT на обрыв или короткое замыкание.

Дополнительные ресурсы

Примеры кода

Примеры программирования KY-022

Готовые к использованию примеры кода для различных платформ и фреймворков

Пример для Arduino

Совместим с Arduino IDE и платами ESP32

C++
#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:

  1. SketchInclude LibraryManage Libraries.
  2. Найдите ‘IRremote’ и установите.

Или загрузите с официального репозитория:

🔗 Библиотека IRremote

Пример для ESP-IDF

Официальный фреймворк Espressif для разработки IoT

C++
#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
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.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
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**? Посмотрите эти похожие датчики — возможно, они лучше подойдут под задачи вашего проекта.