ИК-пульт для Arduino — это устройство, которое позволяет управлять Arduino с помощью инфракрасного сигнала. Обычно ИК-пульт состоит из передатчика и приемника инфракрасного излучения. Пульт отправляет кодированные сигналы на приемник, который декодирует их и передает Arduino соответствующую команду. Это позволяет управлять Arduino с помощью кнопок на пульте, что может быть удобно для создания умных домов, игрушек или других проектов, где требуется дистанционное управление.
- Пульт с интерфейсом NEC
- Приёмник TL1838
- ИК светодиод
С его помощью можно:
- Управлять своим устройством с пульта (комплектный пульт + приёмник)
- Управлять своим устройством с любого пульта (от телевизора/люстры + приёмник)
- Управлять телевизором, эмулируя его пульт (ИК светодиод)
- Передавать данные с одной Ардуины на другую (ИК светодиод + приёмник), например библиотека GyverTransfer
Подключение
Модуль ИК приёмника подключается следующим образом:
- S: сигнальный пин, любой цифровой пин МК
- -: GND
- Средний (не подписан): VCC
Библиотеки
- IRremote – очень тяжёлая универсальная “стандартная” библиотека
- IRLremote – более оптимизированная и продвинутая библиотека от NicoHood
- NecDecoder – наша библиотека для интерфейса NEC (Hash), на котором работают все китайские пульты
В примерах на этом сайте мы будем использовать NecDecoder как очень лёгкую и простую в использовании. Библиотека идёт в архиве к набору GyverKIT, а свежую версию всегда можно установить/обновить из встроенного менеджера библиотек Arduino по названию NecDecoder. Краткая документация находится по ссылке выше, базовые примеры есть в самой библиотеке.
Примеры
Чтение кодов пульта
Перед использованием нужно знать коды кнопок пульта, загружаем вот этот пример и открываем порт:
// приём команд с пульта // приёмник подключать на прерывание по FALLING #include <NecDecoder.h> NecDecoder ir; void setup() { Serial.begin(9600); // подключил на 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(9600); 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; } } }