うしこlog
公開: 2014/07/11

ラズパイでエアコンを操作

今回の内容

 ラズベリーパイを使ってダイキンのエアコンを動かしてみます。そのために、エアコンのリモコンから出力される赤外線の信号解析および、解析した信号の送信をするプログラムを作成しました。

 エアコンの信号フォーマットは、現在設定している温度や風量などの状態をすべてエアコン側へ送信する形式となっています。今回紹介するプログラムでは、全ての状態を含んだ命令を受信したり送信したりするプログラムであることに注意してください。

前回までの内容は?

 前回までで、ラズベリーパイを使うための設定(OSのインストール等)をして、SSHでリモート接続ができるようになりました。また、ラズベリーパイでセンサや電子回路を扱えるようにGPIOの使い方を説明しました。
前回までの内容を確認したい方や、ラズベリーパイをもっと活用したい方 は、ぜひ以下の記事をご確認ください。

エアコンの信号解析

 エアコンの信号は赤外線を用いてやり取りされています。
そのため、赤外線の信号を解析し、同じ信号をラズパイからエアコンへ送信できれば、エアコンを動かすことができます。この章では、赤外線の信号を解析することができる「信号解析プログラム」について説明します。

信号解析回路

 回路といっても、ラズパイと赤外線受信モジュールを繋げるだけです。
ラズパイの7番ピン(= wiringPiの7番ピン)と、赤外線受信モジュールの入力端子を繋げます(図1のオレンジ線)。あとは電源(黄)とGND(青)をラズパイ-受信モジュール間に繋げて完成です。本当は、ノイズカット用にコンデンサを挟んだ方がよいのですが面倒なのでやりません。

 GPIOのピン配置はラズベリーパイでGPIOを使うをご覧ください。

エアコン信号解析回路
エアコン信号解析回路

信号解析プログラム

 ネットで検索してもエアコンの詳しい信号フォーマットが分からなかったので、信号を解析するプログラムを作りました。基本的に信号は、赤外線のオン・オフで表現されています。従って、エアコンの信号フォーマットが分からなくても、赤外線のオン・オフ時間さえ分かればいいわけです。

 作成した信号解析プログラムは、赤外線モジュールから入力された赤外線のオン・オフ時間を調べ、その結果をテキストに出力します。

 信号解析プログラムを、以下のファイルにまとめました。

 ReadInfraredData.c

出力データ

 解析された結果は、テキストファイルとして出力されます。出力ファイル名は、実行時の引数に指定することができます。デフォルト値は"ir_data.txt"です。
テキストとして出力されたデータは「on時間」「off時間」の組が1行に書き出され、この組が何行にもわたって記述されます。

出力されたデータ例
   375    456
   376    464
   392    464
   392    464
       ・
       ・
       ・
   399    464
   392   1331
   384    464
   392 227744

使い方

 本プログラムはc言語で記述されているため、「gcc」等でコンパイルして実行してください。また、本プログラムはGPIOを使うためにwiringPiを用いているため、コンパイル時にwiringPiを指定する必要があります。
実行手順は以下の通りです。実行時には、出力ファイル名を指定することができます。プログラム終了後、解析結果がテキストファイルに出力されます。
出力されたファイルは、後に示す信号送信プログラムの入力ファイルとして使用します。

 環境によっては、データを正しく受信できない場合もあるため、出力されたデータを見て不正なデータ(データが負である等)が出力されるかもしれません。そのときは再度、受信プログラムを実行してみてください。

[手順]

  1. 本プログラムを以下のようにコンパイルする
    sudo gcc ReadInfraredData.c -o ReadInfraredData -lwiringPi
  2. 本プログラムを実行する (引数:出力ファイル名)
    sudo ReadInfraredData ir_data.txt
  3. リモコンを受信モジュールへ向けてボタンを押す
  4. Ctrl+cでプログラムを終了する

エアコンへ信号送信

 前の章では、エアコンの信号解析をすることができました。 この章では、エアコンに解析した信号を送信してエアコンを動かす「信号送信プログラム」について説明します。

信号送信回路

 信号送信回路も簡単で、赤外線LEDとラズパイを繋げるだけです。 ラズパイの11番ピン(= wiringPiの0番ピン)に、抵抗を繋げ、抵抗と赤外線LEDのアノードを繋げます(オレンジ線)。 あとは電源(黄)とGND(青)をラズパイ-赤外線LED間に繋げて完成です。

GPIOのピン配置はラズベリーパイでGPIOを使うをご覧ください。

エアコン信号送信回路
エアコン信号送信回路

信号送信プログラム

 本プログラムも受信プログラムと同様、開発言語にc言語、GPIOを使うためにwiringPiを用いているため、コンパイルはgccを使いwiringPiを指定してください。
作成した信号送信プログラムは、入力として赤外線のオン・オフ時間が記述されたテキストを読み込み、オン・オフ時間どおり赤外線LEDを点滅させることでエアコンに命令を送信します。

 信号送信プログラムを、以下のファイルにまとめました。

 SendInfraredData.c

入力データ

 本プログラムでは、送信するデータとして、入力ファイルに書かれたデータを使用します。
入力ファイル名は、実行時の引数に指定することができます。デフォルト値は"ir_data.txt"です。入力ファイル内のデータは「on時間」「off時間」の組が1行に記述され、この組が何行にもわたって記述されているものを使用します。

基本的には、このプログラムの入力ファイルとして信号解析プログラムにより出力されたファイルを使用します。

入力ファイルのデータ例
   375    456
   376    464
   392    464
   392    464
       ・
       ・
       ・
   399    464
   392   1331
   384    464
   392 227744

使い方

 本プログラムはc言語で記述されているため、「gcc」等でコンパイルして実行してください。
実行手順は以下の通りです。実行時には、入力ファイル名を指定することができます。実行すると、入力テキストに記述してある赤外線データを送信します。
入力ファイルとして、信号解析プログラムにより出力されたファイルを使用すればエアコンを動かすことができます。

[手順]

  1. 本プログラムをコンパイルする
    sudo gcc SendInfraredData.c -o SendInfraredData -lwiringPi
  2. 本プログラムを実行する (引数:入力ファイル名)
    sudo SendInfraredData ir_data.txt
  3. 命令が送信されてエアコンを動かせる
<< ラズパイのGPIOを使う ラズパイで音声認識をしてみるへ >>