シャープの家電をPCから操作するならこちらをどうぞ。
アクオスにはPC接続用にシリアルインターフェース(いわゆるRS-232C(RS232C))が用意されています。本ページはこのインターフェースをPCとの接続に使わず、お手軽なマイコン工作とつないでアクオスをもっと便利に使おうという内容です。
我が家では写真のようにアクオスにリビングPCを接続していますが、実際に頻繁に使っているとTV表示からPC入力への入力切換(切替)の際にボタンを何度も押さなくてはならず、時間もかかることに非常に煩わしさを感じました。そこで本機の製作です。本機を使えばボタン一発で切換(切替)できます。他にもシリアルを使えば(PCから接続しても、本機のように電子工作から接続しても)赤外線リモコンでは不可能なことが可能になります。たとえば、あらゆるチャンネルを一発選択できるとか....
(2008-1-3追記) 私が純正リモコンを使うのは月に一度くらいです。いつもは本機ばかりを使用しています。しかもチャンネルの変更は殆ど足でおこなっています。もし作り直すなら全てのボタンを一直線に横に並べて全てのボタンをもっと足で操作し易くすると思います。さらに(2009-6-16追記)人感センサ(焦電型赤外線センサ)も付けると思います。シリアルの命令には赤外線の命令とは違って[電源OFF]があるので「テレビの前に人がいなくなると5分で電源を自動的に切る」なんかを簡単に実現する為の条件が揃っています。
本ページではアクオスのシリアル接続コントローラの新版を紹介します。旧版はこちら
全命令発行がシリアルポート経由だった旧版と異なり、命令によってシリアルと赤外線を使い分けるハイブリッド式のコントローラとなりました。シリアルインターフェース経由でのみ可能な機能と赤外線インターフェース経由でのみ可能な機能を合わせ持った仕様となっています。また、外付けEEPROM等を用いずに赤外線リモコンを実現しているのも特徴の一つです(これには発展形があって別ページを設けました)。
仕様確定までの経緯(隠しコマンドは使い物にならなかった)
旧版設計時点では公式情報に基づき、シリアル経由で電源ONは出来ないと思っており、どうせ高頻度に使用できるものは作れないと思って、5機能だけの簡単な仕様としました。
その後、シリアルで電源ONが出来る隠しコマンドがあるとここで知り、自分でもテストをおこなって使えることを確認し(後に本機の用途には実用できないことが判明しましたが)、一旦、こんな仕様
で全命令シリアルポート経由の新版を製作しました。しかし製作後に運用テストをおこなってみたところ、肝心のシリアル隠しコマンドの電源ONが実用できないことがわかりました。せっかく作り直したのに電源ONが使えないままというわけにはいかず、シリアルと赤外線の双方を使い分けるハイブリッド式のコントローラに改造しました。
(開発中に知った)アクオスの(電源)動作モードの(隠し?)仕様
シリアル隠しコマンドの電源ONが実用できなかった理由を説明します。
以下の記述は事実と、本機の動作試験中にアクオスが示した振舞いから私が推定した内容とを合わせたものです。
アクオスには3つの動作モードがあるようです。その3モードをそれぞれ下の表のように便宜的に名づけることにします。あくまで私が説明の為に勝手につけた名前です。
アクオスの動作モード |
モード | 説明 | |
1. | 通常モード | 普通に電源をONにしているときのモード |
2. | ノーマルSleepモード | 電源をOFFにした後、しばらく(わが家のLC-32GD4では20分くらい)続くモード |
3. | ディープSleepモード | ノーマルSleepモードが終わった後にさらに電源OFFにしたままだと陥るモード |
シリアルポートからの命令を受け付けるのは通常モードとノーマルSleepモードの場合のみです。ディープSleepモード時は反応してくれません。電源オフにしてから20分以内しか使えない電源ONコマンドなんて使いものになりません。シャープがシリアルの電源ONを隠しコマンドとしたのにはちゃんと理由があったわけです。
前項で触れたテストでは、アクオスのシリアルポートにPCを接続してターミナルソフトから手動でコマンドを打って「消えた。あっ、点いた。消えた。また点いた」ってやった程度だったので、Sleepモードが2種類あることに気づかなかったのです。
旧版ではアクオス本体から供給される外部機器用のDC電源を利用していましたが、この電源供給は通常モードとノーマルSleepモードの場合のみおこなわれます。全・電源モードで使用したい新版では当然、別途、電源を用意しました。
ディープSleepモードの場合でも、もちろん、赤外線ポートからの命令(電源ONだけが意味を持つが)は受け付けてくれます。しかし赤外線受信についても、このモードの場合は通常モードとノーマルSleepモードの場合とはやや仕様が異なります。
動作モードによる赤外線受信・仕様の違い
ディープSleepモードの場合、赤外線命令を普通にピッと一発発行しても、受け付けてくれません(反応しません)。ある時間内に2個の命令を発行すれば1個の命令として受け付けてくれます。2個の命令の間隙が空きすぎた場合も反応しません。
通常モードとノーマルSleepモードの場合は、ピッと命令を一発発行すれば受け付けられます。また、ある時間内であれば2個の命令を発行しても、1個の命令として認識されます。2個の命令の間隔が空きすぎると2個の命令として認識されます。私の環境では2個の命令の間隙を145ミリ秒以下にすると1個の命令として認識されました。
最小で2ミリ秒の間隙から動作確認しましたが、2ミリ秒の間隙でも全モードで1個の命令として正常に認識されました。
上において”2個の命令”と何度も書きましたが、これらは全て”同じ命令を2回”発行して検証しました。後に記述しますが純正リモコンがそのような仕様となっているようです。
本機および純正リモコンの赤外線波形
純正リモコンの波形
純正リモコンの発する赤外線の波形をlirc付属のxmode2コマンドで見てみると、こんな感じです。
これは電源ボタンを1回押した際の波形です。他のボタンを押した際も共通なのですが、ボタンを1回押すと必ず、一定の間隙を挟んで2回、命令を発行します。画面上を定規で測って間隙を計算すると、90ミリ秒程と算出できました(でも多分大きな誤差を含んでいると思います)。
本機の波形
本機の現在ダウンロード公開しているファームウェアでは1回ボタンを押すと、75ミリ秒の間隙を開けて同じ命令を2回発行する仕様としています。xmode2の画面上で純正リモコンの波形と見た目がよく似るように時間を設定しました。因みにこちらのページで公開しているファームウェア内の赤外線送信ルーチンにはマクロ実行に都合が良いように2個の命令を発信した後に400ミリ秒のwaitを追加しています(最低でもこれくらいは必要です)。
本機の発する赤外線の波形をxmode2コマンドで見てみると、こんな感じです。
これも電源ボタンを1回押した際の波形です。本機の発する赤外線波形は純正リモコンと全く同じように機能します。
外付け赤外線・発光部の設置
ここに掲載の内容はとりあえず私の環境(LC-32GD4)における情報です。
本機をテレビの赤外線受光部の前に設置できるのであれば、本機内に赤外線発光部を設ければ済むのですが、生憎そこには設置したくなかったので、外付けの赤外線発光部をテレビの赤外線受光部の前に貼り付けることにしました。
- 発光部は右側の受光部に対して赤外線を発します。
- 発光部を左側受光部の左側もしくは右側受光部の右側に設置してももちろん構わない筈ですが、純正リモコンの信号を邪魔しないように左右の中間に設置しています。
- 現在の単純な回路では受光部と発光部を少し離す必要があります。発光部(赤外線LED)を左右の受光部のちょうど中間に設置すると受信障害が発生してしまいます。そこで発光部を左側受光部に少し被るくらい左側に寄せて右側受光部から離して設置しています。
赤外線発光部の設置場所が非常に受光部に近い為に受信障害が発生しました。
これほどまでに発光部と受光部を近づけると、アクオスの電源モードによって細かな受光特性の違いが出ました。
当初、「右側の受光部は、Sleepモード(ノーマルSleep, ディープSleep)の時の方が、通常モードの時よりも感度が良い」と感じたのですが、どうも実際には通常モードの時は赤外線の強度が飽和して受信障害が起こりがちなようです。
この回路を使えば受信障害が回避できました。
この回路はPICの吐き出し電流を単体トランジスタで増幅して赤外線LEDを駆動する一般的な回路に抵抗を1個追加して改造したものです。信号がLowの状態でも一定強度の赤外線が出つづけていることが受信障害を防ぐようです。この回路のままでずっと運用しても良かったのですが、出来れば最も単純な回路で運用したいと思い、下の回路図の項に掲載の現在の回路に修正しました。
現在の回路で様々な抵抗値を試してみましたが、この回路では抵抗値が何であれ、受光部と発光部を少し離さないと全電源モードで使用することはできませんでした。少し離したとはいえまだ非常に近いのだからと抵抗値を1KΩとか4.7KΩとか大きな値に変えてみましたが、あまり良い結果は得られず現在は470Ωで落ち着いています。
現在の設置状況では不要な説明
赤外線発光部でテレビ本体の赤外線受光部を塞いでしまっては、純正リモコンで操作できなくなってしまうと思われるかもしれませんが、幸いアクオスには左右2つの赤外線受光部があります。ただし2つの赤外線受光部は隣接しているので、1つの前に突起物を設置すると、もう一つの受光部での受光に支障をきたす可能性も考えられます。ただ、また幸いなことに我が家では(セオリーに反して)テレビを右の壁に寄せて設置しているので、アクオスの右側から純正リモコンを使うことはまずないので全く問題ありませんでした。
念のため左側の受光部に外付け赤外線発光部を設置して動作確認もおこなってみました。確かにテレビ左側からの純正リモコンの操作に僅かですが支障が見られました。ただ、私は意識して動作確認したので気づいたのであって、発光部を設置していることを言われなければ、気づかない程度だと思います。実は発光部を設置した方の受光部も、通常より僅かに劣る程度に受信をおこなってくれています。
発光部を右側の受光部の前に設置したのには別の理由もあります。左右の受光部を一つずつテープで覆った上で純正リモコンで動作確認したところ、明らかに左側の受光部の方が受光可能距離が長かったのです。これも左右どちらに設置するかを決定づける大きなポイントとなりました。
アクオスに赤外線受光部が2つ設置されている理由はフェールセーフの意味もあると思いますが主には感度向上の為だと思います。異なる種類の受光モジュールを使って、受光できるエンベロープを広げたいとの意図だと思います。その意味で片方を塞ぐことはあまり好ましいことではないでしょうが、実際に使用した限りでは上に書いた点以外に特に問題はありません。
アクオスの赤外線命令の解析・取得
シリアルポート専用のコントローラ(有線リモコン)からシリアル/赤外線・ハイブリッド式コントローラへの改造にあたってシリアルEEPROM等を追加することは避けたいと思いました。幸いなことに私にはPICの乏しい内蔵メモリだけで機能豊富な赤外線リモコンの実現を可能とする為の強力な支援手段を既に持っていました。PCから操作できる赤外線学習リモコンです。
このページにも書いてありますが、これは元々RUUさんが設計・製作された学習リモコンを改造したものです。この学習リモコンは7年くらい前に元設計されたもので対応する赤外線フォーマットが少ないという欠点があるのですが、実はその欠点の裏返しとして扱うデータ量が非常に少なくて済むというメリットがあるのです。対応する赤外線フォーマットが少ないとはいっても標準フォーマットとSonyフォーマットには対応しています。アクオス(シャープ)は標準フォーマットなので対応機種です。既に過去にアクオスとこの学習リモコンとの相性確認も済ませていました。
この学習リモコンにはデバッグ用のシリアル送信ポートを設けてありましたので、デバッグ用のファームウェアに入替え、アクオス純正リモコンの内容を学習させて、その内容をどんどんPCに送信してアクオスの赤外線命令の全データを入手しました。
赤外線データをPCに送信する学習リモコン用デバッグ用ファームウェアのソース
このページからダウンロードできるソースを少し改造したものです。デバッグ用シリアル送信に時間を費やすのでこのソースで正しい赤外線発信はおこなえません。
MPASM用
ir-remocon-utl.asm 2014-3-23更新(事情は前回と同じです。実質変更はありません) 2013-11-30更新(ベースとなるファイルを更新版ir-remocon.asmに変更しました。このまま赤外線データをPCに送信するファームウェアとして使う限り実質的な変更点はありません)
著作権は元製作者のRUU氏に属します。
私自身の著作権は放棄します。
この入手したデータををPICのソースファイルに直接書き込み、さらに学習リモコンから赤外線送信のルーチンを移植することで、シリアルEEPROMなしで高機能な赤外線リモコンが実現できました。本機は高機能とは言えないかもしれませんが、本ページの派生プロジェクトとしてマクロ用リモコンのページを設けました。8ピンPICにアクオスの全赤外線命令を内蔵し、長大なマクロ等を16通り実行できます。
学習リモコンを使って取得したデータを本機で使用するにあたって、一つ難点がありました。学習リモコンは10MHzですが本機は内蔵オシレータを使用する為に8MHzなのです。
でも対応はwait時間をシミュレータを使って調整するだけで済みました。10MHzで解析したデータを8MHzで使用するわけですが、学習リモコンのファームウェアを入れ替えて8MHzで動作させてアクオスの赤外線命令全てを動作確認しましたが全く問題は発見できませんでした。こちらのハードでも確認しましたが全く問題は発見できませんでした。(数が多いし、自分自身すぐに必要なわけではないのであまり厳密に確認したわけでありませんが...)
(2013-11-30追記)今までPCから操作できる赤外線学習リモコンと本ファームウェアを使って様々な赤外線リモコンの命令を抜き出してきました。当サイトに掲載しているものだけでも、NECライティング,丸善電機、東芝ライテック、オーデリックのシーリングライト、シャープのLED電球、TSTB-R50があります。
本機のアップ写真
注: 現在の赤外線発光部はこのように修正しています。
ケースはいつものように100均で購入しました。
今回はラベル(ただの紙です)を簡単に取り替えられるようにしました。
透明カバーは100均のクリア・ファイルから取ったPP板です(他の工作でも使用しているものです)。
穴開け用のテンプレートやラベルの製作はJw_cadでおこなっています。
現在は最右上のボタンは使用していません。赤外線出力の為にボタン用のポートが1個減った為です。
このケースは剛性が不足しているので家にあったABS樹脂のアングルで補強しました。
基板のアップ写真は撮り忘れました。でもアップを掲載する価値は殆どないでしょう。旧版の基板を改造したものです。
基板の固定ねじには超低頭小ねじというものを使用しています。
本機をアクオスの脚に縛り付けた通常の運用状態でも簡単にPICを取り外してファームウェアを変更できます。
回路図
- ここと同じく、18ピンPICのPIC16F88を使用しています。
- 三端子レギュレータの回路は記述を省いています。
- これはストレートケーブル用の回路図です。クロスケーブルを使用する場合はD-SUBオスコネクタを使用し、ソフトウェアTXの出力を3番Pinに接続して下さい。Groundの接続はメスコネクタの場合と同じく5番Pinです。
- ハードウェアUSARTモジュールは使用していません。ハードウェアUSARTモジュールは必ず受信・送信のセットでEnable,Disableされる為、送信しか使用しなくても2ポート占有してしまうからです。これを開発する際に経験済みでした。
- 旧版ではアクオスから電源を取得していました。上記のディープSleepモードではアクオスからの電源の供給が途絶えるので、本機ではACアダプターから電源を供給しています。
- 既に書いたように赤外線出力の追加に従って1ポート減った為にボタンが1個、未使用になっています。マトリックス入力を使えば使用できるのですが、そこまでの必要性はないので今のままでいいと思っています。
機能一覧
(2012-2-4更新)マクロ実行中のキャンセル機能を実装しました。
(2011-5-17更新)とうとうシリアルを使用しているボタンは1個だけになりました。
今のところこんな機能にしていますが、簡単に変更できます。
機能 | 一時的な機能 | 使用ポート | コマンド | 備考 | |
1 | 電源 | マクロ・キャンセル | 赤外線 | ||
2 | PC選択 | シリアル | IAVD5 | ||
3 | 決定 | 画面復帰 | 赤外線 | ||
4 | 地上A | TV選択 画面復帰 | 赤外線 | ||
5 | 地上D | TV選択 画面復帰 | 赤外線 | ||
6 | BS | TV選択 画面復帰 | 赤外線 | ||
7 | 選局Up | TV選択 画面復帰 | 赤外線 | シリアルでも可能 | |
8 | 選局Down | TV選択 画面復帰 | 赤外線 | シリアルでも可能 | |
9 | 音量Up | 赤外線 | |||
10 | 音量Down | マクロ・キャンセル | 赤外線 | ||
11 | 消音 | マクロ・キャンセル | 赤外線 | シリアルでも可能 | |
12 | 画面オフ・マクロ(電源ON後、1回目) | 赤外線 | |||
13 | 画面オフ・マクロ(電源ON後、2回目以降) | 赤外線 |
- シリアル、赤外線のどちらでも実現可能な場合は赤外線を使用しています。赤外線の方がアクオスの反応が早いからです。
- PC選択がボタン一発で出来ることが、旧版を製作した動機です。新版でももちろんその特徴を引き継いでいます。
- (※現在は未使用)お好みチャンネルの機能もどちらかと言うとシリアルのみで実現可能な機能です。赤外線の場合もチャンネルを登録してあればチューナーの選択と組み合わせたマクロで曲りなりに実現可能ですが、シリアルの方が遥かにシンプルで簡単です。
- 2011-5-17の更新でTV選択ボタンは廃止しました。他の多くのボタンが同じ役目を果たせるので元々必ずしも必要ではありませんでした。
- 「画面オフ・マクロ(電源ON後、1回目)」と「画面オフ・マクロ(電源ON後、2回目以降)」の違いは、メニュー・タブを4つ右に移動するコマンドが含まれるか否かです。画面オフ機能は左から5番目のメニュー・タブにあるのですが、テレビ起動時はアクティブなメニュー・タブが一番左に初期化されています。その為に「同1回目」にだけメニュー・タブを移動するコマンドが含まれるのです。
- 「同1回目」と「同2回目」の使い分けは記憶に頼る他なく、間違いは避けられません。その為にキャンセル機能を用意しています。「同1回目」のキャンセル機能にはキャンセルを実行するまでに動いてしまったメニュー・タブの位置を元に戻す機能が含まれています。
ソース
MPASM形式
aquos-ctl.asm
↑
2012-2-4 マクロ・キャンセル機能を追加しました。
↑
2011-5-17 現在使っているプログラムに差替えました。NHK・BSの臨時チャンネルを選択できるように必ずしも必要ではない「TV選択」を削除して替りに「決定」を追加しました。
↑
2010-12-9 現在使っているプログラムに差替えました。画面オフの手順が面倒な古い機種なので、画面オフ・マクロを加えました。
↑2008-2-13 (長期テストをおこなっていた為アップが遅くなりました) ウォッチドッグタイマーが有効ではなかったバグを修正し、さらにclrwdt命令の発行を削除して、数分毎に必ずリセットがかかるようにしました。これは長期使用しているとPIC16F88のRA5が入力を受け付けなくなる問題に対応するものです。この問題は私の手持ちのリビジョンではどれでも起こります。RA5はMCLRと兼用の為か問題を抱えているようです。この問題ではプロセッサ全体がハングアップするわけではない為、clrwdt命令を発行していては回避できません。定期的にRA5だけ再初期化する方法でも回避できるかな?と思いますが、なにぶんテストに時間がかかるので試していません。
↑2008-2-24 少変更を加えました。変更内容は電源ボタン以外を2連続発行から1度の発行へ戻したことと、ウォッチドッグタイマーの追加です。前者の変更によってチャンネルの連続変更時のフィーリングが良くなります。(前者は実は9ヶ月前の前リリースの直後からそうしたほうがいいと思っていましたが、操作する人間が慣れれば問題ないとも言えるので放置してありました。要は1度目と2度目の発行の間隔が最適ではなかったということだと思います。最適な間隔を探すのは面倒なので手っ取り早く1度発行式に戻しました。)
2008-7-30 この程とうとうRA5が壊れました。入力を受け付けなくなりました。使用しているPIC16F88は2,3年前に秋月で購入したものです。とりあえずこのころ購入したものはMCLR兼用のポートをできる限り使用すべきでないようです。しかしRA5以外は壊れていないので同じチップを今後も使用します。ただし電源ONOFF機能は必須なので対処が必要です。お好み2を廃止して電源ボタンに再割り当てしました。定期的な強制リセットは必要なくなったので止めました。対処後のソースは特にアップしません。
赤外線送信ルーチンの著作権は元製作者のRUU氏に属します。
ソフトウェアTXルーチンはELECTRONICS SHELVESから入手しました。
入手先で著作権の掲示はありませんでした。
waitルーチンはやまもっちのお部屋からダウンロードしたPICのWAIT計算機を用いて自動生成しました。
自由に使用していいもののようです。
私自身の著作権も放棄します。
※本ソースでは1バイトずつ送信するソフトウェアTXルーチンを使用していますが、1コマンド(9バイト)を一気に送信する他のソフトウェアTXルーチンで試したところ、アクオスがコマンドを認識してくれませんでした(ハイパータミナルなら正しく受信できるのに)。詳しくは調べていませんが、一応留意しておいたほうが良いと思います。