So-net無料ブログ作成
検索選択
2017年04月10日| 2017年04月17日 |- ブログトップ

PICでTVリモコンを模擬した話 [電子工作]

2017年4月17日の日記

TVリモコン.jpg ダイソーのコレクションケースに入れました。

   TVの近くに置いておいてこれをタイマーにしてon/offします。 

このところ,PICで遊んでいます。道具をそろえるのが非常に面倒だし,また,ソフトを組むのもデバッグするのも本当に大変なんですが,自分でマイコンを使った機器を作れるようになるとなかなか便利です。

先日,子供用にタイマーつきのあんどんを作りました。今日はTVのリモコンを模擬したものを作ります。

そもそも,ちゃんとTVにはリモコンがついているのに,なんでわざわざPICでリモコンを作らなきゃなんないのか? って実はiruchanもそう思います。

ところが,こうしないといけなくなっちゃったんです。

実は,半年ほど前,某関西に本社があるP社(もちろん,"開拓者" のP社じゃありません)の大型液晶TVを職場で買いました。

といって,職場でTVを見るわけじゃなく,単にパソコンのモニター用として購入し,特定の画面を表示させておくためのものでした。

ところが.....。

ここに落とし穴がありました。パソコン専用のモニターとして使うなら,ちゃんとモニターを買うべきだったんです。

今は液晶TVはかならずHDMI端子がついていますから,そこにパソコンをつなげば大型モニタになるし,DVDやブルーレイも再生できる,プレゼンもできるので便利です。アナログのビデオ信号と違って1本のケーブルで音も出せるのは便利です。普段はTVとして使っていて,たまにパソコンからDVDを再生する,と言うこともできますね。

ただ,今回のように,パソコン接続専用,ということならちゃんとしたモニターを買うべきです。

なにがまずかったか,というと.....。

実はそのP社製の液晶TVは信号がoffの時は一応,省エネで電源をoffにできるのですが,次回,信号がonになっても起動しないんです!!!!

そんなの,パソコンの液晶モニターだったらそれこそWindows95の頃から,無信号時にはoffになり,パソコンをつけると自動的にモニターもonになる機能がついていて,わざわざ液晶モニター自身のスイッチをいじる必要はなかったのに,と思います。

ところが,あろうことか,そのP社の液晶TVはそんな簡単なことすらできないんです。

だから,夕方になって,退社するときにパソコンの電源を切るとか,スリープにすると,自動的に液晶TVもoffになるかスリープモードになって消費電力を減らし,朝,みんなが出勤する頃にパソコンが起動するかスリープから復帰すると自動的に液晶TVがonになって画面を表示させたいのですが,これができません。

まあ,一応は無信号時になるとoffにする機能はありますので,それを使えば,朝,誰かが液晶TVの電源を入れればいいだけの話なんですけど.....。

また,オンタイマーの機能はありますので,それを使おうと思いましたが,今度は肝心の時間情報がないのでこれすらできません。

と言う次第で,結局,どうしても地デジ放送をつながない限り,オンタイマーすら使えません。

どうせHDMIが着いているんだからパソコンから時間情報を取り込めばいいじゃん,と思うんですけどね....。あるいは初期設定画面で時刻を設定できればいいんですけど......。

とはいえ,そもそも無信号状態になったら自動的にoffにする機能くらい,簡単じゃないのか,と思います。 

一応,そのP社になんとか時刻設定ができないのか,webから問い合わせしました。

ところが....。

すぐに返事が返ってくるかと思ったら返事が来たのはなんと1週間も経ってからでした.....orz。おそらく,自社の製品に都合が悪いことだから,と放っておかれたのか,それとも上司の許可を待っていたのか,それにしてもお客様からの問い合わせに1週間もかかる,というのはいただけません。

もうおっ~~~~!!!!!!

とうとう頭にきたiruchanは本件,ネットにさらしておくことにしました。もとからこのP社のTVやレコーダは番組表に広告が出て見にくいったらありゃしないってんで頭にきてるんですけど,この対応もいただけません。もうP社の製品は買いません!!

という次第ですが,別件で同じ頃,親に掃除機を買ってあげようと,某H社に掃除機について同じくwebから問い合わせをしたことがありますが,返事は翌日かな,と思っていたらなんと,10分もかからずに届きました。実は,そのとき,P社のとどっちにしようか迷っていたんですけど,もちろん,買ったのはH社です。

さて,とうとう,ここまで来るとPICでリモコンを模擬してTVの近くに置いておき,一定の時間になると電源on/offの信号を出させるしかない,と思いました。ただ,さすがにPICは時間情報はもっていないので,○○○○にon/offする,というプログラムを作るには時計モジュールからI2Cバス経由で時間情報を取り込む必要がありますが,まあ,そこまでしなくても,という気がするので,単純に12時間ごとにon/offする,と言うプログラムにします。

一応,iruchanはPICが使えるようになったし,TVなどのリモコンは赤外線LEDを決められたコードに基づいて点滅させているだけなので,なんとかPICでできるはず,と思いました。すでに,ネットを見るといろんな方が試しておられますね。

今回はリモコンと言っても,電源スイッチの入切だけなので,電源ボタンを押したときの信号でLEDを点滅させればよいわけです。

一応,今回,いろいろと調べてみました。

TVなど,赤外線LEDを使ったリモコンは国内の電機メーカだと下記の3通りがあるようです。

☆家電協方式‥‥(財)家電製品協会に属する会社が使っているもの。P社,最近台湾系になったS社など。

☆NEC方式‥‥‥N社,H社,もうじきTV部門も売却のT社など

☆ソニー方式‥‥品川に本社があるS社

いずれもコード体系が異なるだけですからPICで作成可能だと思います。ここではP社が採用している家電協方式について説明します。

家電協リモコンのコードは次のようになっています。 

リモコン信号.jpg リモコンフォーマット

ややこしいのは,LEDが点滅してコードをTVに伝えますが,単純に1のときだけ点灯し,0のときは点灯しない,と言うようなパターンではありませんし,かつ,点灯しているときは連続点灯しているわけではなく,38kHzで点滅しています。

ビットが0の時にはずっと点灯しない,というパターンじゃないのは理由があり,CDの信号でもそうですけど,こうしちゃうとどこがビットの切れ目かわからなくなっちゃうからです。だから,0の時も1の時も必ずhighになる部分があり,そのあとのlowの時間の長さで0か1かを区別します。

CDの信号も同じで,ずっと0が続くとピックアップの信号がずっと0となるため,サーボ回路が働かなくなってしまうためです。 

家電協方式のリモコンの場合はかならず,0.4msのhighとなる部分があり,その後,lowの部分が0.4msだと0,1.2msだと1を表すようになっています。 

また,信号の始まりを表すリード部分があり,その後,4バイトのカスタムコードおよび2バイトのデータコードがあり,最後にストップビットがあります。NEC方式だと信号の訂正のため,反転ビットを続けたりしていますが,家電協方式はありません。

カスタムコードは早い話,メーカの識別番号で,各メーカにより異なります。

データコードは電源やch.ボタン,ボリウムボタンなど,各種のボタンごとのコードです。

実際に,リモコンの出力波形をオシロで調べてみました。 

リモコン信号.jpg こんな信号です。

   信号全体を示しています。先頭の太い部分はリーダーコードです。 

リモコン信号1.jpg 拡大するとこんなです。

   やはり38kHzでスイッチングしていることがわかります。 

と,ここまで来たらあとはそのカスタムコードと,電源ボタンのデータコードがわかればいい,と言うことになります。

といって,こういうことを一般消費者がメーカに尋ねると今の時代,何の目的に使うのかと根掘り葉掘り聞かれたりして,結構,面倒なことになりそうです。 でも,技術者は必要な情報ですし,メーカごとにマニュアルがあり,サービス会社や販売店などには開示されているはずです。

幸いにも,秋月電子のPICマイコン赤外線リモコン学習キットの取説にP社のコードがでていました。

ということで,P社のTVリモコンの電源ボタンのコードは次の通りです。

40, 04, 01, 00, BC, BD  (16進)

最初の4つがカスタムコードで,あとの2つが電源ボタン操作時のコードです。メーカが異なる場合,同じ家電協のリモコンならカスタムコードが違うだけです。 

これが2進法だと

0100 0000 0000 0100 0000 0001 0000 0000 1011 1100 1011 1101

となるわけで,これの0と1を上記のパターンで38kHzで変調してLEDを点滅させればOKです。 

PICのプログラムは例によってGreat Cow Basicで作りました。

使用したPICはいつもの12F1822です。なんでか,というと12F1822はハードウェアPWMの機能がついていて,便利なんです。今回,38kHzでLEDを点滅させることが必要ですが,ハードウェアPWMの機能がついているとそのPWMの制御コマンドが1行で済んじゃうので簡単です。Great Cow Basicだと,単にHPWMというコマンドを使うだけです。

HPWM ch. freq duty

です。ch. は12F1822のPWM出力チャンネル(1822は1チャンネルのみなので1しかありません),freq は周波数(今回は38kHzなので38),duty はデューティです。Great Cow Basicは8ビットで表すので,最大は255です。

ソースファイルは次のようなものです。

TV power off(UTF8).txt

回路は簡単なもので,前回のあんどんみたいに単にタクトスイッチとLEDをつけただけ,という感じです。配線も万能基板です。タクトスイッチを軽く1回押すと信号がでます。3秒以上,長押しするとタイマーが起動し,12時間ごとに信号を出すようにしました。

TVリモコン回路.jpg回路です。 

LEDは赤色のものと赤外線の2つ使っています。

なんでか,というと単に赤外LEDだけにしちゃうと肉眼では見えないので,テストがやりにくいんです。そこで,普通の赤色LEDを使ってモニターします。

もっとも,赤外LEDは目に見えないと言っても,CCDには見えちゃうので,デジカメで見れば薄紫色に見えますので,点灯しているかどうか確認できます。

というのは前から知っていて,それを利用していましたが,スマホの一部では赤外線に反応しないものもあるようで,スマホのカメラだとこのように見えないものがあるのでご注意ください。

なお,さすがにメーカさんも単純な赤外LEDだと見えないので何かと不便,ということで可視領域にも若干,感度を残しておいて,赤く薄く光る赤外LEDというのもあります。こういうのを使うと便利だと思います。

TVリモコン模擬基板.jpg 基板です

  デジカメでは赤外LEDはうすく青 or 紫色に写りますが,肉眼では見えません。

ただ,最初,赤外LEDも,テスト用の赤色LED同様,PICの出力ポートに単純に100Ωの抵抗を介して取り付けたところ,やはり光量が不足なのか,TVの反応はいまいちでした。かなり近づかないとTVが反応しませんし,少しでもLEDを首を振ると反応しません。

実際,LEDに流れる電流を測定してみたら2.5mAでした。最近のLEDは高輝度なので,これくらいの電流でもものすごく明るいんですが,iruchanが使った赤外LEDは中古品だし,古いものなのでどうも光量が足りなかったようです。

それで,その電流制限抵抗を100Ωから33Ωにしたらおかしな現象が.....。

今度は赤色LEDも点灯しなくなってしまいました......orz。

てっきり,抵抗を替えたときにはんだづけをミスったか,といろいろ回路を調べてみますがダメ。

改めて12F1822の規格表を見てみると,出力電流は25mAまで,と言う記載があります。

でも,そこから先は何も書いてないんですが,それ以上の電流を取ろうとするとどうもPICが動作しないようです。ちゃんと保護機能が働くんですね。

しかたないので,1個,Trを使って電流を増幅することとしました。2SC1815のベースをon,offしてそのコレクタ電流で赤外LEDを点灯させることにしました。

これで75mAも流しました。さすがにかなりの大電流ですが,φ5mmのLEDは100mAくらいまでは流せるので大丈夫です。φ3mmのものだと25mAくらいまでですので,ご注意ください。やはり,LEDの電流制限抵抗を10Ωにしたのは小さすぎるようです。100Ωくらいがよいかと思っています。

こうやって結構,うまくいくようになりました。 3mくらい離れていてもP社のTVは無事にon/offできました。これで,12時間ごとに液晶TVをon/offできて省エネになりますね!!


2017年04月10日| 2017年04月17日 |- ブログトップ