Управление бытовой техникой с помощью Android-смартфона

Перевел SaorY для mozgochiny.ru

Доброго времени суток всем мозгодрузьям! В копилку универсальных пультов добавляю свое мозгоруководство о том, как научить свой смартфон контролировать вашу бытовую технику.

 

upravlenie-byitovoy-tehnikoy-s-pomoshhyu-android-smartfona2

Реализовав шаги данного проекта, который состоит из двух частей: получение сигналов ДУ и сборка передающего модуля, вы сможете управлять вашими телевизором, DVD и аудио-системой с непосредственно со смартфона. Понадобится для этого приложение написанное в App Inventor и еще несколько компонентов:

  • Arduino One — 1шт.
  • макетная плата — 1шт.
  • ИК-приемник Tsop1838 или эквивалентный — 1шт. (в проекте используется лишь для захвата управляющих сигналов)
  • ИК-светодиоды — 2шт.
  • Bluetooth-модуль НС-05 — 1шт.
  • резистор 220 Ом — 2шт.
  • кабели с разъемами
  • пульт ДУ — используется лишь для захвата сигнала

 

 

Шаг 1: Сборка считывающего устройства

 

upravlenie-byitovoy-tehnikoy-s-pomoshhyu-android-smartfona3

 

upravlenie-byitovoy-tehnikoy-s-pomoshhyu-android-smartfona4

 

upravlenie-byitovoy-tehnikoy-s-pomoshhyu-android-smartfona5

upravlenie-byitovoy-tehnikoy-s-pomoshhyu-android-smartfona1

 

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

ИК-приемник имеет три контакта, первый из которых подключаем к 11-му контакту Arduino, второй на массу, а третий к +5В. Кстати, ИК-сенсоры, такие как Tsop1838 можно подключать к любому цифровому входному контакту.

Далее скачиваем библиотеку IRremote, которая позволяет получать и отправлять ИК-сигналы различных протоколов, таких как Nec, Philips RC5, RC6 Philips и т.п. После этого скачиваем сам код для ArduinoprobarCodigosRaw.

#include
int RECV_PIN = 11;

IRrecv irrecv(RECV_PIN);

decode_results results;

void setup() {

Serial.begin(9600);

irrecv.enableIRIn(); // Start the receiver

}

// Dumps out the decode_results structure.

// Call this after IRrecv::decode()

// void * to work around compiler issue

//void dump(void *v)

{ // decode_results *results = (decode_results *)v

void dump(decode_results *results)

{ int count = results->rawlen;

if (results->decode_type == UNKNOWN)

{ Serial.print(«Unknown encoding: «);

}

else if (results->decode_type == NEC)

{ Serial.print(«Decoded NEC: «);

} else if (results->decode_type == SONY)

{ Serial.print(«Decoded SONY: «);

}

else if (results->decode_type == RC5)

{ Serial.print(«Decoded RC5: «); }

else if (results->decode_type == RC6)

{ Serial.print(«Decoded RC6: «); }

else if (results->decode_type == PANASONIC)

{ Serial.print(«Decoded PANASONIC – Address: «);

Serial.print(results->panasonicAddress,HEX);

Serial.print(» Value: «); }

else if (results->decode_type == JVC)

{ Serial.print(«Decoded JVC: «); }

Serial.print(results->value, HEX);

Serial.print(» («);

Serial.print(results->bits, DEC);

Serial.println(» bits)»);

Serial.print(«Raw («);

Serial.print(count, DEC);

Serial.print(«): «);

for (int i = 0; i < count; i++)

{ if ((i % 2) == 1)

{ Serial.print(results->rawbuf[i]*USECPERTICK, DEC); }

else

{ Serial.print(-(int)results->rawbuf[i]*USECPERTICK, DEC); }

Serial.print(» «); }

Serial.println(«»); }

void loop()

{

if (irrecv.decode(&results))

{

Serial.println(results.value, HEX);

dump(&results);

irrecv.resume(); // Receive the next value

}

}

 

 

Шаг 2: Захват сигналов

 

upravlenie-byitovoy-tehnikoy-s-pomoshhyu-android-smartfona6

 

После того как считывающее устройство поделки собрано, открываем в Arduino IDE окно последовательного монитора и на пульте ДУ от вашей техники нажимаем нужную кнопку, при этом Arduino должен получать данные, то есть считывать протокол, сигнал и необработанные данные.

На фото представлены данные которые получает моя самоделка при нажатии кнопок «power» и «open/closed» на пульте от DVD.

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

В своем коде я использовал следующие кнопки:

  • для телевизора — power, громкость+, громкость-, канал +, канал- и режим TV/Dvd
  • для DVD — power, open/close, play and stop
  • для аудио-системы — power, play cd и кнопка preset

Сигналы этих кнопок будут прописаны в коде.

 

 

Шаг 3: Передающее устройство

 

upravlenie-byitovoy-tehnikoy-s-pomoshhyu-android-smartfona7

 

upravlenie-byitovoy-tehnikoy-s-pomoshhyu-android-smartfona8

 

Для создания передатчика нужны всего лишь:

  • Arduino
  • Bluetooth-модуль
  • ИК-светодиоды (количество светодиодов зависит от расположения вашей техники в доме, мне хватило и двух)

Замечу, что ИК-светодиоды необходимо подключить к 3-му контакту Arduino, потому что именно его задействует библиотека.

На Arduino в этой мозгоподелке используются лишь три контакта:

№ 3 — для светодиодов

№ 0 — Bluetooth-модуль, контакт Tx

№ 1 — Bluetooth-модуль, контакт Rx

!!! При загрузке кода на Arduino модуль Bluetooth должен быть отключен!

 

 

Шаг 4: Загрузка кода

Кликаем  DomoArdu для начала загрузки или копируем следующие строки:

#include «<\IrRemote.h\>»;

IRsend ir;

int estado=0;

char dato;

//These codes are for controlling the Audio System

unsigned int powerEquipo[32]={300,750,300,1800,300,700,350,700,350,1750,350,700,300,1800,250,1800,350,700,300,1800,350,700,300,700,350,700,350,1750,300,750,300}; //unsigned int chEmisoraUp[32]= {300,750,300,750,300,1750,250,800,300,750,300,750,250,800,300,750,250,1800,250,1850,300,750,250,800,200,800,300,1800,300,750,300}; unsigned int chEmisoraUp[32] ={300,750,300,750,300,1800,200,850,300,750,250,750,300,750,300,750,300,1800,300,1750,300,750,300,750,300,750,300,1800,250,750,300}; unsigned int chEmisoraDown[32] = {350,700,400,650,300,1750,350,700,350,700,350,700,300,750,300,700,350,700,300,750,350,1750,400,650,300,700,350,1750,300,750,300};

unsigned int playCd[32] = {400,650,400,650,350,1750,350,700,350,650,350,1750,350,1750,300,1750,400,1700,350,1750,350,700,350,650,400,650,350,1750,450,600,350};

//These codes are for controlling the Tv

unsigned int pwrTv[68]={4600,4350,700,1550,650,1550,650,1600,650,450,650,450,650,450,650,450,700,400,700,1550,650,1550,650,1600,650,450,650,450,650,450,700,450,650,450,650,450,650,1550,700,450,650,450,650,450,650,450,650,450,700,400,650,1600,650,450,650,1550,650,1600,650,1550,650,1550,700,1550,650,1550,650}; // volume up unsigned int volUpTv[68]={4600,4350,650,1550,700,1500,700,1550,700,400,700,400,700,450,650,450,700,400,700,1500,700,1550,650,1550,700,400,700,400,700,450,650,450,700,400,700,1500,700,1550,650,1550,700,400,700,450,700,400,700,400,700,400,700,450,650,450,650,450,650,1550,700,1500,700,1550,700,1500,700,1550,650}; // volume down unsigned int volDownTv[68]={4600,4350,700,1550,650,1550,700,1500,700,450,650,450,700,400,700,400,700,400,700,1550,700,1500,700,1550,700,400,700,400,700,400,700,450,650,450,650,1550,700,1500,700,450,650,1550,700,400,700,400,700,450,700,400,700,400,700,400,700,1550,700,400,700,1500,700,1500,700,1550,700,1500,700}; // channel up unsigned int chUpTv[68]={4600,4350,700,1500,700,1500,700,1550,700,450,650,400,700,450,650,450,700,400,700,1500,700,1550,650,1550,700,450,650,450,700,400,700,400,700,400,700,400,700,1550,700,400,700,400,700,1550,650,450,700,400,700,400,700,1550,650,450,650,1600,650,1550,650,450,700,1500,700,1500,700,1550,650}; // channel down unsigned int chDownTv[68]={4650,4300,700,1550,700,1500,700,1550,700,400,700,400,700,400,700,450,650,450,650,1550,700,1500,700,1550,700,400,700,400,700,400,700,450,700,400,700,400,700,400,700,450,650,450,650,1550,700,400,700,450,650,400,700,1550,700,1500,700,1550,700,1500,700,400,700,1550,650,1550,700,1500,700};

// Tv/Video unsigned int videoTv[68]={4500,4300,650,1600,650,1550,650,1600,650,500,600,500,650,500,650,500,650,500,600,1650,600,1600,650,1550,650,500,650,500,650,500,600,500,650,500,650,1600,600,500,650,500,650,500,650,500,600,550,600,500,650,500,650,500,650,1550,650,1600,650,1550,650,1600,650,1550,650,1600,650,1550,650};

void setup()

{

Serial.begin(9600);

}

void loop()

{

if(Serial.available()>0)

{ dato=Serial.read();

switch (dato)

{ case ‘R’:

ir.sendRaw(powerEquipo,32,38);

delay(500);

break;

case ‘T’:

ir.sendRaw(chEmisoraUp,32,38);

delay(100);

break;

case ‘U’:

ir.sendRaw(chEmisoraDown,32,38);

delay(100);

break;

case ‘V’:

ir.sendRaw(playCd,32,38);

delay(100);

break;

case ‘K’:

//Power the TV

ir.sendRaw(pwrTv,68,38);

delay(100);

break;

case ‘L’:

//Volume +

ir.sendRaw(volUpTv,68,38);

delay(100);

break;

case ‘M’:

//Volume —

ir.sendRaw(volDownTv,68,38);

delay(100);

break;

case ‘N’:

//Channel +

ir.sendRaw(chUpTv,68,38);

delay(100);

break;

case ‘O’:

//Channel —

ir.sendRaw(chDownTv,68,38);

delay(100);

break;

case ‘P’:

// Tv/Video

ir.sendRaw(videoTv,68,38);

delay(100);

break;

case ‘A’:

for (int i = 0; i < 3; i++)

{

ir.sendNEC(0xFF30CF, 32); // Power the DVD

delay(40);

}

break;

case ‘B’:

for (int i = 0; i < 3; i++)

{

ir.sendNEC(0xFF00FF, 32); // Open /Close

delay(40);

}

break;

case ‘C’:

for (int i = 0; i < 3; i++)

{

ir.sendNEC(0xFF52AD, 32); // Play

delay(40);

}

break;

case ‘D’:

for (int i = 0; i < 3; i++)

{

ir.sendNEC(0xFF728D, 32); // Stop

delay(40);

} break;

} // fin del switch

} //fin del if

}//fin del loop

 

 

Шаг 5: Приложение для смартфона

 

upravlenie-byitovoy-tehnikoy-s-pomoshhyu-android-smartfona9

 

upravlenie-byitovoy-tehnikoy-s-pomoshhyu-android-smartfona10

 

На рисунке представлена блоковая диаграмма приложения самоделки созданного в App Inventor 2. Само же приложение Domo-Ardu, которое нужно просто загрузить в смартфон, использует Bluetooth-клиент, несколько кнопок, этикеток и наклеек, а для его работы нужно установить Bluetooth-соединение, выбрать устройство и нажать одну из возможных кнопок управления.

Вот такое небольшое, но надеюсь полезное мозгоруководство у меня получилось.

Благодарю за внимание и удачи в творчестве!

 

(A-z Source)

ПОДЕЛИТЕСЬ С ДРУЗЬЯМИ!


One Reply to “Управление бытовой техникой с помощью Android-смартфона”

  1. хай мене пофарбують. замість звичайного пульта треба тягати смарт, повинен бути запущений блютус то ірда інтерфейс. для загального розвитку — цілком, а от для використання: смарт важчий і більший дісташки, для того щоб перемкнути канал потрібно: увімкнути зуб *жре як не в себе, і акумулятор не гірше ввафая садть, запустити прогу, а тоді перемкнути канал. та простіше сідницю відірвати від ліжка, або знайти пульт.
    в свій час намагався розібратись з системою команд пульта ДУ. щось не вийшло і просто закинув. може натхнення з’явиться і ще раз спробую на готовому прикладі

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

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

* Copy This Password *

* Type Or Paste Password Here *