Детектирование включенного телевизора с помощью фотодиода

в 12:38, , рубрики: automation, diy или сделай сам, iphone, lm358, Raspberry Pi, smart home, smart house, z-wave, Беспроводные технологии, умный дом, фотодатчик, фотодиод

У меня есть телевизор, купленный 8 лет, НЕ смарт тв, в нем нет USB и Ethernet. Иногда я его включаю для просмотра телепередач. И часто бывает, начал смотреть передачу, как вдруг понадобилось выйти из дома, оделся, стоишь в ботинках в коридоре, а телевизор не выключен! Приходится снимать ботинки (негоже в ботинках по комнате ходить), заходишь в комнату, находишь на диване пульт, выключаешь телевизор, идешь по своим делам. Такая ситуация бывает часто, поэтому я решил положить этому конец и всё-таки сделать кнопку выключения телевизора в коридоре.

Детектирование включенного телевизора с помощью фотодиода

Оглавление:

  • Описание используемой Z-Wave системы автоматизации
  • Устройство детектирования включенного телевизора на базе фотодиода BPW34
  • Внедрение фотодетектора в систему автоматизации Z-Way HA с помощью HTTP Device

Описание используемой Z-Wave системы автоматизации

Дом у меня частично автоматизирован Z-Wave устройствами, среди них несколько Z-Wave.Me Dimmer для плавного управления освещением, пара Fibaro Universal Sensor в качестве датчиков движения для включения света, выключатели на батарейках и еще несколько устройств. В коридоре около входной двери в стену вмонтирован iPhone, являющийся панелью управления Умным Домом. С этой панели можно посмотреть температуру в доме и на улице, влажность в комнате, пробки и выключить свет в комнатах.

Детектирование включенного телевизора с помощью фотодиода
Рис. 1 — Панель управления умным домом из iPhone 4

Для телевизора я собрал ИК-приёмопередатчик подключенный к Raspberry Pi. Благодаря этому устройству я могу управлять телевизором с помощью HTTP запросов: включать/выключать, переключать каналы, менять громкость и т.д. Но я никак не могу узнать включен или выключен телевизор.

Детектирование включенного телевизора с помощью фотодиода
Рис. 2 — ИК-приёмопередатчик для управления TV

Задача которую мне предстояло решить, это как узнать, что телевизор включен и как эту информацию передать на контроллер умного дома RaZberry, чтобы работать с ней уже в рамках моей домашней системы автоматизации. Коротко расскажу о моем контроллере домашней автоматизации.

Для коммуникации с Z-Wave устройствами я использую плату RaZberry установленную на Raspberry Pi.

Детектирование включенного телевизора с помощью фотодиода
Рис. 3 — Z-Wave плата RaZberry на Raspbberry Pi

В комлекте к плате идет софт для автоматизации — Z-Way. Z-Way имеет модульную структуру. Одна его часть — это проприетарная библиотека для работы с Z-Wave написанная на Си, вторая часть — это OpenSource движок автоматизации Z-Way Home Automation (Z-Way HA) написанный на JavaScript. Z-Way HA помимо Z-Wave устройств поддерживает еще и любые HTTP устройство, т.е. устройства с которыми можно общаться HTTP запросами. Для движка автоматизации Z-Wave устройства и HTTP устройства ничем не отличаются. Легко можно создать HTTP устройство, которое забирает погоду с OpenWeather, и создать правило автоматизации: Если на улице 30 °C, то включить Z-Wave реле, которое управляет электроприводом мансардного окна.

Детектирование включенного телевизора с помощью фотодиода
Рис. 4 — Правило автоматизации в системе Z-Way HA

С помощью HTTP устройства я могу добавить телевизор в мою систему автоматизации. Нужно только понять какой сигнал от TV передавать по HTTP.
Есть несколько вариантов, как детектировать, что телевизор включен:

  1. Современные умные телевизоры по Ethernet расскажут, что хочешь (У моего телека нет Ethernet)
  2. Многие телевизоры поддерживают CEC технологию по HDMI (Мой не поддерживает CEC)
  3. Некоторые телевизору в выключенном состоянии на USB выходе не имеют питания (У моего телека нет USB)
  4. Можно телевизор запитать через Fibaro Wall Plug — Z-Wave Розеточный Модуль с измерением энергопотребления. Самый удобный вариант для меня, так как я остаюсь в рамках системы Z-Wave. Легко устанавливать, легко детектировать состояние телека, есть энергопотребление — телек включен, нет энергопотребления — телек выключен (3000 р. за модуль)
  5. Детектировать состояние светодиода телевизора, который горит, когда телевизор выключен и не горит, когда телевизор включен (Мой выбор!)

Устройство детектирования включенного телевизора на базе фотодиода BPW34

Детектировать состояние телевизора я решил с помощью светодиода на нем. Около телевизора у меня стоит Raspberry Pi для просмотра кино, планировал, светодиод напрямую подключить к GPIO и тем самым узнавать состояние телевизора, но для этого нужно было снимать телевизор со стены, разбирать его. Я решил пойти другим путем.

Для детектирования, что светодиод горит я воспользовался фотодиодом BPW34, который работает, как фотодетектор. Для его подключения к Raspberry Pi, я сначала усилил сигнал с помощью Операционного Усилителя LM358 и затем сигнал с ОУ уже подал на GPIO. Схема получилась простая:

Детектирование включенного телевизора с помощью фотодиода
Рис. 5 — Схема фотодетектора с цифровым выходом

Собрал устройство:

Детектирование включенного телевизора с помощью фотодиода
Рис. 6 — Фотодетектор подключаемый к Raspberry Pi

На Raspberry Pi у меня уже установлен ИК-приёмопередатчик и Датчик влажности с экраном, на экранчик прикрепил фотодетектор:

Детектирование включенного телевизора с помощью фотодиода
Рис. 7 — Установленный Фотодетектор на Raspberry Pi

ОУ отбирает примерно 1.5 В от питания 3.3 В. Когда светодиод горит, на выходе получается 2 В, когда не горит — 0 В. Raspberry Pi за логическую единицу принимает все, что больше 1 В, так что все работает как и планировалось. Подключил устройство к Raspberry Pi, а фотодиод прикрепил к телевизору с помощью двухсторонней черной ленты.

Детектирование включенного телевизора с помощью фотодиода
Рис. 8 — Фотодиод подключенный к телевизору

Внедрение фотодетектора в систему автоматизации с помощью HTTP Device

С помощью фотодетектора я могу узнать состояние телевизора, а с помощью ИК-приёмопередатчика могу им управлять. Для передачи статуса и управления телевизором я поднял Apache на Raspberry Pi и написал 2 маленьких cgi скрипта, один скрипт принимает команды по HTTP и перенаправляет их на ИК, другой скрипт возвращает состояние TV off или on:

xbian@xbian ~ $ cat /var/www/cgi-bin/tvstatus.cgi 
#!/bin/bash
echo "Content-type: text/json"
echo ""
STATUS=`cat /sys/class/gpio/gpio27/value`
if [ "$STATUS" -eq "1" ]; then
    echo "off"
else
    echo "on"
fi

В системе автоматизации Z-Way Home Automation я создал HTTP Device, который включает/выключает телевизор и реально показывает его состояние, т.е. если выключить телевизор с пульта или кнопкой на нем, то в Z-Way HA я увижу реальное состояние телевизора.

Детектирование включенного телевизора с помощью фотодиода
Рис. 9 — Создание HTTP Device в системе Z-Way HA

Детектирование включенного телевизора с помощью фотодиода
Рис. 10 — Виджет телевизора на Dashboard

К чему вообще нужно знать состояние телевизора? К тому что, для включения и выключения телевизора используется одна и та же ИК команда, а мне нужно с панели в коридоре отправлять только команду выключения, ведь если отправить телевизору команду, когда он выключен, то он включится.

Теперь, уходя из дома, я в коридоре нажимаю одну кнопку — «Выключить все», и команды расходятся по разным устройствам.

Автор: aivs

Источник