цифровая электроника
вычислительная техника
встраиваемые системы

 

Как избавиться от телевизионной рекламы с помощью Arduino

Автор: Mike(admin) от 22-02-2018, 03:55

Телевизионную рекламу сложно игнорировать, и она может полностью раздражать, когда вы слышали и видели то же самое в сотый раз. Было бы здорово избаиться от нее раз и навсегда. Но это очень трудная задача. Впрочем, можно значительно минимизировать ее негативное влияние. И для этого есть относительно простое решение.


Как избавиться от телевизионной рекламы с помощью Arduino

Энтузиаст под ником LittleTern изобрел способ дистанционно отключать звук в своей ТВ-приставке во время рекламной паузы, и вновь его включать автоматически, когда начинается фильм или телепередача после этой паузы. Для этого он задействовал плату Arduino.


Он задействовал несколько «неиспользуемых» кнопок на пульте телевизора Sony Bravia, чтобы управлять Arduino. Пульт Sony Bravia имеет четыре цветные кнопки, которые обычно ничего не делают: красная, зеленая, желтая и синяя. Этим кнопкам были назначены периоды, на время которых будет отключен звук: для красной кнопки 120 с, для зеленой кнопки 150 с, для желтой кнопки 180 с и для синей кнопки 210 сек. Это позволяет выбрать время, на которое можно отлучиться и не слышать раздражающей рекламы на фоне, в зависимости от канала или времени суток. Они могут быть легко настроены в соответствии с «контентом», который вы больше всего хотите отключить.


Для достижения своей цели LittleTern полагался на библиотеку для Arduino под названием IRremote (https://github.com/z3t0/Arduino-IRremote), поскольку ему нужно было расшифровать протокол Sony, а также имитировать его. Простая схема подключения системы на основе Arduino для приглушения звука во время рекламы показана ниже.


Как избавиться от телевизионной рекламы с помощью Arduino

В качестве ИК-детектора здесь используется IR1261, а номиналы трех резисторов составляют 4.7 КОм. Также он добавил на плату RGB-свеодиод, чтобы он светился тем же цветом, что и выбранная кнопка, и задействовал простой светодиодный индикатор, указывающий на то, что звук выключен. Код программы (скетч) для Arduino приведен ниже.


int IR_Rx = 2; // ИК-приемник
int IR_Tx = 3; // ИК-передатчик (катод на землю)
//RGB-светодиод в этом случае с общим анодом
int redLED = 4; // Красный светодиод
int bluLED = 5; // Зеленый светодиод
int greLED = 6; // Синий светодиод
int maskLED = 7; // маска для активных светодиодов, 7 - все включены 
int ledPin = 13; // Индикатор длительности
int advert = 390; // Задержка на рекламную паузу в секундах

/*
Для пульта от Sony
 Звук 0x290,12
 Красная кнопка 0x338,12
 Зеленая кнопка 0xB38,12
 Желтая кнопка 0x738,12
 Синяя кнопка 0xF38,12
 */

#include <IRremote.h>
IRsend irsend;
IRrecv irrecv(IR_Rx);
decode_results results;

void setup(){
 pinMode(redLED, OUTPUT); 
 pinMode(bluLED, OUTPUT);
 pinMode(greLED, OUTPUT);
 //RGB-светодиод с общим анодом, поэтому требуется инверсная логика
 digitalWrite(redLED,1);
 digitalWrite(bluLED,1);
 digitalWrite(greLED,1);
 pinMode(ledPin, OUTPUT);
 irrecv.enableIRIn(); // Запускаем приемник
 Serial.begin(115200);
 delay(100);
 //Serial.println("Listening...");
}

void loop(){
 // Ждем ажатия кнопки
 if (irrecv.decode(&results)) {
 //Serial.print(results.value, HEX);
 if(results.value == 0x338){
 //Serial.println(" Red...");
 mute(120,1); //2 минуты, красн.=1
 }
 if(results.value == 0xB38){
 //Serial.println(" Green...");
 mute(150, 2); //2.5 минуты, зелен.=2
 }
 if(results.value == 0x738){
 //Serial.println(" Yellow...");
 mute(180,3); //3 минуты, красн.+зелен.=желт.=3
 }
 if(results.value == 0xF38){
 //Serial.println(" Blue...");
 mute(210,4); //3.5 минуты, синяя=4
 }
 irrecv.resume(); // Принять следующее значение
 //Serial.println("Finished...");
 irrecv.enableIRIn(); // Перезагрузка приемника
 }
}

void mute(int advert, int mask){
 digitalWrite(ledPin,HIGH); // встроенный светодиод
 delay(1000);
 IRsend irsend;
 //Serial.print("Mutet<");
 sendIR(); // Отправка сигнала на отключение звука
 for (int j=0;j<advert;j++){
 delay(500);
 //Serial.print(".");
 if(mask & 1){
 digitalWrite(redLED,0); // Включаем красный светодиод
 }
 if(mask & 2){
 digitalWrite(greLED,0); // Включаем зеленый светодиод
 }
 if(mask & 4){
 digitalWrite(bluLED,0); // Включаем синий светодиод
 }
 delay(500);
 digitalWrite(redLED,1);
 digitalWrite(greLED,1);
 digitalWrite(bluLED,1);
 }
 digitalWrite(ledPin,0);
 sendIR(); // Отправка сигнала на включение звука
 //Serial.println("> Mute End");
}

void sendIR(){
 //отправка кода 3 раза быстро для протокола Sony
 for (int i = 0; i < 3; i++) {
 irsend.sendSony(0x290,12); // Код отключения звука Sony
 delay(30); // время критично, не может быть слишком долгим и слишком коротким
 }
}



Теги: Arduino, ИК-сигналы




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

Комментарии:

Оставить комментарий