Как я тв-приставку научил понимать чужой пульт

[ Версия для печати ]
Добавить в Telegram Добавить в Twitter Добавить в Вконтакте Добавить в Одноклассники
Страницы: (5) [1] 2 3 ... Последняя »  К последнему непрочитанному [ ОТВЕТИТЬ ] [ НОВАЯ ТЕМА ]
Kirasa
24.12.2015 - 18:51
Статус: Offline


Приколист

Регистрация: 24.08.06
Сообщений: 329
152
Замучала мою семью ситуация с пультами - половину каналов смотрим с тв-приставки, половину - с антенны (местные новости не кажут по цифровому тв). Соответственно, каждый раз брать новый пульт. По закону подлости, именно нужный пульт будет отложен в самый дальний неудобный угол.
А тут как раз мне пришло несколько ардуинок (брал для авто, навороты в панель приборов, несколько штук - с запасом).
А на тв-пульте много кнопок...
Фото 1 - ардуинка

Как я тв-приставку научил понимать чужой пульт
 
[^]
Yap
[x]



Продам слона

Регистрация: 10.12.04
Сообщений: 1488
 
[^]
Kirasa
24.12.2015 - 18:52
Статус: Offline


Приколист

Регистрация: 24.08.06
Сообщений: 329
Фото 2 - пульты. От тв, от приставки и двд. Изначально планировалось, что ТВ-ПУЛЬТ бубет рулить не только приставкой, но и ДВД-плеером. Впоследствии двд остался не у дел.

Как я тв-приставку научил понимать чужой пульт
 
[^]
Kirasa
24.12.2015 - 18:53
Статус: Offline


Приколист

Регистрация: 24.08.06
Сообщений: 329
Фото 3. На ардуинку напаян ИК-датчик. На фото 1 - ик-диод с резистором.

Как я тв-приставку научил понимать чужой пульт
 
[^]
Kirasa
24.12.2015 - 18:55
Статус: Offline


Приколист

Регистрация: 24.08.06
Сообщений: 329
Фото 4. Прикупил вот такой переходник, чтоб воткнуть девайс в лицевой УСБ-разъём на приставке. ИК-приёмник смотрит вперёд (на телезрителя с пултом), ИК-диод - назад (на тв-приставку). Отладка производилась именно в такой конфигурации.

Как я тв-приставку научил понимать чужой пульт
 
[^]
Kirasa
24.12.2015 - 19:00
Статус: Offline


Приколист

Регистрация: 24.08.06
Сообщений: 329
Фото 5, последнее. Ардуина встроена в тв-приставку (пришлось пломбу порвать). Питание взято с разъёма УСБ. ИК-датчик использован от приставки, штатный - его подслушиваем. ИК-диод приклеен изнутри сбоку ИК-датчика, сигнал проходит.


Принцип действия: ардуина ловит все ик-сигналы, если они соответствуют кнопкам ТВ-пульта "вверх вниз вправо влево ввод выход" то генерирует коды ик-пульта от ТВ-приставки, "вверх вниз вправо влево ОК выход".

В режиме просмотра ТВ каналов с антенны нажатие этих кнопок на ТВ-пульте не вызывает никакой реакции телевизора. В режиме просмотра ТВ-приставки - это переключение каналов, громкость и вход в список каналов (навигация по нему и выход).

Добавлено в 19:02
Заизолировано скотчем. Желтая хрень слева - спрятаный джампер отключения питания, чтоб перешивать ардуину (не конфликтовать +5В с приставки и компьютера). Ик-диод приклеен прямо над УСБ-разъёмом, видно на фото.

Как я тв-приставку научил понимать чужой пульт
 
[^]
шщгуйшгцучзщ
24.12.2015 - 19:02
4
Статус: Offline


UQ < 0

Регистрация: 8.11.15
Сообщений: 249
логика - принять ик код, замена кода, выдат ик.
молодца!
 
[^]
Kirasa
24.12.2015 - 19:03
1
Статус: Offline


Приколист

Регистрация: 24.08.06
Сообщений: 329
Схема предельно простая - на 2 ногу ардуино нано заводится сигнал с ИК-приёмника, с 3-ей ноги - выходит сигнал на ИК-диод (последовательно включен резистор примерно 100 Ом, вообще-то резистор необязательно

Алгоритм работы:

Ловим ик-сигнал от ТВ-пульта. Если он есть в условии перекодировки - посылаем ИК-сигнал, имитирующий пульт ТВ-приставки или DVD.

Для этого нам надо знать следующее:

1. Коды нужных кнопок ТВ-пульта (у меня сейчас задействованы кнопки вверх-вниз-вправо-влево-центр-выход). Нажатие этих кнопок при просмотре телевизора не вызывает никаких действий телевизора, используются при работе с меню. При работе с DVD будет задействован блок кнопок в нижней части ТВ-пульта, он также не влияет на работу ТВ.

2. Коды нужных кнопок пульта ТВ-приставки (также вверх-вниз-вправо-влево-центр-выход). Эти кнопки на приставке переключают каналы и регулируют громкость, а также служат для навигации по списку каналов (открывается центральной кнопкой, выход - кнопка ексит)

3. Тип кодирования сигнала пульта ТВ-приставки

4. Коды нужных кнопок DVD и тип кодирования (пока работа с DVD пультом не сделана, из-за поломки DVD)/ Вообще, число добавляемых пультов непринципиально.

Как узнать эти коды и тип кодирования?

Качаем библиотеку Arduino-IRremote-master.zip, а установленную по умолчанию RobotIRremote удаляем (там нет передачи сигнала, только приём).С библиотекой идёт примеры кода, заливаем IRrecvDump (вывод приёмника - ставим 2). Запускаем монитор порта, жамкаем кнопки и записываем.

У меня получились примерно такие записи:

пульт ТВ
вверх
E0E006F9
E0E006F9 (32 bits)
Raw (68): 4450 -4450 550 -1700 550 -1650 550 -1700 550 -600 500 -550 550 -600 500 -600 550 -550 550 -1650 550 -1700 550 -1650 550 -600 500 -600 550 -550 550 -600 500 -600 500 -600 550 -550 550 -600 500 -550 550 -600 550 -1650 550 -1700 500 -600 550 -1700 500 -1700 550 -1650 550 -1700 500 -1700 550 -550 550 -600 500 -1700 550


ТВ приставка
кнопка вверх
807F22DD
Decoded NEC: 807F22DD (32 bits)
Raw (68): 8900 -4450 600 -1650 600 -550 550 -550 550 -550 600 -550 550 -550 550 -550 550 -550 550 -600 550 -1650 550 -1650 600 -1700 550 -1650 550 -1650 600 -1650 550 -1700 550 -550 550 -550 600 -1650 550 -550 600 -550 550 -550 550 -1650 600 -550 550 -1650 550 -1650 600 -550 550 -1650 600 -1650 600 -1650 550 -600 550 -1650 550

RAW - коды можно не записывать, для приёма сигнала они не актуальны, раз есть хекс-код. А для передачи они нужны только в случае, если не определён тип кодирования. У меня он определён - NEC
 
[^]
Kirasa
24.12.2015 - 19:04
3
Статус: Offline


Приколист

Регистрация: 24.08.06
Сообщений: 329
Собственно код программы

#include <IRremote.h>
#include <IRremoteInt.h>

/*
* Default is Arduino pin D11.
* You can change this to another available Arduino Pin.
* Your IR receiver should be connected to the pin defined here
*/
int RECV_PIN = 2;
volatile unsigned long in_signal = 0;

IRrecv irrecv(RECV_PIN);
decode_results results;
IRsend irsend;

void setup()
{
Serial.begin(9600);
pinMode(13, OUTPUT);
irsend.enableIROut(38);
irrecv.enableIRIn(); // Start the receiver
}

void dump(decode_results *results) {
// Dumps out the decode_results structure.
// Call this after IRrecv::decode()
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->address, HEX);
Serial.print(" Value: ");
}
else if (results->decode_type == LG) {
Serial.print("Decoded LG: ");
}
else if (results->decode_type == JVC) {
Serial.print("Decoded JVC: ");
}
else if (results->decode_type == AIWA_RC_T501) {
Serial.print("Decoded AIWA RC T501: ");
}
else if (results->decode_type == WHYNTER) {
Serial.print("Decoded Whynter: ");
}
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 = 1; i < count; i++) {
if (i & 1) {
Serial.print(results->rawbuf[i]*USECPERTICK, DEC);
}
else {
Serial.write('-');
Serial.print((unsigned long) results->rawbuf[i]*USECPERTICK, DEC);
}
Serial.print(" ");
}
Serial.println();
}

void loop() {
decode_results results;
if (irrecv.decode(&results)) {
in_signal=results.value;
Serial.println(results.value, HEX);
dump(&results);
if (in_signal==0xE0E006F9){ //кнопка вверх
digitalWrite(13, HIGH); // turn the LED on (HIGH is the voltage level)
irsend.sendNEC(0x807F22DD, 32);
delay(200);
digitalWrite(13, LOW); // turn the LED on (HIGH is the voltage level)
in_signal=0;
irrecv.enableIRIn();
};

if (in_signal==0xE0E08679){ //кнопка вниз
digitalWrite(13, HIGH); // turn the LED on (HIGH is the voltage level)
irsend.sendNEC(0x807F12ED, 32);
delay(200);
digitalWrite(13, LOW); // turn the LED on (HIGH is the voltage level)
in_signal=0;
irrecv.enableIRIn();
};

if (in_signal==0xE0E046B9){ //кнопка вправо
digitalWrite(13, HIGH); // turn the LED on (HIGH is the voltage level)
irsend.sendNEC(0x807F02FD, 32);
delay(200);
digitalWrite(13, LOW); // turn the LED on (HIGH is the voltage level)
in_signal=0;
irrecv.enableIRIn();
};

if (in_signal==0xE0E0A659){ //кнопка влево
digitalWrite(13, HIGH); // turn the LED on (HIGH is the voltage level)
irsend.sendNEC(0x807F32CD, 32);
delay(200);
digitalWrite(13, LOW); // turn the LED on (HIGH is the voltage level)
in_signal=0;
irrecv.enableIRIn();
};

if (in_signal==0xE0E016E9){ //кнопка центр
digitalWrite(13, HIGH); // turn the LED on (HIGH is the voltage level)
irsend.sendNEC(0x807F609F, 32);
delay(200);
digitalWrite(13, LOW); // turn the LED on (HIGH is the voltage level)
in_signal=0;
irrecv.enableIRIn();
};

if (in_signal==0xE0E0B44B){ //кнопка ексит
digitalWrite(13, HIGH); // turn the LED on (HIGH is the voltage level)
irsend.sendNEC(0x807FC03F, 32);
delay(200);
digitalWrite(13, LOW); // turn the LED on (HIGH is the voltage level)
in_signal=0;
irrecv.enableIRIn();
};

irrecv.resume();
}
}


Добавлено в 19:05
Особенности:

1. Для отладки оставлена посылка в монитор порта принятых кодов пульта

2. Зелёный светодиод 13 вывода загорается при отсылке ИК-команды и тухнет через 0.2 сек.

3. Зелёный светодиод TX(rx?) мигает при приёме ИК-команд (само получилось)

4. После команды irsend НЕОБХОДИМО вызвать команду irrecv.enableIRln(); иначе приёмник перестаёт работать.

5. Приёмник можно садить на разные ноги ардуины (кажется, не на любые), передатчик - заточен в библиотеке на 3 вывод.

6. Ещё один вариант использования устройства - считать коды с полудохлого (изношены резинки, разбит корпус, просто неудобный) пульта и использовать для управления новый удобный пульт с другой системой команд (но с достаточным числом кнопок)


Заметная задержка исполнения команд меня не напрягает, но можно уменьшить (сейчас 0.2 сек)
 
[^]
maksim0110
24.12.2015 - 19:06
21
Статус: Offline


Балагур

Регистрация: 30.05.14
Сообщений: 967
Цитата (Kirasa @ 24.12.2015 - 19:03)
Схема предельно простая - на 2 ногу ардуино нано заводится сигнал с ИК-приёмника, с 3-ей ноги - выходит сигнал на ИК-диод (последовательно включен резистор примерно 100 Ом, вообще-то резистор необязательно

Алгоритм работы:

Ловим ик-сигнал от ТВ-пульта. Если он есть в условии перекодировки - посылаем ИК-сигнал, имитирующий пульт ТВ-приставки или DVD.

Для этого нам надо знать следующее:

1. Коды нужных кнопок ТВ-пульта (у меня сейчас задействованы кнопки вверх-вниз-вправо-влево-центр-выход). Нажатие этих кнопок при просмотре телевизора не вызывает никаких действий телевизора, используются при работе с меню. При работе с DVD будет задействован блок кнопок в нижней части ТВ-пульта, он также не влияет на работу ТВ.

2. Коды нужных кнопок пульта ТВ-приставки (также вверх-вниз-вправо-влево-центр-выход). Эти кнопки на приставке переключают каналы и регулируют громкость, а также служат для навигации по списку каналов (открывается центральной кнопкой, выход - кнопка ексит)

3. Тип кодирования сигнала пульта ТВ-приставки

4. Коды нужных кнопок DVD и тип кодирования (пока работа с DVD пультом не сделана, из-за поломки DVD)/ Вообще, число добавляемых пультов непринципиально.

Как узнать эти коды и тип кодирования?

Качаем библиотеку Arduino-IRremote-master.zip, а установленную по умолчанию RobotIRremote удаляем (там нет передачи сигнала, только приём).С библиотекой идёт примеры кода, заливаем IRrecvDump (вывод приёмника - ставим 2). Запускаем монитор порта, жамкаем кнопки и записываем.

У меня получились примерно такие записи:

пульт ТВ
вверх
E0E006F9
E0E006F9 (32 bits)
Raw (68): 4450 -4450 550 -1700 550 -1650 550 -1700 550 -600 500 -550 550 -600 500 -600 550 -550 550 -1650 550 -1700 550 -1650 550 -600 500 -600 550 -550 550 -600 500 -600 500 -600 550 -550 550 -600 500 -550 550 -600 550 -1650 550 -1700 500 -600 550 -1700 500 -1700 550 -1650 550 -1700 500 -1700 550 -550 550 -600 500 -1700 550


ТВ приставка
кнопка вверх
807F22DD
Decoded NEC: 807F22DD (32 bits)
Raw (68): 8900 -4450 600 -1650 600 -550 550 -550 550 -550 600 -550 550 -550 550 -550 550 -550 550 -600 550 -1650 550 -1650 600 -1700 550 -1650 550 -1650 600 -1650 550 -1700 550 -550 550 -550 600 -1650 550 -550 600 -550 550 -550 550 -1650 600 -550 550 -1650 550 -1650 600 -550 550 -1650 600 -1650 600 -1650 550 -600 550 -1650 550

RAW - коды можно не записывать, для приёма сигнала они не актуальны, раз есть хекс-код. А для передачи они нужны только в случае, если не определён тип кодирования. У меня он определён - NEC

нифига ты материшься не по-нашему)))
 
[^]
михрюндель
24.12.2015 - 19:08
6
Статус: Offline


Приколист

Регистрация: 21.01.15
Сообщений: 300
void dump(decode_results *results) {
// Dumps out the decode_results structure.
// Call this after IRrecv::decode()
int count = results->rawlen;
if (results->decode_type == UNKNOWN) {
Serial.print("Unknown encoding: ");





можно здесь подробнее...
 
[^]
svolochenok
24.12.2015 - 19:09
2
Статус: Offline


Юморист

Регистрация: 13.01.15
Сообщений: 538
Такая же проблема с пультами (телек и приставка). Но для меня слишком геморно с ардуино. Но на заметку взял. Вот думаю может какой-нибудь универсальный пульт прикупить, если такой есть конечно.
 
[^]
bdfy1
24.12.2015 - 19:09
73
Статус: Offline


Приколист

Регистрация: 22.06.12
Сообщений: 226
Нда что только люди не делают чтобы не купить универсальный пульт у китайцев за 200 рублей

 
[^]
Kirasa
24.12.2015 - 19:12
1
Статус: Offline


Приколист

Регистрация: 24.08.06
Сообщений: 329
Цитата (михрюндель @ 24.12.2015 - 19:08)
void dump(decode_results *results) {
// Dumps out the decode_results structure.
// Call this after IRrecv::decode()
int count = results->rawlen;
if (results->decode_type == UNKNOWN) {
Serial.print("Unknown encoding: ");





можно здесь подробнее...

Кусок стандартного кода из примеров, идущих с библиотекой. В данном случае - если не определён тип кодировки, пишет unknoun. Нужен для определения, каким кодом пользуется пульт.
 
[^]
Bormoglotik
24.12.2015 - 19:13
29
Статус: Offline


Шутник

Регистрация: 24.09.13
Сообщений: 23
Kirasa
Цитата
Собственно код программы

#include <IRremote.h>
#include <IRremoteInt.h>

/*
* Default is Arduino pin D11.
* You can change this to another available Arduino Pin.
* Your IR receiver should be connected to the pin defined here
*/
int RECV_PIN = 2;
volatile unsigned long in_signal = 0;

IRrecv irrecv(RECV_PIN);
decode_results results;
IRsend irsend;

void setup()
{
Serial.begin(9600);
pinMode(13, OUTPUT);
irsend.enableIROut(38);
irrecv.enableIRIn(); // Start the receiver

Начал читать вслух, и в воздухе начали сверкать молнии...
Кажется, я вызвал сотону...
Это нормально?
 
[^]
lugan1979
24.12.2015 - 19:14
13
Статус: Offline


Шутник

Регистрация: 12.11.15
Сообщений: 41
Универсальный пульт на три устройства 350 р,неделю назад купил
 
[^]
Geo18
24.12.2015 - 19:14
1
Статус: Offline


Весельчак

Регистрация: 17.09.15
Сообщений: 118
Вклеить можно было и ардуино мини, предварительно прошив!
дешевле и места чуток меньше занимает! а по теме зелень!
 
[^]
АМАЛКЕР
24.12.2015 - 19:15
4
Статус: Offline


Шпаломётчик

Регистрация: 21.04.13
Сообщений: 781
Я вот не умею (пока) с ардуинами возиться, потому тупо купил обучаемый пульт. Теперь в нем зашиты пульты от всего, причем громкость, к примеру, какой бы прибор не был выбран на пульте регулируется только силами телевизора например.
 
[^]
касаб
24.12.2015 - 19:16
13
Статус: Offline


Юморист

Регистрация: 17.03.15
Сообщений: 514
прикольно конечно же
но я для таких подвигов чуть менее, чем туп
Цитата (svolochenok @ 24.12.2015 - 19:09)
Такая же проблема с пультами (телек и приставка). Но для меня слишком геморно с ардуино. Но на заметку взял.  Вот думаю может какой-нибудь универсальный пульт прикупить, если такой есть конечно.

вот этот девайс решил проблему с пультами раз и навсегда

Это сообщение отредактировал касаб - 24.12.2015 - 19:16

Как я тв-приставку научил понимать чужой пульт
 
[^]
михрюндель
24.12.2015 - 19:20
2
Статус: Offline


Приколист

Регистрация: 21.01.15
Сообщений: 300
что кризис делает с людьми. sad.gif
 
[^]
sharipovraus
24.12.2015 - 19:22
36
Статус: Online


Ярила

Регистрация: 27.10.14
Сообщений: 8578
Как я завидую людям, которые понимают о чем написано в посте...
 
[^]
TooGooD
24.12.2015 - 19:23
5
Статус: Offline


Творю добро

Регистрация: 5.09.13
Сообщений: 7557
Универсальник от китаез решает проблему и стоит 300 рублей
 
[^]
amatiel
24.12.2015 - 19:25
2
Статус: Offline


Ярила

Регистрация: 13.02.12
Сообщений: 5475
ТС, ты уже отписался, как должен был выглядеть самописец сбитой сушки?)))
 
[^]
Касей
24.12.2015 - 19:31
5
Статус: Offline


Приколист

Регистрация: 11.10.14
Сообщений: 317
И такое было

Как я тв-приставку научил понимать чужой пульт
 
[^]
Maksimilian
24.12.2015 - 19:33
2
Статус: Offline


Балагур

Регистрация: 26.03.13
Сообщений: 883
За ардуино плюс, но сам юзаю программируемый пульт (4 устройства можно записать) всем устраивает, удобно и без заморочек. Копируешь нужные пульты и вперед.
 
[^]
Kigo
24.12.2015 - 19:35
4
Статус: Offline


Рязанское дезинфо

Регистрация: 3.09.12
Сообщений: 3637
Блять у меня другая проблема, и телек и приставка понимают один и тот же пульт, причем, телек томсон, приставка ББК, и соотвественно оба реагирую на пульт, че делать хз, тока приставку или телек менять?
 
[^]
Понравился пост? Еще больше интересного в Телеграм-канале ЯПлакалъ!
Только зарегистрированные и авторизованные пользователи могут оставлять комментарии. Авторизуйтесь, пожалуйста, или зарегистрируйтесь, если не зарегистрированы.
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) Просмотры темы: 55583
0 Пользователей:
Страницы: (5) [1] 2 3 ... Последняя » [ ОТВЕТИТЬ ] [ НОВАЯ ТЕМА ]


 
 



Активные темы






Наверх