2011年4月2日土曜日

リモコン送信


1ヶ月ぶりに再開。赤外線リモコンの送信に挑む。

すっかり忘れているので復習に1日かかると思ったのだが、コンパイラを呼び出したら、
30分ほどで準備ができた。開発環境がシンプルなので操作を思い出すのも簡単だ。

さて、まず赤外線LED。手持ちがなかったので通販で発注したが待ちきれなくて
不要のリモコンから外した。

リモコン用のものは結構電流を流す。また到達距離を稼ぐために複数つなぐこともありそうなので、
トランジスタを入れておくことにする。
(回路は 「LED トランジスタ スイッチ」などで検索すると出てくる。)


話はそれて懐古ばなし。・・・・・・
トランジスタは 2sc372 である。古い電子工作少年には忘れられない型番だ。
10年ほど前に知人から古い部品をダンボール箱ひとつもらった。その中には、カラーコードじゃない抵抗など昭和のパーツが詰まっていて、今でもちょっとした試作には便利に使っている。

型番表示を見て左から「えみこれべ」。学生の時アナログ屋の友人に足と電極の対応を聞くと、
「372は えみこれべ」と呪文のように返事が返ってきたものだ。

30年も前の記憶なので念の為にネットで検索すると出てきた。
たしかに ECB なのでうれしくなる。
・・・・・・

ブレッドボードで組んでベースをいじるとLEDが点灯するのを確認。
確認は目では見えないのでデジカメで見るのだが、
実はデジカメもビデオも大半のものは赤外光を減衰させるフィルターが入っているので、
あまりはっきりと見えない。(古いビデオカメラなどではよく見えるが)

めんどくさいな~ とイライラしていたのだが、プログラムが出来て実際に
動かすまでは普通のLEDでチェックすればいいことに途中で気がついた。
(写真に写っている緑のLED)

ユニバーサルボードにハンダ付けで組みなおして、GEMMYのC6コネクタに接続。
開発環境で自動的に生成される点滅プログラムのポートをp21(GEMMYのC6に対応)して、
点滅を確認。OK!!

ここで
ああ!!、トランジスタ入れたら反転しちゃうよ。
と思ったのだが・・・
38kHz で変調しているので関係ないと気づく。

-----------------
プログラムだが、まずテストに使う機器のリモコンを持ってくる。
前の受信プログラムを、mbedにいれてリモコンのボタンを押し、
受信された フォーマット、ビット数、データ を メモっておく。
その内容を、送信プログラムのソースコードに写す。

我が家のTVは怪しいメーカーなので、受信がうまくいかず。
食卓用の古~いアナログ液晶TVもダメ。

HDDビデオ やCDプレーヤーがわりに使っているDVDデッキは、うまく動いた。

赤外LEDを機器に向けて、下記のプログラムでリセットのあと 白ボタンを押すと、
電源が入った。


----------------
プログラムを書けば、リモコンのシーケンサーができる。
例えば、帰宅したら、エアコンをON。ビデオの電源ON. TVの入力をビデオに切り替え、録画済みリストを表示させる。なんてのがボタン一つ。

ネット経由で外からも。

つぎは LAN だな・・・・・・

===================
#include 

#include "TransmitterIR.h"
#include "TextLCD.h"

TextLCD lcd(p11, p12, p27, p28, p29, p30); // rs, e, d4-d7
DigitalIn swWhite(p13);
TransmitterIR ir_tx(p21);

/**
* Entry point.
*/
int main(void) {


lcd.cls();
lcd.printf("IR TX TEST.");

swWhite.mode(PullUp);

RemoteIR::Format format = RemoteIR::NEC;
uint8_t buf[] = {0x00,0xFF,0x46,0xB9};
int bitcount = 32;


/*
* Execute.
*/
while (1) {
while(1){
if(swWhite==0) break;
}
wait(0.5);

if (ir_tx.getState() == TransmitterIR::Idle) {
bitcount = ir_tx.setData(format, buf, bitcount);
}

lcd.cls();
lcd.printf("#### ---- ----");

}
}