ИК-приёмник (IR Receiver)
Научитесь принимать сигналы от пультов дистанционного управления с помощью ИК-приёмника и ESP32.
Подготовка оборудования
ESP32 DevKit
Любая версия
ИК-приёмник VS1838B
Принимает ИК-сигналы 38 кГц
Пульт ДУ
Любой ИК-пульт (от телевизора/DVD)
Провода
Dupont «папа-папа»
Как работает ИК-приёмник
Принцип работы
ИК-приёмник — это фотодиод с полосовым фильтром на 38 кГц. Пульт ДУ передаёт ИК-вспышки, модулированные на частоте 38 кГц. Приёмник демодулирует сигнал и выдаёт цифровые импульсы.
NEC Команды 32 бита Большинство пультов RC5 Команды 14 бит Philips пульты Sony SIRC Команды 12-20 бит Sony устройства Каждая кнопка на пульте имеет уникальный шестнадцатеричный код. Прочитав этот код, ESP32 может выполнять различные действия.
Распиновка VS1838B
Подключить к GPIO ESP32
GND ESP32
3.3V ESP32
Схема подключения
Подключение ИК-приёмника к ESP32
OUT Выход сигнала → GPIO 15 ESP32
GND Земля → GND ESP32
VCC Питание → 3.3V ESP32
Установка библиотеки 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(); // Готовы к следующему сигналу
}
} Управление по кнопкам пульта
#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();
}
} Практическое применение
Умный дом
Управляйте освещением, вентиляторами и другими устройствами с обычного пульта ДУ
Роботы
Дистанционное управление роботом: движение вперёд/назад, поворот
Мультимедиа
Управляйте воспроизведением медиафайлов или презентациями
Решение проблем
❌ Приёмник не реагирует на пульт
✅ Убедитесь что VCC = 3.3V (не 5V), проверьте номер GPIO
❌ Код всегда 0x00 или 0xFFFF
✅ Нажимайте кнопку кратко — долгое нажатие даёт код повтора
❌ Ошибка компиляции
✅ Обновите библиотеку IRremote до версии 4.x
❌ Пульт не определяется
✅ Добавьте Serial.println(IrReceiver.decodedIRData.protocol) для диагностики
Цех Испытаний
Отточите мастерство на реальных кейсах. Каждая карта — это шаг к полному пониманию дистанционного управления.
Сканер пульта
Первый шаг — узнать язык пульта. Читаем коды кнопок напрямую.
Подключите ИК-приёмник VS1838B к пину GPIO 15. Загрузите скетч с IrReceiver.decode(). При каждом нажатии любой кнопки пульта выводите в Serial Monitor значение IrReceiver.decodedIRData.command в HEX формате. Запишите коды для кнопок 0–9 вашего пульта.
Выключатель
Управляем светодиодом двумя кнопками пульта.
Подключите светодиод к GPIO 2 через резистор 220 Ом. Определите коды кнопок '1' и '2' вашего пульта. Напишите switch-case: при нажатии '1' — digitalWrite(2, HIGH), при нажатии '2' — digitalWrite(2, LOW). Проверьте, что пульт работает с расстояния не менее 3 метров.
Пульт 4 огня
Четыре кнопки — четыре светодиода. Каждый управляется отдельно.
Подключите 4 светодиода к GPIO 2, 4, 5, 18. Настройте 4 кнопки пульта (1, 2, 3, 4): каждое нажатие переключает состояние соответствующего светодиода (вкл если выкл, и наоборот). Кнопка '0' гасит все 4 светодиода одновременно.
Регулятор яркости
Кнопки +/- на пульте управляют яркостью через ШИМ.
Подключите светодиод к GPIO 2 (пин с поддержкой PWM). Задайте начальную яркость brightness = 128. Кнопка '+' на пульте увеличивает brightness на 26 (≈10%), кнопка '-' уменьшает на 26. Ограничьте диапазон: 0..255. Применяйте через analogWrite(2, brightness) при каждом нажатии. Выводите текущее значение в Serial.
Универсальный ДУ
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().
Свой Проект
Создайте свою уникальную модель в онлайн-симуляторе. Ограничений нет!
🎉 Урок завершён!
Теперь ESP32 может принимать команды с любого ИК-пульта дистанционного управления
Что мы изучили:
- ✓ Принцип работы ИК-связи и протокол NEC
- ✓ Подключение ИК-приёмника VS1838B к ESP32
- ✓ Чтение кодов кнопок с пульта через IRremote
- ✓ Создание системы управления по кнопкам пульта
Назад к урокам:
📚Все уроки
Вернуться к списку уроков