opamp_sando's blog

クソザコが割りと適当なことを書くためにある備忘録です。あとたまに普通の日記も書きます

Arduinoを使ってリモコンの赤外線の受信テスト

最近何か作りたくてしょうがないので、次に手元に合った赤外線受信センサーと赤外線LEDを使って遠隔操作できるリモコンを作ってみることにした。とはいえ、よくわからないのでまずはArduinoを使ってリモコン信号を受信し、パソコンでそれを眺めてみることにする。実際に何か作るときはArduinoじゃなくてマイコンを直接触ると思う(arduinoは一応講義で使う可能性があるからね)。

環境

ということで、Arduinoとコンピュータの環境は次のような感じ

まあ、いつものって感じです。次に使った部品

コンデンサなどはセンサモジュールの電源安定化のため。

回路

組んだ回路に関しては、回路図を書くのがめんどくさいので以下の動画を参照。2:43ごろの回路をほぼそのまま利用させていただきました。

赤外線通信のすすめ【紹介編】 ‐ ニコニコ動画:GINZA

Arduinoの環境構築

ArchLinuxでArduinoの環境を整えて見ました。以前講義でArduinoを使った時に整えたけど、大分放置されIDEのバージョンは古く、手抜き工事ゆえのrootじゃないと書き込めないという欠陥仕様なのでArchWikiを見てちゃんと構築する。

https://wiki.archlinuxjp.org/index.php/Arduino

まず、yaourtを使ってAURからarduinoをインストール。

$ yaourt -S arduino

次に、インストール最後にも表示されるようにuucpとlockグループにアカウントを追加。

$ (sudo) gpasswd -a opamp uucp
$ (sudo) gpasswd -a opamp lock

これでグループ情報を適用させるために再起動または再ログインするとarduinoコマンドからArduino IDEが利用できるようになる。
wikiにはcdc_acmモジュールをロードすると書いているけどうちの場合はすでにロードされていた。

lsmodなどを使って確認することができる。

$ lsmod

ロードされてない場合はwikiの通りロードしてみる。

これで構築は完了。

プログラムを書く

今回は定番のIRremoteというライブラリを用いて簡単にArduinoで赤外線リモコンの信号を受信してみる。
どうやら最新のArduino IDEにはそれらしきライブラリが標準であるようだが、どうもこれを使うとコンパイルでコケるのでgithubからダウンロードしたものを使う。ダウンロードは「Releases」から「IRremote.zip」を落とす。
今回は2.0.1BETAのバージョンを利用した。

[f:id:opamp_sando:20151025020644p:plain]

(↑なんか何回写真を貼り直してもちゃんと表示されないんだけど)

で、ダウンロードしたらArduino IDEのメニューバーの「スケッチ」から「include library」を選んで「Add ZIP Library」を選択。ここで先ほどダウンロードしたらzipファイルを選択すれば良いようだ。

ということで実際のコードは以下のようになった。

#include <IRremote.h>
 
const int RECV_PIN = 2;
IRrecv irrecv(RECV_PIN);

decode_results results;

void setup(){
  irrecv.enableIRIn();
  Serial.begin(9600);
}

void loop(){
  if (irrecv.decode(&results)) {
    Serial.print(results.value, HEX);
    Serial.print(" (");
    Serial.print(results.bits, DEC);
    Serial.println(" bits)");
    Serial.print("Raw (");
    Serial.print(results.rawlen, DEC);
    Serial.print("): ");
    
    for (int i = 0; i < results.rawlen; i++) {
      if ((i % 2) == 1){
        Serial.print(results.rawbuf[i]*USECPERTICK, DEC);
      }else{
        Serial.print(-(int)results.rawbuf[i]*USECPERTICK, DEC);
      }
      Serial.print(" ");
    }
    
    Serial.println("\n^^^^^^^^^^^^^^^^^^^^^^^^^^^^");
    irrecv.resume(); // Receive the next value
  }
}

書き込めない場合は「ツール」のボードやポート設定が正しいかを確認してみると良い。

動かしてみた

実際に動かして、適当に部屋の照明のリモコンやらエアコンのリモコンやらを近づけてボタンを押した。結果はシリアル通信で返ってくる。

f:id:opamp_sando:20151025022001p:plain

なお、このデータを送信はしてないので本当に合っているのかは謎。

ところでhatenaって時々画像やリンクを貼っても反映されずに写ったりして意味不明なんだけどこれワシが悪いんか?

参考資料

http://deviceplus.jp/hobby/entry023/

http://www.nicovideo.jp/watch/sm20908757

ありがとうございました。

Firefox ブラウザ無料ダウンロード