Инфракрасный пульт дистанционного управления сегодня можно найти в каждом доме. Будь то пульт дистанционного управления от телевизора, музыкального центра, или других устройств — все они передают определенные коды, мигая инфракрасным светодиодом.
Сегодня мы научим нашу Ардуино реагировать на такие коды с помощью библиотеки IRremote, доступной на GitHub.

Необходимые компоненты
- Ардуино
- ИК-приемник (я использовал VS1838B)
- Два цветных светодиода и два резистора к ним (220 Ом) (см. Расчет резистора для светодиода)
Подключение
Подключите ИК-приемник в соответствии с datasheet. В моем случае распиновка VS1838B следующая:
Я подключил контакт SIGNAL к контакту 11 Ардуино. Напряжение питания для ик-приемника VS1838B 5В.
Кроме того, чтобы сигнализировать, что Ардуино действительно распознает нажатие кнопок на пульте дистанционного управления, я добавил два светодиода. Светодиоды будут переключаться в ответ на нажатие соответствующих кнопок. Эти светодиоды подключены через резисторы к контактам 2 и 3 Ардуино.
Чтение кодов кнопок ПДУ
Чтобы наш код правильно компилировался в IDE, загрузите библиотеку IRremote с GitHub и загрузите ее в каталог библиотек.
Теперь мы можем начать загрузку скетча в IDE Ардуино, который отправит коды нажатых кнопок в монитор последовательного порта.
#include <IRremote.h> const int receiverPin = 11; IRrecv irrecv(receiverPin); decode_results results; void setup() { irrecv.enableIRIn(); } void loop() { if(irrecv.decode(&results)) { Serial.print("0x"); Serial.println(results.value, HEX); delay(250); irrecv.resume(); } }
После того, как мы загрузим скетч в Ардуино, мы можем запустить монитор последовательного порта и прочитать коды интересующих нас кнопок.
Ответ на коды
Полученный код кнопок форматируется библиотекой как число. По этой причине самый простой способ отреагировать на нажатие кнопки — использовать оператор Switch.
Итак, давайте заменим в коде, который у нас сейчас есть, фрагмент, отвечающий за отправку кода в Serial, на тот, который будет выполнять соответствующие действия, если код нажатой кнопки будет соответствовать одному из случаев.
void loop() { if(irrecv.decode(&results)) { switch(results.value) { case 0x20DF8E71: digitalWrite(greenPin, !digitalRead(greenPin)); break; case 0x20DFC639: digitalWrite(yellowPin, !digitalRead(yellowPin)); break; } irrecv.resume(); } }
Как видите, после получения какого-либо из кодов соответствующий светодиод изменит свое состояние на противоположное текущему.
Чтобы все скомпилировалось и работало хорошо, нам нужно добавить 2 константы, которые означают номера выводов для светодиодов, и установить эти выводы как выходы.
const int yellowPin = 2; const int greenPin = 3; void setup () { pinMode (yellowPin, ВЫХОД ); pinMode (greenPin, ВЫХОД ); irrecv.enableIRIn (); }
В конечном итоге весь наш код должен выглядеть так:
#include <IRremote.h> const int receiverPin = 11; const int yellowPin = 2; const int greenPin = 3; IRrecv irrecv(receiverPin); decode_results results; void setup() { pinMode(yellowPin, OUTPUT); pinMode(greenPin, OUTPUT); irrecv.enableIRIn(); } void loop() { if(irrecv.decode(&results)) { switch(results.value) { case 0x20DF8E71: digitalWrite(greenPin, !digitalRead(greenPin)); break; case 0x20DFC639: digitalWrite(yellowPin, !digitalRead(yellowPin)); break; } irrecv.resume(); } }
После компиляции и загрузки в Ардуино мы можем все протестировать на практике 🙂
Как видите, использование инфракрасных пультов дистанционного управления с Ардуино очень просто и дешево (нам нужен всего лишь приемник, который можно найти почти в каждом доме).
Возможности такой системы огромны — от управления реле (например, включение / выключение света) до компьютерного управления (путем написания дополнительного приложения, которое будет получать соответствующие команды, например, через последовательный порт и выполнять определенные действия в системе).
