Универсальный инфракрасный пульт ДУ на основе Arduino и приложения для Android

Наверняка у многих из вас в доме есть несколько инфракрасных пультов дистанционного управления (ДУ) различными электронными устройствами. Иногда пользоваться всеми ими бывает затруднительно и хотелось бы иметь один универсальный пульт, который смог бы заменить все эти пульты. В этой статье мы рассмотрим проект превращения смартфона на операционной системе Android в универсальный инфракрасный пульт дистанционного управления на основе платы Arduino.

Внешний вид универсального инфракрасного пульта ДУ на основе Arduino

Необходимые компоненты

Плата Arduino Uno
Источник питания
Инфракрасный светодиод
Приемник TSOP-IR (1838T)
Модуль Bluetooth (HC05)
Смартфон или другое устройство с операционной системой Android

Принцип работы универсального пульта

Многие из вас для управления телевизором вынуждены использовать 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

Плата Arduino в рассматриваемом проекте выполняет сразу две функции: одна заключается в декодировании инфракрасных сигналов от пультов ДУ, а вторая — в управлении инфракрасным излучателем.

Для декодирования сигналов от инфракрасных пультов ДУ мы будем использовать заголовочный файл от Ken Shirriff’s IRremote, который значительно упрощает эти процессы. Для работы с этим заголовочным файлом вы должны сделать следующую последовательность действий:

  1. Скачать эту библиотеку инфракрасной связи по ссылке https://github.com/z3t0/Arduino-IRremote.
  2. Распаковать ее и поместить ее в папку библиотек Arduino (Arduino ‘Libraries’ folder). Затем переименовать извлеченную из архива папку в IRremote.
  3. Затем необходимо загрузить приведенный код в плату 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
}
}

После того как вы сумеете это реализовать аккуратно запишите все значения кодов и другую представленную информацию для всех кнопок со всех пультов ДУ, которые вы хотите реализовать в вашем универсальном пульте. Таким образом, вы создадите своеобразную базу данных кнопок и соответствующих им кодов.

Правильное расположение исследуемого пульта ДУ и нашего устройства

Примеры считанных кодов в мониторе последовательного порта Arduino

Представленный пример программы для декодирования сигналов инфракрасных пультов ДУ был взят из подпапки ‘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.

Выбор пакета Bluetooth

Этот пакет не показывается сразу на экране потому что он расположен под “Non-visible Components” – это компоненты, которые не отображаются в графическом интерфейсе пользователя.

Шаг 4. На этом шаге вам предстоит формирование программного кода, в котором вы должны определить функции для всех компонентов, которые вы выбрали, и каким образом вы будете работать с ними.

Страница формирования программного кода для интерфейса универсального пульта ДУ

Слева экрана вы увидите все пакеты, которые вы выбрали в графической секции (GUI section). Картинки сверху показывают все компоненты, которые содержатся в каждом использованном вами пакете. Также учтите, что адрес Bluetooth модуля будет нужен в текстовом формате.

Шаг 5. После того как вы завершите конфигурирование вашего приложения, нажмите на вкладку “Build” как показано выше и выберите вторую опцию. Это позволит скачать созданное вами приложение на компьютере в “.apk” формате. Затем просто передайте этот .apk файл на ваш телефон с Android и установите приложение там.

Компиляция программного кода интерфейса универсального пульта ДУ

Исходный код программы

Прежде чем использовать приведенный ниже текст программы вы должны заменить в нем HEX коды (шестнадцатеричные коды) кнопок с пультов ДУ, которые вы хотите замещать, на свои – те, которые вы определили с помощью программы, приведенной в первой половине этой статьи.

#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;
}
}

Видео, демонстрирующее работу схемы

(1 голосов, оценка: 5,00 из 5)
Загрузка...
48 просмотров


Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *