Да, это уже модно, устанавливать в коттеджах систему "Умный дом". Сказать по правде я не знаю, что люди подразумевают под этими словами "Умный дом". Но зато, я могу объяснить, что бы я хотел иметь в собственном доме.
Мне бы хотелось, что бы центром управления всего в доме был сотовый телефон. Ну давайте помечтаем.
Вот я сажусь вечерком перед телевизором и выкладываю перед собой "арсенал" необходимых вещей: пульт от телевизора, пульт от DVD, пульт от спутникового приемника. Потом еще мне может понадобится радио телефон, и сотовый телефон. Не много ли всего? Почему бы не управлять всем этим хозяйством с одного устройства. Самый реальный кандидат - это сотовый телефон. Конечно существуют и универсальные ИК пульты, но на самом деле они проблему не решают.
В моем понимании управлять нужно не только телевизором, но и, скажем, воротами гаража и не выходя из машины. Так же, хорошо было бы на телефон принимать сигнал от домофона или даже видео домофона (и с телефона открывать дверь гостям). Можно ли отказаться от домашнего радиотелефона? Может возможно создать некий аудио шлюз между проводным телефоном и сотовым через Wi-FI или Bluetooth? В общем много чего можно придумать удобного и полезного и современный телефон подходит для этих целей очень хорошо. Пока не буду делать такую сложную систему. Пока я попробую сделать довольно простой проект - буду управлять с телефона TV центром.
В общем идея следующая:
- к плате Марсоход подключаю модуль Bluetooth и ИК светодиод (ИК передатчик)
- проект для ПЛИС в плате Марсоход будет принимать команды по последовательному интерфейсу от модуля Bluetooth и затем эти команды будут передаваться ИК передатчиком к телевизору или DVD или еще чему-то там
- для сотового телефона пишем программу, которая по нажатию разных клавиш посылает соответствующие команды через Bluetooth нашему устройству.
Таким образом, плата Марсоход выступает мостиком между сотовым телефоном и ИК интерфейсом разных устройств.
С чего нужно начинать? Некоторое время назад я сделал проект (конечно, то же на плате Марсоход), который позволял узнать коды нажатий клавиш от разных пультов. Его можете посмотреть здесь. С помощью этого проекта я посмотрел коды клавиш от разных пультов, которые у меня есть. Мне не нужны все кнопки всех пультов. Только самые необходимые:
Samsung TV
Power E0E040BF
Source E0E0807F
Volume Up E0E0E01F
Volume Down E0E0D02F
Channel Next E0E048B7
Channel Prev E0E008F7
Mute E0E0F00F
Up E0E006F9
Down E0E08679
Left E0E0A659
Right E0E046B9
OK E0E016E9
menu E0E058a7
return E0E01AE5
exit E0E0B44B
media player E0E031CE
Space Receiver
Power 200850AF
Up 20088877
Down 200828D7
Left 200848b7
Right 2008C837
OK 2008A857
Menu 200830CF
Back 2008B04F
Exit 2008827D
Info 2008F807
Mute 200808F7
LG DVD Player
Power B4B40CF3
Up B4B4E21D
Down B4B412ED
Left B4B49A65
Right B4B45AA5
OK B4B41AE5
LG TV Volume Up 20DF40BF
LG TV Volume Down 20DFC03F
Pause/Step B4B41CE3
Play B4B48C73
Stop B4B49C63
Open/Close B4B46C93
DVD Menu B4B4D22D
Return B4B4A25D
Теперь, когда я знаю коды основных кнопок пультов, я могу писать программу для сотового телефона. К сожалению, мой телефон еще старенький - это нокия. Да и программировать телефон я "не очень умею". Я использую Sun Java Wireless Toolkit (я про него уже писал вот здесь).
Моя програма будет на языке Java. Возможно сейчас это уже не очень актуально, сейчас ведь мода на телефоны с ОС Android.. Возможно кто нибудь и воплотит эту идею на андроиде, как знать.. (Я бы давно купил себе такой телефон с андроидом, но боюсь моей квалификации не хватит звонить с него )
Интерфейс моей программы будет тоже самый примитивный. При запуске, она производит поиск Bluetooth устройств в округе, и, если найдет Bluetooth модуль, подключенный к плате Марсоход, предложит подключиться к нему. При нажатии на клавиши телефона на экране просто появится надпись о том, какая клавиша нажата. Ну и код клавиши, четыре байта, конечно, будут посланы нашему девайсу. Ну а он уже передаст их через ИК телевизору и другим устройствам.
Собираем наше устройство: плата, bluetooth модуль и ИК передатчик:
Bluewtooth модуль у меня уже есть, мы делали его для управления машинкой с компьютера. Здесь в этом проекте нам нужен только сигнал TX от последовательного порта Bluetooth модуля. Он у нас подключен к входному контакту dn платы (pin_12 чипа).
ИК светодиод подключен к контактам f5[9..0]. Обычно мы их используем для управления моторчиками, но здесь подключили один светодиод.
Я использую одну из ранних версий платы Марсоход. На ней раньше не было кварцевого генератора 100Мгц. Так что пришлось его позже добавлять. На последних платах это уже штатная деталь. Кварцевый генератор подключается к входу pt_right платы (pin_75 чипа). В принципе можно попробовать использовать внутренний генератор чипа - его значение около 5Мгц, так что может работать.
Проект для платы Марсоход выполнен в среде Альтера Quartus II. Его вы можете взять здесь:
В этом же архиве есть и исходные тексты и бинарники (JAR и JAD файлы) для сотового телефона. Телефон может быть разным, но должен поддерживать спецификацию MIDP2.0 и CLDC1.0.
Что бы вам было легче разобраться, как работает проект платы Марсоход я написал на verilog програмку-тестбенч. Она есть в архиве. Симулировать проект легко с помощью Icarus Verilog, вот так:
>iverilog -o qqq ir_sendert.v serial.v ir_send_cmd.v
>vvp qqq
>gtkwave out.vcd
После этих команд компиляции и симуляции появится окно программы GtkWave и покажет временные диаграммы (кликните на изображение, что бы увеличить его):
В программе GtkWave можно будет в подробностях рассмотреть все внутренние сигналы проекта.
Ну вот когда все готово, можно пробовать.
Вот мой TV центр: телевизор, приемник спутниковых сигналов и DVD плеер.
Плату Марсоход устанавливаю на табуреточке и побольше коробок от дисков, чтоб повыше было, на уровне с DVD плеером:
На телефоне запускаю программу BtCtrl, подключаюсь к плате Марсоход, через Bluetooth и могу управлять!
В сотовом телефоне используется:
- кнопка "звездочка" включает и выключает телевизор
- кнопка "решетка" выбирает на телевизоре источник сигнала (спутник или DVD)
- вверх - добавить звука
- вниз - уменьшить звук
- влево - предыдуший канал на приемнике спутникового сигнала
- вправо - следующий канал
- кнопка 1 - включить DVD
- кнопка 2 - достать диск
- кнопка 3 - DVD меню
- кнопка 4 - пауза\шаг
- кнопка 5 - играть
- кнопка 6 - стоп
PS: Правда, вышла небольшая промашка - что-то не работает переключение каналов. Похоже что-то напутал с кодами приемника спутниковых сигналов. Видимо придется разбираться, что здесь не так...
Подробнее...