Опубликовано

Имитация ИК-сигналов управления пульта ДУ

Раздел из главы 10 “Дистанционное управление” из книги “Arduino. Большая книга рецептов, 3-е изд.” (авторы Джепсон Брайан, Марголис Майкл, Уэлдин Николас Роберт)

Arduino. Большая книга рецептов, 3-издание

ЗАДАЧА

Требуется управлять с помощью платы Arduino телевизором или каким-либо другим устройством, эмулируя коды ИК-сигналов пульта ДУ. Эта задача противоположна рассмотренной в разд. 10.2 — здесь нам нужно не принимать команды, а отправлять их.

Для приема платой Arduino сигналов пульта ДУ используется модуль приемника ИК-сигналов. На рынке широко представлены приемники ИК-сигнала TSOP38238, TSOP4838, PNA4602 и TSOP2438. Первые три эти приемника имеют одинаковую схему расположения контактов, а у приемника TSOP2438 выводы питания (+5 В и GND) поменяны местами. При использовании какого-либо иного приемника ИК-сигналов уточните схему расположения его контактов в справочном листке (datasheet) на него и подключите его к плате Arduino, как там указано. Подключение приемников TSOP38238, TSOP4838 и PNA4602 к плате Arduino показано в схеме на рис. 10.1.

C:\Users\acer\Documents\#Electronics\Магазин электроники\фрагменты из книг\2788. Arduino Cookbook. Recipes to Begin, Expand, and Enhance\verstka\pic\10\10.1.png

Рис. 10.1. Подключение приемника ИК-сигнала к плате Arduino

РЕШЕНИЕ

Для решения этой задачи к плате Arduino нужно подключить пять кнопок и инфракрасный светодиод, как показано на рис. 10.2.

Скетч для управления этой схемой приводится в листинге 10.4. Для управления устройством в нем используются коды кнопок из скетча, приведенного в решении из разд. 10.2 (см. листинг 10.2). Коды для управления вашим устройством, скорее всего, будут другими, поэтому узнайте их, исполнив скетч из разд. 10.2, а затем замените ими коды в скетче из листинга 10.4. Нажатие одной из пяти кнопок выбирает и отправляет требуемый код.

Листинг 10.4. Скетч для эмулирования ИК-пульта ДУ

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
/*
* Скетч irSend
* Требует подключения ИК-светодиода к контакту 3
* и 5 кнопок к контактам 6-10
*/
#include <IRremote.h> // Подключаем библиотеку IRremote
const int numberOfKeys = 5;
const int firstKey = 6; // Номер первого из пяти последовательных
// контактов, к которым подключаются кнопки
bool buttonState[numberOfKeys];
bool lastButtonState[numberOfKeys];
long irKeyCodes[numberOfKeys] =
{
0x18E758A7, //0 key
0x18E708F7, //1 key
0x18E78877, //2 key
0x18E748B7, //3 key
0x18E7C837, //4 key
};
 
IRsend irsend;
void setup()
{
for (int i = 0; i < numberOfKeys; i++)
{
buttonState[i] = true;
lastButtonState[i] = true;
int physicalPin=i + firstKey;
pinMode(physicalPin, INPUT_PULLUP); // Включаем внутренние повышающие резисторы
}
Serial.begin(9600);
}
 
void loop()
{
for (int keyNumber=0; keyNumber<numberOfKeys; keyNumber++)
{
int physicalPinToRead = keyNumber + firstKey;
buttonState[keyNumber] = digitalRead(physicalPinToRead);
if (buttonState[keyNumber] != lastButtonState[keyNumber])
{
if (buttonState[keyNumber] == LOW)
{
irsend.sendSony(irKeyCodes[keyNumber], 32);
Serial.println("Sending"); // Посылаем команду
}
lastButtonState[keyNumber] = buttonState[keyNumber];
}
}
}

C:\Users\acer\Documents\#Electronics\Магазин электроники\фрагменты из книг\2788. Arduino Cookbook. Recipes to Begin, Expand, and Enhance\verstka\pic\10\10.2.png

Рис. 10.2. Подключение кнопок и инфракрасного светодиода к плате Arduino

Увидеть невооруженным глазом отправляемые коды невозможно, поскольку инфракрасный свет невидим для человеческого глаза.

Но в работе передатчика можно удостовериться, наблюдая за ИК-светодиодом на жидкокристаллическом дисплее видоискателя цифровой камеры.

Обсуждение работы решения и возможных проблем

Скетч Arduino управляет удаленным устройством, включая и выключая инфракрасный светодиод таким образом, чтобы имитировать сигналы, посылаемые ИК-пультом ДУ от этого устройства. Характеристики используемого ИК-свето­диода не являются критическими. Информация по подбору подходящего компонента приводится в приложении 1.

Преобразование числовых кодов в мигания ИК-светодиода реализует библиотека IRremote. Для этого в скетче требуется создать экземпляр объекта этой библиотеки. Такой экземпляр для управления светодиодом, подключенным к контакту 3 (выбирать контакт для подключения светодиода не представляется возможным, поскольку этот параметр жестко закодирован в библиотеке), создается следующей строкой кода:

IRsend irsend;
В зависимости от используемой платы Arduino, ИК-светодиод может потребоваться подключить к иному контакту, чем 3. Например, для плат Teensy 3.x ИК-светодиод надо подключать к контакту 5. Более подробная информация на этот счет содержится в файле README библиотеки IRremote (https://oreil.ly/XOfdd). Если для вашей платы ИК-светодиод нужно подключать к одному из контактов, который в скетче решения используется для подключения кнопок (контакты 6–10), следует взять другой диапазон номеров контактов для подключения кнопок.

Для хранения диапазона значений кодов управления в скетче используется массив irKeyCodes (см. также решение разд. 2.4). Скетч отслеживает состояние пяти кнопок и при обнаружении нажатия одной из них посылает соответствующий код кнопки следующим оператором:

irsend.sendSony(irKeyCodes[keyNumber], 32);

Объект irSend поддерживает разные функции для работы с различными популярными форматами ИК-кодов. В случае использования системы дистанционного управления с другими форматами кодов, посмотрите эти форматы в документации на библиотеку. Коды также можно узнать с помощью скетча из разд. 10.2, который выводит их в окно монитора порта.

При передаче функции кода кнопки из массива в конце кода также передается число, сообщающее функции количество битов в коде. Префикс 0x перед определениями кодов в массиве irKeyCodes в начале скетча означает шестнадцатеричный формат этих чисел (подробная информация о шестнадцатеричных числах приводится в главе 2). Каждый символ шестнадцатеричного числа представляет 4-битное значение. Восемь шестнадцатеричных цифр кода означает 32 бита.

Светодиод к плате Arduino подключается через токоограничивающий резистор (подробная информация о применении токоограничивающих резисторов со светодиодами приводится во введении главы 7 (разд. 7.0)).

Зону действия передатчика можно увеличить, используя несколько светодиодов или более мощный светодиод.

Дополнительная информация

Дополнительная информация по управлению светодиодами приведена в главе 7.

Проект необычного ИК-пульта дистанционного управления для телевизоров представлен на веб-странице https://oreil.ly/7BzKh.