У нас уже был проект "ИК-приемник", в котором мы рассматривали как принимать ИК сигналы от пультиков. Следующий шаг - попытаться такие сигналы передавать.
Это может понадобиться для многих целей - например можно сделать свой пультик, организовать связь между марсоходами и т.д.
Я взял для примера конкретную задачу - управление несколькими устройствами
домашнего медиацентра при помощи одного пультика.
Для реализации этой задачи было решено встроить платку Марсоход внутрь DVD-плеера. Это позволило решить три проблемы:
- во-первых, в плеере уже есть ИК приемник;
- во-вторых, есть источник питания;
- в-третьих, достаточно свободного места для размещения платки.
Итак, разбираем DVD, находим ИК приемник:
С обратной стороны платы припаиваем пины для подключения проводов.
Выводим ИК светодиод наружу и закрепляем платку.
Оптореле для управления лампой я закрепил на задней стенке снаружи. Описание на него:
Теперь о проекте. Его можно взять здесь:
Я заранее выяснил все необходимые коды от пультиков и свел их в
один компонент cnst.v написанный на verilog.
module cnst(
output wire [31:0]q1,
output wire [31:0]q2,
output wire [31:0]q3,
output wire [31:0]q4,
output wire [31:0]q5,
output wire [31:0]q6,
output wire [31:0]q7,
output wire [31:0]q8,
output wire [31:0]q9,
output wire [31:0]q10,
output wire [31:0]q11,
output wire [31:0]q12,
output wire [31:0]q13,
output wire [31:0]q14,
output wire [31:0]q15,
output wire [31:0]q16
);
//bbk
assign q1[ 31: 0] = 32'h926da05f; // play
assign q2[ 31: 0] = 32'h926d807f; // pause/stop
assign q3[ 31: 0] = 32'h926de21d; // eject
assign q4[ 31: 0] = 32'h926d08f7; // vol -
assign q5[ 31: 0] = 32'h926d708f; // vol +
assign q6[ 31: 0] = 32'h926da857; // stop
assign q7[ 31: 0] = 32'h0;
assign q8[ 31: 0] = 32'h926de01f; // standby
//dre
assign q9[ 31: 0] = 32'h00088877; // up
assign q10[ 31: 0] = 32'h0008c837; // ok
assign q11[ 31: 0] = 32'h0008a857; // down
assign q12[ 31: 0] = 32'h000848b7; // left
assign q13[ 31: 0] = 32'h000828d7; // right
assign q14[ 31: 0] = 32'h000812ed; // *
assign q15[ 31: 0] = 32'h0008ba45; // #
assign q16[ 31: 0] = 32'h0008e817; // help
endmodule
В качестве основного, я выбрал пульт от спутникового ресивера.
Наша платка должна распознавать восемь кнопок от этого пульта, семь из них транслировать в коды для DVD а по восьмой - включать или выключать свет.
Для DVD я взял самые основные кнопки : standby,play,pause,vol-,vol+,stop,eject.
В результате получилось "три в одном", управление ресивером, плеером и освещением.
Видео снимал на телефон - качество не очень, поэтому прокомментирую:
Сверху желтенькие цифры - это номер канала ресивера , справа ниже -
это дисплей DVD на котором, если он выключен, надпись "STANDBY".
На заднем плане, подключенная через оптореле, лампа бра.
Подробнее...