Урок 11 Начинающий 35 минут

ИК-приёмник (IR Receiver)

Научитесь принимать сигналы от пультов дистанционного управления с помощью ИК-приёмника и ESP32.

1

Подготовка оборудования

Компоненты для урока по ИК-приёмнику: ESP32, VS1838B, пульт ДУ, провода

ESP32 DevKit

Любая версия

📡

ИК-приёмник VS1838B

Принимает ИК-сигналы 38 кГц

📺

Пульт ДУ

Любой ИК-пульт (от телевизора/DVD)

🔗

Провода

Dupont «папа-папа»

2

Как работает ИК-приёмник

Принцип работы

ИК-приёмник — это фотодиод с полосовым фильтром на 38 кГц. Пульт ДУ передаёт ИК-вспышки, модулированные на частоте 38 кГц. Приёмник демодулирует сигнал и выдаёт цифровые импульсы.

NEC Команды 32 бита Большинство пультов
RC5 Команды 14 бит Philips пульты
Sony SIRC Команды 12-20 бит Sony устройства
💡

Каждая кнопка на пульте имеет уникальный шестнадцатеричный код. Прочитав этот код, ESP32 может выполнять различные действия.

Принцип работы ИК-приёмника: модуляция 38кГц, демодуляция, цифровой сигнал

Распиновка VS1838B

Распиновка ИК-приёмника VS1838B: OUT, GND, VCC
OUT (сигнал) Выходной сигнал

Подключить к GPIO ESP32

GND (земля) Общий провод

GND ESP32

VCC (питание) Питание 3.3-5V

3.3V ESP32

3

Схема подключения

Схема подключения ИК-приёмника VS1838B к ESP32

Подключение ИК-приёмника к ESP32

1

OUT Выход сигнала → GPIO 15 ESP32

2

GND Земля → GND ESP32

3

VCC Питание → 3.3V ESP32

4

Установка библиотеки IRremote

Для работы с ИК-приёмником нужна библиотека IRremote. Откройте Arduino IDE → Менеджер библиотек → введите в поиск "IRremote" → установите "IRremote by shirriff, z3t0, ArminJo".

// Чтение кодов с ИК-пульта
#include <IRremote.hpp>

#define IR_RECEIVE_PIN 15

void setup() {
  Serial.begin(115200);
  IrReceiver.begin(IR_RECEIVE_PIN, ENABLE_LED_FEEDBACK);
  Serial.println("ИК-приёмник готов. Нажмите кнопку на пульте...");
}

void loop() {
  if (IrReceiver.decode()) {
    Serial.print("Протокол: ");
    Serial.print(IrReceiver.decodedIRData.protocol);
    Serial.print(" | Адрес: 0x");
    Serial.print(IrReceiver.decodedIRData.address, HEX);
    Serial.print(" | Команда: 0x");
    Serial.println(IrReceiver.decodedIRData.command, HEX);
    IrReceiver.resume(); // Готовы к следующему сигналу
  }
}
5

Управление по кнопкам пульта

Serial Monitor: вывод протокола, адреса и команды при нажатии кнопок пульта
#include <IRremote.hpp>

#define IR_RECEIVE_PIN 15
#define LED_PIN 2

// Коды кнопок (замените на свои!)
#define BTN_1  0x45
#define BTN_2  0x46
#define BTN_3  0x47
#define BTN_OK 0x1C

bool ledState = false;

void setup() {
  Serial.begin(115200);
  IrReceiver.begin(IR_RECEIVE_PIN, ENABLE_LED_FEEDBACK);
  pinMode(LED_PIN, OUTPUT);
  Serial.println("Ожидание команды с пульта...");
}

void loop() {
  if (IrReceiver.decode()) {
    uint8_t cmd = IrReceiver.decodedIRData.command;

    switch(cmd) {
      case BTN_1:
        Serial.println("Кнопка 1 — Светодиод ВКЛ");
        digitalWrite(LED_PIN, HIGH);
        break;
      case BTN_2:
        Serial.println("Кнопка 2 — Светодиод ВЫКЛ");
        digitalWrite(LED_PIN, LOW);
        break;
      case BTN_OK:
        ledState = !ledState;
        digitalWrite(LED_PIN, ledState);
        Serial.println(ledState ? "OK — ВКЛ" : "OK — ВЫКЛ");
        break;
    }
    IrReceiver.resume();
  }
}
6

Практическое применение

Применения ИК-приёмника: умный дом, роботы, мультимедиа
🏠

Умный дом

Управляйте освещением, вентиляторами и другими устройствами с обычного пульта ДУ

🤖

Роботы

Дистанционное управление роботом: движение вперёд/назад, поворот

🎵

Мультимедиа

Управляйте воспроизведением медиафайлов или презентациями

7

Решение проблем

Диагностика проблем с ИК-приёмником VS1838B

❌ Приёмник не реагирует на пульт

✅ Убедитесь что VCC = 3.3V (не 5V), проверьте номер GPIO

❌ Код всегда 0x00 или 0xFFFF

✅ Нажимайте кнопку кратко — долгое нажатие даёт код повтора

❌ Ошибка компиляции

✅ Обновите библиотеку IRremote до версии 4.x

❌ Пульт не определяется

✅ Добавьте Serial.println(IrReceiver.decodedIRData.protocol) для диагностики

8

Цех Испытаний

Отточите мастерство на реальных кейсах. Каждая карта — это шаг к полному пониманию дистанционного управления.

Время прохождения
~90 минут суммарно
📡
Уровень: Start 5m

Сканер пульта

Первый шаг — узнать язык пульта. Читаем коды кнопок напрямую.

Миссия

Подключите ИК-приёмник VS1838B к пину GPIO 15. Загрузите скетч с IrReceiver.decode(). При каждом нажатии любой кнопки пульта выводите в Serial Monitor значение IrReceiver.decodedIRData.command в HEX формате. Запишите коды для кнопок 0–9 вашего пульта.

01
💡
Уровень: Easy 10m

Выключатель

Управляем светодиодом двумя кнопками пульта.

Миссия

Подключите светодиод к GPIO 2 через резистор 220 Ом. Определите коды кнопок '1' и '2' вашего пульта. Напишите switch-case: при нажатии '1' — digitalWrite(2, HIGH), при нажатии '2' — digitalWrite(2, LOW). Проверьте, что пульт работает с расстояния не менее 3 метров.

02
🔆
Уровень: Normal 15m

Пульт 4 огня

Четыре кнопки — четыре светодиода. Каждый управляется отдельно.

Миссия

Подключите 4 светодиода к GPIO 2, 4, 5, 18. Настройте 4 кнопки пульта (1, 2, 3, 4): каждое нажатие переключает состояние соответствующего светодиода (вкл если выкл, и наоборот). Кнопка '0' гасит все 4 светодиода одновременно.

03
🎚️
Уровень: Hard 20m

Регулятор яркости

Кнопки +/- на пульте управляют яркостью через ШИМ.

Миссия

Подключите светодиод к GPIO 2 (пин с поддержкой PWM). Задайте начальную яркость brightness = 128. Кнопка '+' на пульте увеличивает brightness на 26 (≈10%), кнопка '-' уменьшает на 26. Ограничьте диапазон: 0..255. Применяйте через analogWrite(2, brightness) при каждом нажатии. Выводите текущее значение в Serial.

04
🎛️
Уровень: Expert 30m

Универсальный ДУ

10 кнопок пульта включают разные световые эффекты.

Миссия

Реализуйте 10 режимов по кнопкам 0–9: 0 — всё выкл, 1 — постоянный свет, 2 — мигание 500мс, 3 — быстрое мигание 100мс, 4 — двойной проблеск (2×100мс + пауза 1с), 5 — нарастание яркости 0→255 за 2с, 6 — угасание 255→0 за 2с, 7 — дыхание (нарастание + угасание), 8 — SOS (···---···), 9 — случайные мигания random(50,500)мс. Хранить текущий режим в переменной mode и выполнять его в loop().

05
🚀

Свой Проект

Создайте свою уникальную модель в онлайн-симуляторе. Ограничений нет!

Открыть Симулятор →

🎉 Урок завершён!

Теперь ESP32 может принимать команды с любого ИК-пульта дистанционного управления

Что мы изучили:

  • Принцип работы ИК-связи и протокол NEC
  • Подключение ИК-приёмника VS1838B к ESP32
  • Чтение кодов кнопок с пульта через IRremote
  • Создание системы управления по кнопкам пульта