ИК-приёмник и пульт: проекты с дистанционным управлением на Arduino
Как работает инфракрасный (ИК) приёмник? Подключение VS1838B, чтение кодов кнопок библиотекой IRremote, протокол NEC, управление светодиодами и реле с пульта, отправка ИК-сигнала ИК-светодиодом, работа с ESP32 и Pico.
Пульты от телевизоров, кондиционеров и музыкальных центров работают на инфракрасном (ИК) свете. Добавь к Arduino ИК-приёмник, который стоит копейки, и ты сможешь считывать кнопки почти любого пульта в доме и управлять ими лампами, светодиодами, моторами или музыкой. Не нужны ни сопряжение, ни приложение, ни интернет: просто направь пульт на плату и нажми кнопку. Это самый простой и дешёвый путь к первому проекту с дистанционным управлением.

Как работает инфракрасный пульт?
ИК-светодиод на конце пульта излучает свет с длиной волны около 940 нм, которую глаз не видит. Свет горит не постоянно: он передаётся на несущей частоте, мигая 38 000 раз в секунду. Схема внутри приёмника реагирует только на свет, мерцающий с этой частотой, поэтому солнце и лампы не мешают сигналу. Приёмник превращает мерцание в чистые цифровые импульсы и, пока сигнал есть, держит выход в LOW.
Какая кнопка нажата, закодировано в длительности импульсов и пауз между ними. Для этого есть разные «языки», которые называют протоколами: самый распространённый — NEC (байт адреса и байт команды), также часто встречаются протоколы Sony, RC5 (Philips) и Samsung. К счастью, декодированием занимается библиотека, тебе остаётся только прочитать код кнопки.
Характеристики (VS1838B)
| Параметр | Значение |
|---|---|
| Несущая частота | 38 kHz |
| Длина волны | Около 940 нм |
| Питание | 2,7–5,5 V |
| Дальность | 8–10 м (зависит от батарейки пульта и угла) |
| Угол обзора | Около ±35° |
| Выход | LOW, пока есть сигнал (активный LOW) |
| Выводы | OUT, GND, VCC |
Подключение ИК-приёмника
| Вывод приёмника | Arduino Uno | ESP32 | Raspberry Pi Pico |
|---|---|---|---|
| OUT (S) | D2 | GPIO 15 | GP16 |
| GND (–) | GND | GND | GND |
| VCC (+) | 5V | 3V3 | 3V3 |
Чтение кодов кнопок библиотекой IRremote
В «Менеджере библиотек» (Library Manager) найди IRremote и установи библиотеку от Armin Joachimsmeyer. Код ниже работает с версией 4.x: при каждом нажатии кнопки он выводит в монитор порта протокол, адрес и код команды. Если в примерах из интернета встречаются команды вроде IRrecv и decode(&results), они относятся к старой версии.
1#include <IRremote.hpp>
2
3const int IR_PIN = 2;
4
5void setup() {
6 Serial.begin(9600);
7 IrReceiver.begin(IR_PIN, ENABLE_LED_FEEDBACK); // sinyal gelince dahili LED yanar / onboard LED blinks on signal
8}
9
10void loop() {
11 if (IrReceiver.decode()) {
12 Serial.print("Komut / command: 0x");
13 Serial.println(IrReceiver.decodedIRData.command, HEX);
14 IrReceiver.printIRResultShort(&Serial); // protokol ve adres / protocol and address
15 IrReceiver.resume(); // sonraki tuşa hazırlan / ready for the next key
16 }
17}Нажимай кнопки пульта по одной и записывай коды. Маленькие пульты на 21 кнопку из наборов обычно работают по протоколу NEC, и коды у них чаще всего такие, как ниже; но всё равно проверь их, считав коды своего пульта:
| Кнопка | Команда (NEC) |
|---|---|
| CH- | 0x45 |
| CH | 0x46 |
| CH+ | 0x47 |
| PREV | 0x44 |
| NEXT | 0x40 |
| PLAY/PAUSE | 0x43 |
| VOL- | 0x07 |
| VOL+ | 0x15 |
| 0 | 0x16 |
| 1 | 0x0C |
| 2 | 0x18 |
| 3 | 0x5E |
Управление светодиодом и реле с пульта
Когда коды известны, каждой кнопке можно дать свою задачу. В примере ниже кнопка «1» переключает реле, а VOL+ и VOL- задают яркость светодиода через PWM. Если кнопку удерживать, пульт шлёт сигналы повтора; для задач «вкл/выкл» эти повторы нужно игнорировать, иначе реле будет щёлкать туда-обратно. Про подключение реле читай в статье Что такое модуль реле?
1#include <IRremote.hpp>
2
3const int IR_PIN = 2;
4const int LED_PIN = 9; // PWM pini / PWM pin
5const int RELAY_PIN = 7; // aktif LOW röle / active-LOW relay
6
7bool relayOn = false;
8int brightness = 128;
9
10void setup() {
11 pinMode(LED_PIN, OUTPUT);
12 pinMode(RELAY_PIN, OUTPUT);
13 digitalWrite(RELAY_PIN, HIGH);
14 IrReceiver.begin(IR_PIN);
15}
16
17void loop() {
18 if (!IrReceiver.decode()) return;
19 bool repeat = IrReceiver.decodedIRData.flags & IRDATA_FLAGS_IS_REPEAT; // tuş basılı tutuluyor / key held down
20 switch (IrReceiver.decodedIRData.command) {
21 case 0x0C: // "1": röleyi aç-kapa / toggle the relay
22 if (!repeat) {
23 relayOn = !relayOn;
24 digitalWrite(RELAY_PIN, relayOn ? LOW : HIGH);
25 }
26 break;
27 case 0x15: // VOL+: daha parlak / brighter
28 brightness = min(brightness + 15, 255);
29 break;
30 case 0x07: // VOL-: daha sönük / dimmer
31 brightness = max(brightness - 15, 0);
32 break;
33 }
34 analogWrite(LED_PIN, brightness);
35 IrReceiver.resume(); // sonraki tuşa hazırlan / ready for the next key
36}Отправка ИК-сигналов с Arduino
Arduino умеет не только слушать пульты, но и сама быть пультом. Подключи ИК-светодиод (940 нм) к пину 3 Uno через резистор 100 Ω; чтобы увеличить дальность, светодиод можно запитать через транзистор. Сначала считай кодом выше пульт устройства, которым хочешь управлять, чтобы узнать его адрес и команду, затем отправь тот же код с Arduino:
1#include <IRremote.hpp>
2
3const int IR_SEND_PIN = 3; // IR LED, 100 Ω direnç ile / IR LED with a 100 Ω resistor
4
5void setup() {
6 IrSender.begin(IR_SEND_PIN);
7}
8
9void loop() {
10 IrSender.sendNEC(0x00, 0x46, 0); // adres, komut, tekrar sayısı / address, command, repeats
11 delay(5000);
12}ИК на ESP32 и Raspberry Pi Pico
VS1838B нормально работает от 3,3 V, поэтому подключается к ESP32 и Pico напрямую. Библиотека IRremote поддерживает ESP32; приёмник можно подключить к любому входному пину, например к GPIO 15. С ESP32 можно пересылать нажатия кнопок пульта на другие устройства по Wi-Fi или собрать «умный пульт», который передаёт команды с телефона на телевизор через ИК-светодиод. На Pico с MicroPython используют библиотеку micropython_ir от Peter Hinch:
1from machine import Pin
2from ir_rx.nec import NEC_8 # micropython_ir kütüphanesi / library (Peter Hinch)
3import time
4
5def on_key(command, address, ctrl):
6 if command >= 0: # negatif değerler tekrar ya da hata / negatives mean repeat or error
7 print("Komut / command: 0x{:02X}".format(command))
8
9ir = NEC_8(Pin(16, Pin.IN), on_key) # GP16 → OUT
10
11while True:
12 time.sleep(1)Идеи проектов с ИК-приёмником и пультом
- Лампа с пультом: включай сетевую лампу через реле свободной кнопкой пульта от телевизора.
- Цветной пульт: меняй цвет RGB-светодиода цифровыми кнопками.
- Машинка-робот на пульте: машинка с двумя моторами, которой рулят кнопками-стрелками.
- Музыкальная шкатулка: назначь каждой цифровой кнопке свою мелодию; про звук читай в статье Что такое зуммер?
- Обучаемый пульт: записывай коды других пультов и отправляй их с одной Arduino.
- Кодовый замок: открывай замок сервоприводом, когда введена правильная последовательность кнопок.
Частые ошибки и как их исправить
- Коды вообще не приходят: провод OUT подключён не к тому пину, что в коде, ножки приёмника перепутаны или села батарейка пульта; проверь пульт камерой телефона.
- Пример не компилируется: старые примеры из интернета написаны для IRremote 2.x; в версии 4.x используются IrReceiver.begin() и IrReceiver.decode().
- Появляются случайные коды: возможно, на приёмник падает прямой солнечный свет или свет люминесцентной лампы; переставь его в тень.
- Кнопка «вкл/выкл» срабатывает дважды: сигналы повтора не игнорируются; проверь флаг IRDATA_FLAGS_IS_REPEAT.
- tone() или PWM на пинах 3 и 11 работают странно: на Uno они используют тот же таймер (Timer2), что и IRremote.
- Очень маленькая дальность при отправке ИК-светодиодом: запитай светодиод большим током через транзистор и направь его на устройство.
ИК-приёмник — самый простой и дешёвый способ перейти на беспроводное управление; даже старые пульты, которые валяются дома, получают вторую жизнь в новых проектах. В приложении BlueGrays есть проекты со схемами и кодом: чтение кодов пульта, переключение светодиодов, мелодии с пульта, управление сетевой лампой и универсальный пульт на ESP32.
Частые вопросы
На каком расстоянии ИК-приёмник ловит сигнал?
Приёмники вроде VS1838B ловят сигнал на расстоянии до 8–10 метров при хорошем пульте и прямой видимости. Дальность уменьшается, когда садится батарейка пульта, растёт угол и становится светлее вокруг.
Любой ли пульт работает с Arduino?
Работают почти все инфракрасные пульты на 38 kHz, а IRremote декодирует большинство распространённых протоколов. С пультами на 36, 40 или 56 kHz дальность может быть меньше. Радиопульты (например, на 433 MHz) ИК-приёмником прочитать нельзя.
Работает ли ИК-приёмник на солнце?
Фильтр внутри приёмника в основном подавляет постоянный свет, но прямое солнце может «ослепить» приёмник и сильно уменьшить дальность. На улице держи приёмник в тени или в небольшой защитной трубке.
Работает ли ИК-пульт через стену?
Нет. Инфракрасный свет не проходит сквозь стены: между пультом и приёмником нужна прямая видимость или поверхность, от которой свет может отразиться. Чтобы управлять устройством в другой комнате, используй радиомодули или Wi-Fi.
Какую версию IRremote использовать?
Используй актуальную версию 4.x с IrReceiver.begin(), IrReceiver.decode() и decodedIRData.command. Команды IRrecv irrecv(pin) и decode(&results) из старых примеров в интернете относятся к версии 2.x и с новой версией несовместимы.
Можно ли использовать телефон как пульт?
В некоторых телефонах на Android есть встроенный ИК-передатчик, и с подходящим приложением они работают как пульт. Если в телефоне нет ИК, можно поднять веб-страницу на ESP32 и отправлять команды с телефона на устройство через ИК-светодиод.
Что собрать после прочтения
Все проекты
Чтение кодов ИК-пульта
Каждая кнопка на пульте от телевизора отправляет секретный код светом, которого ты не видишь. ИК-приёмник ловит этот свет, а Arduino выводит на экран компьютера код каждой нажатой кнопки. Узнав эти ко

Включение светодиода ИК-приёмником и пультом
Как будто управляешь тремя отдельными лампами, не вставая с кресла: клавиши 1, 2 и 3 на пульте включают синий, красный и зелёный светодиоды, а клавиши 4, 5 и 6 выключают их в том же порядке. Клавиша п

Мелодии с ИК-пультом и зуммером
Собери музыкальную шкатулку, которая играет мелодии по кнопкам пульта от телевизора. Инфракрасный приёмник ловит сигнал пульта; одна кнопка играет на зуммере весёлую мелодию из видеоигры, другая — зна

Включение лампы 220V пультом
Включай и выключай настоящую лампу у себя дома пультом от телевизора, не вставая с дивана. Arduino читает невидимый световой сигнал пульта; кнопка питания щёлкает реле и включает лампу, а кнопка отклю

Лазерная охранная система
Совсем как сцены ограблений с лазерами в фильмах: лазерный луч светит на датчик освещённости, и как только кто-то входит и прерывает луч, загорается красный светодиод и начинает звучать зуммер. Сигнал

Пульт ДУ с ИК-приёмником на ESP32 (с экраном LCD)
В этом проекте модуль ИК-приёмника TSOP4838 ловит сигналы пульта от телевизора, кондиционера или любого другого инфракрасного пульта с помощью ESP32. С библиотекой IRremote v4 расшифрованные ненулевые сырые коды выводятся на I2C LCD-экран. Этот пример помогает узнать коды пульта; включения, выключения или регулировки яркости светодиода с пульта в нём нет. Отличная отправная точка, чтобы превратить старые пульты в управление умным домом.

Универсальный ИК-пульт на ESP32 (ИК-приёмник + пульт + 3 светодиода + зуммер + OLED)
С ESP32 можно читать обычный ИК-пульт и управлять с него своим устройством! В этом проекте инфракрасный приёмник (протокол NEC, 38 kHz) ловит сигналы 20-кнопочного ИК-пульта. Каждой кнопке задано своё действие: кнопки 1, 2 и 3 переключают три отдельных светодиода, кнопка PWR выключает все, а цифры 4–9 показывают на OLED особые символы. OLED-дисплей SSD1306 крупно показывает последнюю нажатую кнопку и описание действия.

Лазерная сигнализация
Ты ставишь невидимую лучевую ограду, совсем как в кино. Лазер светит на датчик освещённости с другой стороны; как только кто-то проходит и прерывает луч, загорается светодиод и звучит зуммер, а когда
Другие статьи
Приложение BlueGrays
Собери эту схему шаг за шагом в телефоне
Схема подключения, код и список деталей на одном экране. 200+ проектов на Arduino, ESP32 и Pico готовы к сборке.
Наведи камеру телефона
Наведи камеру на код — откроется магазин приложений на телефоне.
или открыть магазин

