Управление Аудио Системой и Телевизором с помощью одного пульта (IRremote)

OEMBSOD
OEMBSOD аватар
Offline
Зарегистрирован: 31.05.2014

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

 

 Получилось так, что телевизор у меня относительно новый (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. Знаю, что существуют  универсальные пульты, но они меня раздражают.

Umka
Umka аватар
Offline
Зарегистрирован: 19.10.2012

OEMBSOD пишет:

Далее, пишем простой скетч и подключаем IR диод к 3 цифровому (digital) пину через резистор 100-220 кОм и приемник TSOP к 5 цифровому пину

 

Может Ом?

OEMBSOD
OEMBSOD аватар
Offline
Зарегистрирован: 31.05.2014

Umka пишет:

Может Ом?

 

Все верно, спасибо что поправили.