Наверняка у многих из вас в доме есть несколько инфракрасных пультов дистанционного управления (ДУ) различными электронными устройствами. Иногда пользоваться всеми ими бывает затруднительно и хотелось бы иметь один универсальный пульт, который смог бы заменить все эти пульты. В этой статье мы рассмотрим проект превращения смартфона на операционной системе Android в универсальный инфракрасный пульт дистанционного управления на основе платы Arduino.
Необходимые компоненты
- Плата Arduino Uno (купить на AliExpress).
- Приемник TSOP-IR (1838T) (купить на AliExpress).
- Инфракрасный светодиод (купить на AliExpress).
- Модуль Bluetooth (HC05) (купить на AliExpress).
- Смартфон или другое устройство с операционной системой Android.
- Источник питания.
Реклама: ООО "АЛИБАБА.КОМ (РУ)" ИНН: 7703380158
Принцип работы универсального пульта
Многие из вас для управления телевизором вынуждены использовать 2 пульта ДУ: один для управления телевизором и один для управления телевизионной приставкой. В этом проекте мы объединим эти 2 пульта на основе смартфона чтобы с его помощью можно было управлять телевизором в полной мере, не задействуя дополнительные пульты.
Используя плату Arduino Uno достаточно просто в этом универсальном пульте ДУ реализовать процессы кодирования и декодирования нужных сигналов. Для удобства изготовления подобного устройства целесообразно сконструировать самодельный шилд (плату расширения) для платы Arduino как показано на следующем рисунке. Шилд будет состоять из приемника (ресивера) TSOP IR 1838T, инфракрасного светодиода и Bluetooth модуля (HC-05).
Вы можете либо изготовить приведенный шилд, либо просто соединить эти компоненты с платой Arduino Uno как показано на приведенной ниже схеме устройства.
Большинство инфракрасных устройств работают на частоте 38 кГц, поэтому мы и выбрали для нашего проекта 1838T. При этом рассматривая принципы работы устройств с инфракрасной связью следует помнить о том, что в них нет логических единиц и нулей в прямом понимании этих понятий. И единица, и ноль в этих устройствах кодируются набором специальных импульсов как показано на следующем рисунке. Сущность этих процессов кодирования описана в NEC протоколе.
Принцип работы проектируемого нами универсального пульта ДУ будет заключаться в следующем. Сначала смартфон с помощью приложения для Android передает сигнал плате Arduino при помощи технологии Bluetooth, далее Arduino принимает его при помощи приемника TSOP-IR (1838T) и анализирует его. Затем Arduino передает команду инфракрасному светодиоду чтобы он мигал по определенному алгоритму (шаблону), зависящему от того, какая кнопка нажата в приложении для Android в смартфоне. Этот сигнал принимается телевизором или телевизионной приставкой, которые выполняют закодированную в сигнале команду.
Но перед осуществлением этого проекта мы должны декодировать сигналы с пультов ДУ, которые мы хотим заменить. Этот процесс рассмотрен далее в статье.
Работа схемы
Схема устройства представлена на следующем рисунке.
Как можно видеть, схема достаточно проста и не должна вызвать затруднений в сборке даже у начинающего радиолюбителя.
Декодирование инфракрасных сигналов управления с помощью Arduino
Плата Arduino в рассматриваемом проекте выполняет сразу две функции: одна заключается в декодировании инфракрасных сигналов от пультов ДУ, а вторая - в управлении инфракрасным излучателем.
Для декодирования сигналов от инфракрасных пультов ДУ мы будем использовать заголовочный файл от Ken Shirriff’s IRremote, который значительно упрощает эти процессы. Для работы с этим заголовочным файлом вы должны сделать следующую последовательность действий:
- Скачать эту библиотеку инфракрасной связи по ссылке https://github.com/z3t0/Arduino-IRremote.
- Распаковать ее и поместить ее в папку библиотек Arduino (Arduino ‘Libraries’ folder). Затем переименовать извлеченную из архива папку в IRremote.
- Затем необходимо загрузить приведенный код в плату Arduino, установить собранный шилд поверх платы и поместить напротив приемника TSOP IR пульт ДУ, сигналы которого мы хотим декодировать. Затем откройте монитор последовательного порта (serial monitor) в Arduino IDE и нажмите желаемую кнопку на пульте ДУ. После этого вы увидите в serial monitor'е информацию, которая включает тип кода, его значение и количество бит в нем как показано на нижеприведенных рисунках.
Текст программы для декодирования сигналов от инфракрасных пультов ДУ:
#include <IRremote.h>
const int RECV_PIN = 6;
IRrecv irrecv(RECV_PIN);
decode_results results;
void setup()
{
Serial.begin(9600);
irrecv.enableIRIn(); // Start the receiver
irrecv.blink13(true);
}
void loop() {
if (irrecv.decode(&results)) {
if (results.decode_type == NEC) {
Serial.print("NEC ");
} else if (results.decode_type == SONY) {
Serial.print("SONY ");
} else if (results.decode_type == RC5) {
Serial.print("RC5 ");
} else if (results.decode_type == RC6) {
Serial.print("RC6 ");
} else if (results.decode_type == UNKNOWN) {
Serial.print("UNKNOWN ");
}
Serial.print(" ");
Serial.print(results.value, HEX);
Serial.print(" ");
Serial.println(results.bits);
irrecv.resume(); // Receive the next value
}
}
После того как вы сумеете это реализовать аккуратно запишите все значения кодов и другую представленную информацию для всех кнопок со всех пультов ДУ, которые вы хотите реализовать в вашем универсальном пульте. Таким образом, вы создадите своеобразную базу данных кнопок и соответствующих им кодов.
Представленный пример программы для декодирования сигналов инфракрасных пультов ДУ был взят из подпапки ‘examples’ (примеры) папки IRremote (которую мы скачали по вышеприведенной ссылке). Также в подпапке ‘examples’ вы можете при желании изучить и другие примеры работы с устройствами инфракрасной связи.
Настройка приложения для Android для создания инфракрасного передатчика
В качестве приложения Android для нашего универсального инфракрасного пульта мы будем использовать приложение MIT’s APP inventor-2, но вы можете использовать любое другое подобное приложение. А если вы еще и профессионал в программировании на Android, то вы можете достигнуть гораздо лучших результатов чем рассмотренные в нашем проекте. Все, что нам понадобится, это создать несколько кнопок в приложении.
При создании кнопок в этом приложении старайтесь давать кнопкам осмысленные названия, чтобы они по смыслу соответствовали кнопкам пультов ДУ, которые вы будете замещать своим пультом. Также следите за тем текстом (набором символов), который будет передаваться при нажатии каждой кнопки. Также удостоверьтесь в тем, что вы обеспечиваете правильный адрес для своего модуля Bluetooth HC-05. На следующем рисунке показан примерный вид экрана приложения, который вы должны создать.
Вам целесообразно выполнить следующую последовательность шагов.
Шаг 1. Проследуйте по ссылке ai2.appinventor.mit.edu, или самостоятельно можете попытаться найти приложение MIT appinventor-2 в гугле. Регистрация в AI2 требует аккаунта в Google, поэтому если у вас нет такого аккаунта, то создайте его.
Шаг 2. После того как вы залогинитесь в ai2.appinventor.mit.edu с помощью своего аккаунта Google, вас перебросит на рабочую веб-страницу AI2, которая будет выглядеть примерно следующим образом:
Начните новый проект при помощи нажатия вкладки “Projects” вверху экрана и выберете там “Start New Project”. После этого вы увидите пустой экран, на котором вы можете разместить нужные вам кнопки и текст.
Для использования пакета с кнопками выберите вкладку “Button” в левом крае экрана под секцией “User Interface”. Просто перетащите любой пакет из меню слева и поместите его на рабочий экран. Аналогично текст можно поместить на рабочий экран с помощью пакета “Label”.
Шаг 3. После того как вы разместите на экране все необходимые вам кнопки и текстовые метки (labels) можно заняться кодом для этого приложения. Но перед этим необходимо выбрать пакет Bluetooth поскольку именно с помощью этой технологии вы будете связываться с Arduino.
Этот пакет не показывается сразу на экране потому что он расположен под “Non-visible Components” – это компоненты, которые не отображаются в графическом интерфейсе пользователя.
Шаг 4. На этом шаге вам предстоит формирование программного кода, в котором вы должны определить функции для всех компонентов, которые вы выбрали, и каким образом вы будете работать с ними.
Слева экрана вы увидите все пакеты, которые вы выбрали в графической секции (GUI section). Картинки сверху показывают все компоненты, которые содержатся в каждом использованном вами пакете. Также учтите, что адрес Bluetooth модуля будет нужен в текстовом формате.
Шаг 5. После того как вы завершите конфигурирование вашего приложения, нажмите на вкладку “Build” как показано выше и выберите вторую опцию. Это позволит скачать созданное вами приложение на компьютере в “.apk” формате. Затем просто передайте этот .apk файл на ваш телефон с Android и установите приложение там.
Исходный код программы
Прежде чем использовать приведенный ниже текст программы вы должны заменить в нем HEX коды (шестнадцатеричные коды) кнопок с пультов ДУ, которые вы хотите замещать, на свои – те, которые вы определили с помощью программы, приведенной в первой половине этой статьи.
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 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 |
#include <IRremote.h> #include <SoftwareSerial.h> IRsend irsend; SoftwareSerial mySerial(9,10); // RX, TX char ch; int i=0; void setup() { // Serial.begin(9600); mySerial.begin(9600); } void loop() { ch=mySerial.read(); // TV buttons: ON/OFF, Mute, AV/TV, Vol+, Vol-, OK, UP, Down, Left, Right, Menu, Exit, Return // Set-top box buttons: ON/OFF, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, V+, V-, Ch+, Ch-, Back, OK, Up, Down, Left, Right, Menu, Fav switch(ch) { //коды кнопок от телевизор case 'O': irsend.sendNEC(0x2FD48B7, 32); break; case 'X': irsend.sendNEC(0x2FD08F7, 32); break; case 'A': irsend.sendNEC(0x2FD28D7, 32); break; case '=': irsend.sendNEC(0x2FD58A7, 32); break; case '-': irsend.sendNEC(0x2FD7887, 32); break; case 'K': irsend.sendNEC(0x2FD847B, 32); break; case 'U': irsend.sendNEC(0x2FD9867, 32); break; case 'D': irsend.sendNEC(0x2FDB847, 32); break; case 'L': irsend.sendNEC(0x2FD42BD, 32); break; case 'R': irsend.sendNEC(0x2FD02FD, 32); break; case 'M': irsend.sendNEC(0x2FDDA25, 32); break; case 'E': irsend.sendNEC(0x2FDC23D, 32); break; case 'B': irsend.sendNEC(0x2FD26D9, 32); break; //коды кнопок от телевизионной приставки case 'o': irsend.sendNEC(0x80BF3BC4, 32); break; case '1': irsend.sendNEC(0x80BF49B6, 32); break; case '2': irsend.sendNEC(0x80BFC936, 32); break; case '3': irsend.sendNEC(0x80BF33CC, 32); break; case '4': irsend.sendNEC(0x80BF718E, 32); break; case '5': irsend.sendNEC(0x80BFF10E, 32); break; case '6': irsend.sendNEC(0x80BF13EC, 32); break; case '7': irsend.sendNEC(0x80BF51AE, 32); break; case '8': irsend.sendNEC(0x80BFD12E, 32); break; case '9': irsend.sendNEC(0x80BF23DC, 32); break; case '0': irsend.sendNEC(0x80BFE11E, 32); break; case '+': irsend.sendNEC(0x80BFBB44, 32); break; case '_': irsend.sendNEC(0x80BF31CE, 32); break; case 'C': irsend.sendNEC(0x80BF19E6, 32); break; case 'c': irsend.sendNEC(0x80BFE916, 32); break; case 'b': irsend.sendNEC(0x80BF43BC, 32); break; case 'k': irsend.sendNEC(0x80BF738C, 32); break; case 'u': irsend.sendNEC(0x80BF53AC, 32); break; case 'd': irsend.sendNEC(0x80BF4BB4, 32); break; case 'l': irsend.sendNEC(0x80BF9966, 32); break; case 'r': irsend.sendNEC(0x80BF837C, 32); break; case 'm': irsend.sendNEC(0x80BF11EE, 32); break; case 'f': irsend.sendNEC(0x80BFA35C, 32); break; } } |
А если сигнал будет не 38кгц а выше как у соньковских автомагнитол HiR значком эта штука сможет распознать и повторить
Инфракрасный приемник TSOP1838 работает на частоте 38 кГц, поэтому сигналы более высоких частот он принять не сможет, для этой цели вы можете использовать другие модели аналогичных инфракрасных приемников, например, TSOP1840 (работает на частоте 40 кГц), TSOP1856 (работает на частоте 56 кГц) и т.д. Во всем остальном работа проекта не изменится
Зачетно.
Тоже уже пару дней кручу мысль в голове по реализации такой связки: смартфон-> Bluetooth -> МК -> ТВ
Возьму за основу, только переработаю алгоритм: сделаю выбор устройства которым хочу управлять и соответственно будет меняться интерфейс кнопок на экране...
Вот что бывает когда ребенок отрывает кнопки ПДУ 🙂
Будем признательны если потом нам отпишитесь здесь о том, получилось ли у вас это сделать или нет
Для чего в Исходном коде программы используется переменная int i=0;?
К какому выводу и как подключен инфракрасный светодиод и как код это понимает?
И, если возможно, дайте ссылку на .aia файл Вашего мобильного приложения: для новичка картинка в статье сложна для восприятия.
С уважением
Переменная int i=0 в этой программе действительно лишняя, наверное, из другой программы осталась. Светодиод подключен к контакту 3 платы Arduino. Посмотрел еще ряд ресурсов в сети на эту тему, для ИК передатчика указывать контакт в программе не требуется. Например, можете посмотреть здесь - arduino.ru/forum/programmirovanie/ir-peredatchik
Приложение, к сожалению, не мое, поэтому этого файла у меня нет, но на указанный редактор я со своим аккаунтом гугла захожу без проблем.
Не пробовали эмулировать пульты ДУ с 455 кГц?
Не, к сожалению не пробовал. У нас на сайте рассматривается еще эмулирование пульта ДУ кондиционера если это вам интересно.