
ИК приемники – ключевой компонент для дистанционного управления проектами на базе Arduino. Модели VS1838B, TSOP38238 и HS0038B работают на частоте 38 кГц, совместимой с большинством пультов ДУ. Для стабильной работы выбирайте приемник с напряжением питания 3.3–5 В, чтобы избежать проблем с логическими уровнями.
Типовая схема подключения требует трех контактов: VCC (к 5V Arduino), GND (к земле) и OUT (к цифровому пину, например, D11). Используйте резистор 10 кОм между OUT и VCC для подтяжки сигнала, если наблюдаются ложные срабатывания. Избегайте длинных проводов (>30 см) – они усиливают помехи.
Библиотека IRremote (версия 3.6.0+) поддерживает декодирование протоколов NEC, RC5 и Sony. Установите ее через менеджер библиотек Arduino IDE, затем загрузите пример IRrecvDemo для проверки. Если приемник не реагирует, проверьте полярность питания и частоту пульта – некоторые модели используют 36 кГц или 40 кГц, что требует корректировки кода.
Для фильтрации помех добавьте конденсатор 10 мкФ между VCC и GND приемника. При работе с мощными ИК светодиодами (например, в системах ретрансляции) используйте отдельный источник питания – Arduino Uno не обеспечит достаточный ток (>50 мА) для стабильной работы.
Какие компоненты нужны для сборки схемы с ИК приемником
Микроконтроллер Arduino Uno или Nano подойдет для большинства задач. Для питания схемы используйте стабилизированный источник 5V – либо через USB, либо внешний адаптер. Если планируется автономная работа, добавьте батарейный отсек на 9V с линейным стабилизатором 7805 для снижения напряжения до рабочего уровня.
Для расширения функционала добавьте биполярный транзистор (например, BC547) или реле модуль на 5V, если требуется управлять нагрузкой мощностью до 10A. При работе с несколькими ИК-устройствами используйте мультиплексор CD4051 для переключения сигналов между приемниками. Избегайте длинных проводов (>30 см) между приемником и Ардуино – это снижает помехоустойчивость.
Как правильно соединить ИК приемник с платой Ардуино
- Не размещайте ИК приемник рядом с источниками помех (Wi-Fi модули, двигатели, импульсные блоки питания).
- Проверьте полярность: перепутанные
VCCиGNDмогут вывести приемник из строя. - Для тестирования используйте скетч с библиотекой
IRremoteи пульт ДУ в диапазоне 38 кГц (стандарт для большинства бытовых устройств). - Если приемник не реагирует, убедитесь, что на плате Arduino выбран правильный тип микроконтроллера в меню
Инструменты → Плата.
Установка необходимых библиотек для работы с ИК сигналами

Для декодирования ИК-сигналов в Arduino потребуется библиотека IRremote. Она поддерживает большинство распространённых протоколов: NEC, Sony SIRC, RC5, RC6, DISH, JVC, Panasonic, Samsung и другие. Установите её через менеджер библиотек Arduino IDE: перейдите в Скетч → Подключить библиотеку → Управлять библиотеками, введите в поиске IRremote и выберите версию от z3t0 (актуальная на 2024 год – 3.6.1). Избегайте устаревших форков, так как они могут содержать баги в обработке сигналов.
Если планируется работа с нестандартными протоколами или расширенная диагностика, дополнительно установите IRremoteESP8266 (даже для Arduino). Эта библиотека включает инструменты для анализа «сырых» данных и поддерживает больше протоколов, включая современные форматы от LG и Samsung. Установка аналогична: через менеджер библиотек ищите IRremoteESP8266, автор – crankyoldgit. Версия 2.8.6 и новее совместима с ATmega328P и ESP8266.
Перед компиляцией скетча проверьте конфликты с другими библиотеками. Например, IRremote использует таймеры микроконтроллера, что может мешать работе библиотек для ШИМ (Servo, PWM). Решение – переназначить таймер в настройках IRremote: откройте файл IRremote.h в папке библиотеки и раскомментируйте строку #define IR_USE_TIMER2 (для Arduino Uno/Nano). Для Mega2560 используйте #define IR_USE_TIMER5.
Для продвинутых задач, таких как отправка ИК-сигналов или работа с пользовательскими протоколами, изучите документацию в папке examples библиотеки. Обратите внимание на примеры IRsendDemo (отправка сигналов) и IRrecvDumpV2 (детальный анализ протокола). При работе с нестандартными пультами используйте режим RAW для записи и воспроизведения сигналов без декодирования.
Написание базового кода для приема ИК команд
Для работы с ИК-приемником подключите библиотеку IRremote через менеджер библиотек Arduino IDE. Установите версию не ниже 3.6.0 – она поддерживает большинство современных протоколов, включая NEC, Sony и RC5. После установки добавьте строку #include <IRremote.hpp> в начало скетча. Библиотека автоматически определяет пин приемника, но для надежности укажите его явно: const uint8_t IR_RECEIVE_PIN = 11; (замените 11 на используемый пин).
Инициализируйте приемник в функции setup() командой IrReceiver.begin(IR_RECEIVE_PIN, ENABLE_LED_FEEDBACK);. Параметр ENABLE_LED_FEEDBACK включает встроенный светодиод на плате Arduino при получении сигнала – это упрощает отладку. Если используете внешний светодиод для индикации, подключите его к пину 13 и добавьте pinMode(13, OUTPUT); перед началом цикла.
Для фильтрации помех добавьте проверку на длительность сигнала. Стандартные ИК-команды обычно занимают 50–150 мс. Если IrReceiver.decodedIRData.rawDataPtr->rawlen * MICROS_PER_TICK выходит за эти пределы, игнорируйте команду. Пример: if (duration > 50000 && duration < 150000) { /* обработка */ }. Для протокола NEC используйте маску 0xFFFF при сравнении команд, чтобы исключить дублирование из-за повторяющихся сигналов.
Создайте массив для хранения известных команд и их назначений. Например: struct IRCommand { uint32_t code; const char* action; } commands[] = {{0xFFA25D, "POWER"}, {0xFF629D, "VOL+"}};. В цикле сравнивайте полученную команду с элементами массива через for (auto &cmd : commands) { if (command == cmd.code) { /* выполнить действие */ } }. Для экономии памяти используйте PROGMEM при хранении больших массивов констант.
Проверка работоспособности ИК приемника с помощью пульта
Подключите ИК приемник к Arduino по схеме: сигнальный пин к цифровому входу (например, D11), VCC к 5V, GND к земле. Убедитесь, что питание стабильно – колебания напряжения искажают сигнал. Используйте библиотеку IRremote версии 3.6.1 или новее: она поддерживает большинство протоколов (NEC, RC5, Sony) и корректно обрабатывает помехи.
Загрузите в Arduino скетч с примером IRrecvDumpV2 из библиотеки. В мониторе порта установите скорость 9600 бод. Направьте пульт на приемник с расстояния 10–30 см – ближе или дальше сигнал может не распознаваться из-за слабого ИК-светодиода в пульте или помех от окружающего освещения.
Нажмите кнопки на пульте поочередно. В мониторе порта должны появиться данные в формате:
Protocol: NEC– тип протокола;Address: 0x0– адрес устройства;Command: 0x45– код нажатой кнопки;Raw Data: [32 значения]– сырые импульсы для отладки.
- Правильность подключения пинов (особенно GND – без него приемник не работает).
- Совместимость пульта с библиотекой (например, пульты от кондиционеров часто используют нестандартные протоколы).
- Наличие помех от люминесцентных ламп или солнечного света – экранируйте приемник черной изолентой.
Для проверки стабильности приема нажмите одну и ту же кнопку 10 раз. Коды команд должны совпадать с точностью до бита. Разброс значений указывает на проблемы с питанием, некачественный приемник (например, VS1838B вместо TSOP1738) или дешевый пульт с нестабильным генератором ИК-сигнала.
Для расширенной диагностики запишите сырые данные (Raw Data) нескольких кнопок в файл. Сравните длительности импульсов: в протоколе NEC стартовый импульс длится 9 мс, пауза – 4.5 мс, логическая «1» – 2.25 мс, «0» – 1.125 мс. Отклонения более 10% свидетельствуют о неисправности пульта или приемника.
Декодирование сигналов от разных пультов дистанционного управления

Каждый пульт использует уникальный протокол передачи данных, отличающийся частотой несущей волны (обычно 36–38 кГц), длительностью импульсов и пауз, а также структурой кодирования. Наиболее распространённые протоколы: NEC (длительность стартового импульса 9 мс, логическая «1» – 2,25 мс, «0» – 1,125 мс), RC-5 (бифазное кодирование, постоянная частота 36 кГц), Sony SIRC (стартовый импульс 2,4 мс, «1» – 1,2 мс, «0» – 0,6 мс). Для декодирования потребуется библиотека IRremote (версия 3.x и выше), поддерживающая большинство протоколов «из коробки».
Перед началом работы подключите ИК-приёмник к Arduino: выход приёмника к цифровому пину (например, D11), питание – 5V, земля – GND. Загрузите пример IRrecvDumpV2 из библиотеки IRremote и откройте монитор порта (скорость 115200 бод). Направьте пульт на приёмник и нажмите любую кнопку – в мониторе отобразится тип протокола, адрес устройства и код команды. Запишите эти данные для каждой кнопки, так как они понадобятся для дальнейшей обработки.
- Если протокол не распознаётся автоматически, проверьте частоту приёмника (TSOP1738 – 38 кГц, VS1838B – 38 кГц, TSOP4838 – 38 кГц). Для пультов с нестандартными частотами (например, 56 кГц) потребуется приёмник с соответствующей настройкой или программная коррекция таймингов.
- При использовании пультов с протоколом NEC учитывайте, что повторные нажатия кнопок кодируются специальным сигналом повтора (repeat code), состоящим из стартового импульса 9 мс и паузы 2,25 мс. Игнорируйте его, если требуется однократное срабатывание.
- Для пультов RC-5 и RC-6 обратите внимание на бит переключения (toggle bit), который инвертируется при каждом нажатии. Это позволяет отличить новое нажатие от удержания кнопки.
После получения кодов напишите обработчик сигналов. Пример для протокола NEC:
#include <IRremote.h>
const int RECV_PIN = 11;
IRrecv irrecv(RECV_PIN);
decode_results results;
void setup() {
Serial.begin(115200);
irrecv.enableIRIn();
}
void loop() {
if (irrecv.decode(&results)) {
if (results.decode_type == NEC) {
switch (results.value) {
case 0xFFA25D: Serial.println("Кнопка 1"); break;
case 0xFF629D: Serial.println("Кнопка 2"); break;
// Добавьте остальные коды
}
}
irrecv.resume();
}
}
Для пультов с неизвестными протоколами используйте режим «сырого» декодирования (results.rawbuf), где данные представлены массивом длительностей импульсов и пауз в микросекундах. Анализируйте последовательности вручную, сравнивая их с эталонными записями для выявления закономерностей.
Обработка ошибок и устранение помех при приеме ИК сигналов
Стандартные библиотеки IRremote и IRlib2 используют алгоритмы подавления шумов, но их эффективность зависит от настроек. Установите параметр RAW_BUFFER_LENGTH в 100–150 для захвата длинных сигналов, а tolerance в диапазоне 25–35% для компенсации искажений. При работе с протоколами NEC или RC5 активируйте проверку контрольных бит – это снижает вероятность ложного декодирования на 40–60%.
Флуоресцентные лампы и солнечный свет генерируют помехи на частоте 38 кГц, совпадающей с несущей ИК-сигналов. Используйте экранированный провод для подключения приемника к Arduino, а корпус приемника закройте светофильтром из темно-красного пластика (например, от старых ИК-пультов). Альтернативный метод – программная фильтрация: игнорируйте сигналы короче 500 мкс и длиннее 20 мс, так как большинство пультов работают в этом диапазоне.
Приемник может фиксировать отраженные сигналы от стен и мебели, что приводит к дублированию команд. Решение – ограничение зоны приема с помощью трубки из черного картона диаметром 10–15 мм, надетой на сенсор. Для динамических условий применяйте алгоритм подавления эха: сохраняйте последний декодированный сигнал и блокируйте повторные срабатывания в течение 200–300 мс.
При работе с нестандартными пультами или протоколами декодирование может давать ошибки из-за несовпадения таймингов. Вручную корректируйте параметры mark и space в библиотеке, сравнивая их с эталонными значениями из даташита пульта. Для протокола Sony увеличьте допуск на space до 40%, так как его сигналы имеют значительный разброс. Если пульт использует редкий протокол, запишите сырые данные и проанализируйте их вручную, разбивая на пакеты по характерным временным интервалам.
Примеры практических проектов с использованием ИК приемника
| Проект | Компоненты | Особенности реализации |
|---|---|---|
| Умный светильник с ИК управлением | Arduino Uno, ИК приемник VS1838B, RGB-светодиод или адресная лента WS2812B, резисторы 220 Ом | Настройте приемник на пин D3, декодируйте сигналы пульта и меняйте цвет/яркость светодиодов через ШИМ. Для плавных переходов используйте функцию millis() вместо delay(). Пример кода: if (results.value == 0xFFA25D) { analogWrite(redPin, 255); }. |
| ИК-контроллер для робота | Arduino Nano, ИК приемник, драйвер моторов L298N, батарея 9В | Подключите приемник к пину D2, а моторы – к выходам драйвера. Запрограммируйте движение вперед/назад и повороты по сигналам пульта. Для стабильности добавьте проверку повторяющихся кодов: if (results.value == 0xFF629D && lastCode != results.value) { moveForward(); }. |
| Система безопасности с ИК датчиком | Arduino Mega, ИК приемник, GSM-модуль SIM800L, пьезопищалка | Используйте пульт как ключ доступа: при получении правильного кода (0xFF38C7) отключайте сигнализацию. Для отправки SMS при несанкционированном доступе подключите GSM-модуль к SoftwareSerial (D10, D11) и отправляйте команду AT+CMGS="номер_телефона". |