Официальный сайт компании Arduino по адресу arduino.cc
Управление Аудио Системой и Телевизором с помощью одного пульта (IRremote)
- Войдите или зарегистрируйтесь, чтобы получить возможность отправлять комментарии
Технологии развиваются и порой сложно обновлять полностью свой парк оборудования для полного соответствия тенденция современного мира.
Получилось так, что телевизор у меня относительно новый (LED SAMSUNG UE40EH5307K), а вот аудиоресивер (PIONER VSX-D512) уже устарел в плане набора интерфейсов входа сигнала (нет HDMI) и как в следствии нет ANYNET+ (протокол для управления всеми устройствами одним пультом).
С телевизора у меня идет цифровой аудио сигнал по оптическому кабелю к ресиверу и регулировать громкость с пульта телевизора НЕВОЗМОЖНО, а пользоваться двумя пультами это смерти подобно (да и жена постоянно жаловалась, что жуть как все это неудобно), плюс ко всему когда отключаешь телевизор приходится отдельно выключать ресивер.
Тогда был рожден на свет мини проект по приему сигнала от пульта телевизора и передача их так же в IR варианте на ресивер.
Сначала считываем коды кнопок пульта телевизора (у меня используются кнопки POWER; VOLUME+/-; MUTE)
Считываем с помощью примера IRrecvDump из самой библиотеки IRremote и подключенного TSOP приемника к arduino.
ПРИМЕР: кнопка на пульте от телевизора SAMSUNG VOLUME+
E0E0E01F E0E0E01F (32 bits) Raw (68): 8942 4550 -4400 600 -1650 550 -1650 600 -1650 550 -550 600 -500 600 -500 600 -500 600 -550 600 -1600 600 -1650 550 -1650 600 -500 600 -550 550 -550 600 -500 600 -500 600 -1650 550 -1650 600 -1650 550 -550 600 -500 600 -500 600 -500 600 -550 550 -550 600 -500 600 -500 600 -1650 600 -1600 600 -1650 600 -1600 600 -1650 550
Отсюда нам понадобится только значение E0E0E01F. (и его рабочий вариант 0xE0E0E01F)
А вот для управления ресивером, нам нужно еще знать какой протокол используется (NEC,JVC,Panasonic или RAW данные) и его разрядность
ПРИМЕР: кнопка на пульте от ресивера PIONER VOLUME+
A55A50AF Decoded NEC: A55A50AF (32 bits) Raw (68): 534 8450 -4200 550 -1550 550 -500 550 -1550 600 -450 550 -500 550 -1550 550 -500 550 -1550 550 -500 600 -1500 550 -500 600 -1500 600 -1500 600 -450 600 -1500 600 -500 550 -450 600 -1550 550 -450 600 -1550 550 -450 600 -500 550 -500 550 -450 600 -1550 550 -500 550 -1550 550 -500 550 -1550 550 -1550 600 -1500 600 -1500 550
Тут мы воспользуемся данными NEC: A55A50AF (32 bits).
По аналогии записываем все остальные кнопки.
Далее, пишем простой скетч и подключаем IR диод к 3 цифровому (digital) пину через резистор 100-220 кОм и приемник TSOP к 5 цифровому пину
#include <IRremote.h> //Библиотека Irremote IRsend irsend; int RECEIVE_PIN = 5; // пин на который поступают данные с IR приемника IRrecv irrecv(RECEIVE_PIN); decode_results results; void setup() { irrecv.enableIRIn(); // включаем приемник Serial.begin(9600); } void loop(){ if (irrecv.decode(&results)) { if(results.value==0xE0E040BF) { irsend.sendNEC(0xA55A38C7,32); Serial.println("POWER"); } if(results.value==0xE0E0E01F) { irsend.sendNEC(0xA55A50AF,32); Serial.println("Volume +"); } if(results.value==0xE0E0D02F) { irsend.sendNEC(0xA55AD02F,32); Serial.println("Volume -"); } if(results.value==0xE0E0F00F) { irsend.sendNEC(0xA55A48B7,32); Serial.println("MUTE"); } irrecv.enableIRIn(); // Снова включаем приемник irrecv.resume(); // Сбрасываем последнее значение приемника } }
Единственный минус, нужно закрепить ir диод перед ir приемником на ресивере и закрыть сам приемник от внешних помех, иначе ресивер откажется принимать сигнал от arduino уловив сначала сигнал от пульта телевизора (ir приемник способен обрабатывать только один сигнал за раз)
P.S. Знаю, что существуют универсальные пульты, но они меня раздражают.
Далее, пишем простой скетч и подключаем IR диод к 3 цифровому (digital) пину через резистор 100-220 кОм и приемник TSOP к 5 цифровому пину
Может Ом?
Может Ом?
Все верно, спасибо что поправили.