ロボゼロをコンピュータ制御してみる その4
2012年9月26日


 前回はロボゼロを赤外線リモコン・エミュレートプログラムでPCから動かしてみました。
 今回はスマートフォン用赤外線リモコンプログラムを作成してスマホでロボゼロを操作してみます。
 今回のアプリケーション開発にあたってはSHARP SDK AddOnを使用しました。
 この中のIrRemoteControllerというクラスのAPIを使っています。

 前回のBUFFALOのパソコン用学習リモコン (PC-OP-RS1)を使った時はロボゼロ赤外線リモコンから受信したデータを記録しておいてそのままPC-OP-RS1から送信していました。
 今回のAPIは赤外線コントローラから送信される信号をHI-LEVELとLOW-LEVELの時間で制御するものでロボゼロ赤外線リモコンの信号を解析する必要がありそうです。

 解析にあたってはRS-Analyzerというソフトを使わせて頂きました。
 このソフトはPC-OP-RS1で受信したデータを信号の波形で表示してくれるもので何がなんだか分からなかった16進の受信データもちゃんとした信号として見えてきます。



 上の信号はロボゼロ赤外線リモコンの電源ボタンの受信データですが下の▲ボタンと比べると31.6msecまで同じ信号です。



 念のため全てのボタンの波形を調べてみると31.6msec以前の信号は全く同じで31.6msec以降の信号が変化しています。
 その信号の変化に規則性がある事に気が付きます。
 この部分の信号は9個あり2種類に分類できます。
 HI-LEVELが0.5msecとLOW-LEVELが0.6msecのもとのHI-LEVELが0.5msecとLOW-LEVELが1.6msecの2種類です。
 12.8msec〜31.6msecの信号もこの組み合わせです。
 この組み合わせこそ本APIで言っているデータ変調方式(論理パルス情報)です。
 これはデータの0と1を信号のHI-LEVELとLOW-LEVEL長さで表すものでこの場合0.5msecと0.6msecの組み合わせを0、0.5msecと0.6msecの組み合わせを1とします。(本当は逆かも知れませんが出力結果は変わりません)
 各ボタンの信号を0と1で表すと次のようになります。

ボタン1000000000 ボタン2100000000 ボタン3010000000 ボタン4110000000
ボタン5001000000 ボタン6101000000 ボタン7011000000 ボタン8111000000
ボタン9000100000 ボタン10100100000 ボタン11010100000 ボタン12110100000
ボタン13001100000 ボタン14101100000 ボタン15011100000 ボタン16111100000
ボタン17000010000 ボタン18100010000 ボタン19010010000 ボタン20110010000
ボタン21001010000         

 このデータを見て気付く事はMSB(最上位ビット)から順番にカウントアップされています。
 送信したいボタン番号-1のビットの並びを逆にすれば送信データを作り出す事ができそうです。

 31.6msec以前の信号をフレーム1()、31.6msec以降の信号をフレーム2として送信します。
 12.8msecまではフレーム1のリーダ部として出力します。
 これらをまとめると以下のようになります。

フレームリーダー(HIGH)リーダー(LOW)データデータ長(ビット)トレーラフレーム長
18400 *14300 *10x37,0x009031500 *1
200ボタン番号 *2,0x009013500 *1
        *1 μsecで指定
        *2 ボタン番号から1を引いてビット並びを逆にする(ボタン番号が6の場合は0xA0)

キャリア(HIGH)キャリア(LOW)論理パルス0(HIGH)論理パルス0(LOW)論理パルス1(HIGH)論理パルス1(LOW)
120 *1150 *1500 *2600 *2500 *21600 *2
        *1 0.1μsecで指定
        *2 μsecで指定

 ロボゼロ赤外線リモコンのキャリアに関する資料がみつからなかったのでSHARPのサンプルプログラムのままにしています。

 プログラムの実装はAndroidで行います。
 Androidのプログラミングについてはいろいろなサイトで詳しく記述されていますのでここでは言及しません。



 アプリケーションの画面です。ロボゼロのリモコンを写真に撮ったものをそのまま使いました。(著作権の問題があるかも知れませんが、大目に見てください)
 ボタンの位置を指でタッチするとそのボタンに対応したデータが送信されます。
 プログラムの終了ボタンは、電源ボタンにしたい所ですがリモコンの電源ボタンも重要なのでロゴマークの「ROBO XERO」のXの部分をタッチすると確認ダイアログが表示され「はい」を答えるとプログラムが終了します。
 Androidのアプリケーションはあまり終了という意識がないようですがどうも気持ちが悪いので終了操作を付けています。(なくてもメカニカルボタンで強制終了させる事ができますが)

 なお本アプリケーションはSHARPのAPIを使っているためどのAndroid携帯でも使えるという訳ではありません。(折角ガラケーじゃないのに残念ですが)
 SHARPのサイトに対応機種が掲載されています。


 プログラムの実行動画です。

     

 プログラムはいろいろなボタンの操作ができるように電卓プログラムで試しています。

 一応ボタンを間違えて認識する事はないのですが結構近づけないと反応してくれません。
 わざわざスマホでやらなくても本物のリモコンで操作できるのであまり利用価値はなさそうですが、この方法で直接スマホからリモコン信号が送信できるのでスマホでロボゼロを制御する事ができます。

 今回作成したプログラムは下記のURLにアップしておきますので興味のある方はダウンロードして使ってみてください。
 ただしアプリケーションの実行にあたってはAndroid携帯が対応機種である必要があります。

  http://www.mcc.mbsrv.net/robox/RXIRCon.apk

 下のQRコードをAndroid端末のコードリーダーで読み込ませてもダウンロードする事ができます。

  

 なお今回のプログラムのご使用にあたっては、多少なりともロボゼロ本体への影響を伴いますのであくまでも自己責任という事でお願いします。
 またロボゼロ赤外線リモコンの信号を完全に再生できる訳ではなく信号を誤って認識したり信号に反応しない場合がありますのでご了承ください。

目次に戻る