Всем привет, в этой статье речь пойдет о передаче данных в инфракрасном диапазоне при помощи ИК-пульта. Идея не новая, в общем то весь Youtube забит роликами о том, как считывать коды кнопок с ИК-пультов.

        Да и на многих сайтах, посвященных тематике Arduino, эта тема тоже неоднократно обсуждалась. Но всё же, мы хотели бы представить свой прототип сканера кодов кнопок для ИК-пультов. На построение такого прототипа, нас сподвигло то, что у нас уже был прибор подобного типа - LC метр. Его прошивка включала в себя декодер для инфракрасных приёмников. В целом вещь хорошая, но было одно неудобство, коды кнопок отображались на дисплее, разделёнными. Поэтому мы и решили построить свой прототип.

 

        Основные компоненты, которые мы применили в прототипе:

  • Плата Arduino Uno либо Nano
  • Дисплей LCD1602 с I2C адаптером
  • Инфракрасный приёмник, с неизвестного устройства(в общем то подойдет любой)
  • Провода Dupont(обычные, мама-мама)
  • Библиотека LiquidCrystal_I2C.h V2
  • Библиотека IRremote.h

        Небольшое уточнение, многие из видели и знают как выглядит плата Arduino Uno или Nano, да и дисплей с I2C адаптером многим тоже не в новинку. Хотелось бы просто показать как выглядит инфракрасный приёмник, который был использован в построении нашего прототипа. На плате, под приёмником есть маркировка контактов подключения. Именно по ней мы и подключили ИК-приёмник к плате Arduino. Как мы уже говорили, подойдет любой, на фото он показан вместе с проводами Dupont.

 

 

        Следующим шагом для построения прототипа, конечно же стала коммутация всех компонентов к плате Arduino. Особых проблем в подключении возникнуть не должно, дисплей подключается по шине I2C - SDA(пин 4) и SCL(пин 5), сигнальный выход инфракрасного приёмника подключается ко 2-му пину платы Arduino. Сам ИК-приёмник питается от 5 вольт, запитаем его от платы Arduino. Перед тем, как "заливать" скетч в плату Arduino, нужно корректно установить библиотеку IRremote.h. Чтобы корректно установить скачанную библиотеку IRremote.h нужно сначала удалить такую же предустановленную в среде разработки Arduino IDE. Для этого нужно зайти в папку arduino-1.8.x/libraries и удалить уже имеющуюся там библиотеку IRremote.h, и уже потом устанавливать скачанную. После того как все эти манипуляции проведены, а также подключены все провода, можно "залить" в плату нижеследующий скетч:

 

/*Подключаем нужные библиотеки*/
#include "LiquidCrystal_I2C.h"
#include "IRremote.h"

/*Определяем пины подключения устройств*/
#define DISP_ADDR 0x27
#define DISP_COLS 16
#define DISP_ROWS 2
#define IR_PIN 2

/*
  Создаём объект lcd класса LiquidCrystal_I2C для того
  чтобы работать с ЖКД дисплеями 1602 по шине I2C
*/
LiquidCrystal_I2C lcd(DISP_ADDR, DISP_COLS, DISP_ROWS);
/*
  Создаём объект irrecv класса IRrecv для
  работы с ИК-приёмником
*/
IRrecv irrecv(IR_PIN);
/*В переменную results будем сохранять код кнопок*/
decode_results results;

void setup()
{
  /*Начинаем работу с дисплеем*/
  lcd.begin();
  /*Очищаем дисплей*/
  lcd.clear();
  /*Включаем подсветку дисплея*/
  lcd.backlight();
  /*Устанавливаем курсор*/
  lcd.setCursor(0, 0);
  /*Выводим сообщение на дисплей*/
  lcd.print("Press any button");

  /*Инициализация ИК-приёмника*/
  irrecv.enableIRIn();
}

void loop()
{
  /*Если на приёмник поступил сигнал, то*/
  if(irrecv.decode(&results))
  {
    /*
      Вывести сообщение с кодом нажатой
      кнопки в шестнадцатиричном формате
    */
    lcd.setCursor(0, 0);
    lcd.print("Code button is  ");
    lcd.setCursor(0, 1);

    lcd.print("                ");
    lcd.setCursor(0, 1);
    lcd.print(results.value, HEX);
    /*Ждем и считываем следующее нажатие*/
    irrecv.resume();
  }
  delay(100);
}

 

           Теперь возьмём любой ИК-пульт... Да, подойдёт абсолютно любой!!! Например, как вот этот:

 

           Нажимаем кнопки, и... Результат работы скетча можно видеть на фото:

 

 

        После включения, на экране высвечивается сообщение, предлагающее действие нажатия кнопки на тестируемом ИК-пульте. И, как только какая либо из кнопок была нажата, на экране в первой строке высвечивается сообщение "Code button is" (Код нажатой кнопки), а во второй строке высвечивается сам код, представленный в шестнадцатиричном формате. Полученную информацию можно использовать для сравнения идентичности ИК-пультов, для работы с другими Arduino-проектами(когда требуется считывать коды на одном устройстве, а программировать другое), да и вообще для проверки работоспособности сомнительного ИК-пульта. Чуть позже, когда всё уже было готово, у нас нашлись даже акриловые пластины для построения корпуса устройства. И теперь, наш прототип приобрел в общем то более законченный вид.