View Categories

ИК пульт и приёмник

ИК приёмник - очень удобное устройство для дистанционного ввода данных в программу при помощи ИК пульта. Также может использоваться для передачи данных между устройствами по ИК каналу связи.

ИК набор
В наборе GyverKIT START IOT EXTRA
ИК пульт
ИК приёмник
ИК передатчик

В наборе GyverKIT идёт комплект из пульта, приёмника и ИК светодиода. С его помощью можно:

  • Управлять своим устройством с пульта (комплектный пульт + приёмник)
  • Управлять своим устройством с любого пульта (от телевизора/люстры + приёмник)
  • Управлять телевизором, эмулируя его пульт (ИК светодиод)
  • Передавать любые данные с одной Ардуины на другую (ИК светодиод + приёмник), например библиотека GyverWire

Подключение к Arduino #

Модуль ИК приёмника подключается следующим образом:

  • S: сигнальный пин, любой цифровой пин МК
  • - (минус): GND
  • Средний (не подписан): VCC

Библиотеки #

Для работы с приёмником есть несколько библиотек:

  • IRremote – сложная универсальная библиотека
  • IRLremote – более оптимизированная и продвинутая библиотека от NicoHood
  • NecDecoder – наша библиотека для интерфейса NEC на котором работают все китайские пульты

В примерах на этом сайте будем использовать NecDecoder, её можно установить/обновить из встроенного менеджера библиотек Arduino по названию NecDecoder. Краткая документация находится по ссылке выше, базовые примеры есть в самой библиотеке.

NecDecoder #

Чтобы приёмник работал, нужно подключить его к пину с внешним прерыванием, завести обработчик на прерывание FALLING и вызывать в нём метод библиотеки tick(). Мы подключили приёмник на пин 2, это прерывание 0. Библиотека "просигналит" в метод available(), когда примет данные. Примеры:

Чтение кодов пульта
// приём команд с пульта
// приёмник подключать на прерывание по FALLING

#include <NecDecoder.h>
NecDecoder ir;

void setup() {
  Serial.begin(115200);
  // подключил на D2, прерывание 0
  attachInterrupt(0, irIsr, FALLING);
}

// в прерывании вызываем tick()
void irIsr() {
  ir.tick();
}

void loop() {
  // если пакет успешно принят
  if (ir.available()) {
    // вывести команду (8 бит)
    Serial.print("0x");
    Serial.println(ir.readCommand(), HEX);
  }
}
Коды кнопок пульта из набора
#define IR_1    0xA2
#define IR_2    0x62
#define IR_3    0xE2
#define IR_4    0x22
#define IR_5    0x2
#define IR_6    0xC2
#define IR_7    0xE0
#define IR_8    0xA8
#define IR_9    0x90
#define IR_STAR 0x68
#define IR_0    0x98
#define IR_HASH 0xB0
#define IR_UP   0x18
#define IR_LEFT 0x10
#define IR_OK   0x38
#define IR_RIGHT 0x5A
#define IR_DOWN 0x4A
Парсим нажатия
// приёмник на D2

#define IR_1    0xA2
#define IR_2    0x62
#define IR_3    0xE2
#define IR_4    0x22
#define IR_5    0x2
#define IR_6    0xC2
#define IR_7    0xE0
#define IR_8    0xA8
#define IR_9    0x90
#define IR_STAR 0x68
#define IR_0    0x98
#define IR_HASH 0xB0
#define IR_UP   0x18
#define IR_LEFT 0x10
#define IR_OK   0x38
#define IR_RIGHT 0x5A
#define IR_DOWN 0x4A

#include <NecDecoder.h>
NecDecoder ir;

void setup() {
  Serial.begin(115200);
  attachInterrupt(0, irIsr, FALLING);
}

void irIsr() {
  ir.tick();
}

void loop() {
  if (ir.available()) {
    switch (ir.readCommand()) {
      // выводим в порт, тут может быть ваш код
      case IR_1: Serial.println("Pressed 1"); break;
      case IR_2: Serial.println("Pressed 2"); break;
      case IR_3: Serial.println("Pressed 3"); break;
      case IR_4: Serial.println("Pressed 4"); break;
      case IR_5: Serial.println("Pressed 5"); break;
      case IR_6: Serial.println("Pressed 6"); break;
      case IR_7: Serial.println("Pressed 7"); break;
      case IR_8: Serial.println("Pressed 8"); break;
      case IR_9: Serial.println("Pressed 9"); break;
      case IR_STAR: Serial.println("Pressed *"); break;
      case IR_0: Serial.println("Pressed 0"); break;
      case IR_HASH: Serial.println("Pressed #"); break;
      case IR_UP: Serial.println("Pressed up"); break;
      case IR_LEFT: Serial.println("Pressed left"); break;
      case IR_OK: Serial.println("Pressed ok"); break;
      case IR_RIGHT: Serial.println("Pressed right"); break;
      case IR_DOWN: Serial.println("Pressed down"); break;
    }
  }
}

Полезные страницы #

0 0 голоса
Рейтинг статьи
Подписаться
Уведомить о
guest

0 комментариев
Старые
Новые Популярные
Межтекстовые Отзывы
Посмотреть все комментарии
Прокрутить вверх