デコード目的Arduinoを使ってリモコンを作ります。最終的には、スマートスピーカーと連携させて、スマート家電ではない従来のリモコン操作による家電を、まるでスマート家電のように操作することを目指します。第一段として、Arduinoでリモコンの信号を読み取ってみます。作りたいのは、リモコンの送信機ですが、リモコンで送信する信号を、企業は公開してくれません。必要な信号は自分で手に入れる必要があります。リモコンの信号について一般的なリモコンは、赤外線LEDを使って不可視光による光の通信を行います。LEDを決まったルールに則って点滅させると、受信側がその意味を解読(デコード)し、その命令に従って機械を動かします。ガラパゴス化が大好きな日本では、LEDの光らせ方のルールも複数あります。海外製の家電だと、さらに違う方式の可能性があります。ここでは、国内家電によく使われる家電協(AEHA)方式とNEC方式について必要最低限な情報を押さえておきます。ちなみに、この他にはSony方式なんかがあります。共通事項LEDが点滅することによって送る信号は、リーダー、データ、ストップビットに分けることが出来ます。(本当はもう少し複雑です)リーダーは、LEDのONとOFFを組み合わせ、これからデータが来ますよという合図を送ります。データ部分では、LEDのONとOFFを組み合わせて、デジタルの「0」と「1」を表現します。単位時間をTとすると、「0」は1TだけONした直後に1TだけOFF、「1」は1TだけONにした直後に3TだけOFFで表します。ストップビットは、データを全部送った後に、1TだけONにして、これが最後ですよという合図を送ります。実際には、LEDの発光は38kHzで変調されていますが、Arduinoで信号を受信する分には無視できるので割愛。信号を送信するときに改めて説明します。425μsを使います。(1700μs)です。562μsを使います。(4496μs)です。Arduinoで信号を解析するArduinoを使ってリモコンの送信機を作る前に、送信する信号を読み取りましょう。OFFのタイミングを調べ、一連のタイミングから信号を解読します。巷では、リモコンの信号解析をするにあたって赤外線センサーや赤外線モジュールが勧められていますが、リモコンの送信機が目的なので、センサーは後々不要になります。言うより、端から用意する必要はありません。赤外線LEDをセンサーとして使用します。LEDは適切な電圧をかけると光を出しますが、実は光を受けると電圧が生じます。ArduinoにはADCがありますので、電圧を読み取り、適当にしきい値を設けて、受光を判断します。LEDはそのまま送信機に流用することを考えると、高輝度広角のものが良いです。私は10個入り100円で手に入れたYSL-R531FR1C-F1を使っています。回路Arduinoのアナログピン(上の図ではA0)に赤外線LEDのアノード(足の長い方)を、GNDにカソードを直接挿します。ピンから電流を出力(digitalWriteでHIGHに)しないで下さい。LEDが焼き切れます。スケッチ単純に、赤外線が入力された時間、されなかった時間をシリアル通信で出力してみます。thresholdとanalogReadピンは適宜修正して下さい。}}一例として、こんなものが出力されます。-54433923360-1680440-1304440-408424-416424-416416-408416-416536-408416-408424-416424-416416-408424-416528-1192440-416436-412424-416536-400416-408416-400536-280536-1176552-1184440-408424-416536-288536-400420-404420-412424-1312448-408424-1208552-400400-1296448-1192440-1312440-1192448-408536-1184440-408424-1312448-408424-416424-424424-408528-288536-400424-408424-416424-1320440-1192448-1304440-1208440-1304448-1208440-1320440-1192552-392400-1296440-408424-416424-416416-408528-288544-408420-1196560-280528-1176552-1184440-1312448-1200440-1320440-1192552-392400-1296440-408424-416424-416416-408416-1312440-1192560-1176440-416424-1312440-1192448-1312440-1208552-392408-400416出力される数字のうち、+は入力があった時間、-は入力がなかった時間です。最初の桁の大きいマイナスの数字は、前回の最後の入力からの時間ですので、その次のプラスの数字からがリモコンの信号です。OFFの時間は、本来はキレイなTの整数倍でいてほしいですが、結構バラツキがあります。言え、AEHA方式であれば、リーダのONの長さは3400μs、NEC方式であれば約9000μsですので、最初のONの時間を見ればどちらか判断できます。425)」みたいに計算すると一発で計算出来ます。上の例で示した信号は、次のようになりました。-3以外があるようだと、受信がうまく出来ていません。何回か試してみてください。注意2:リモコンによっては、少し間を開けて同じ信号を何度か繰り返します。桁の大きいマイナスの値(LEDが長くOFFな時間)の後にリーダ部分が再度現れますので、取得したデータを見ればわかるはずです。なんとなくキレイにはなりましたが、まだわかりにくいです。-3を1に変換し、他の数字は無視すればOKです。以下のようなスクリプトで簡単に変換できます。"1"print(dec)この結果、上の例で示した信号は次のようなものでした。1000000000001000000011000000101011110101000000001111111101000000101111110100001110111100これで、リモコンの送信に必要な信号データは手に入りました。これをさらに16進数表すと...なんてのは別にやる必要はありません。次回は送信機を作ります。フェルトの手作りシルクハットの制作手順を紹介します。端午の節句用に本格手作り着用兜で紹介した兜について、製作手順を記しておきます。