LoginSignup
41
42

More than 5 years have passed since last update.

自作リモコンでエアコン操作

Posted at

少し前に赤外線リモコンでエアコン操作を実験した結果。

必要な部品を準備

調達部品(すべて秋月さんで購入)
 ・赤外線リモコン受信モジュール(100円)
 ・赤外線RED(150円)
 ・ジャンパーコード(200円)
 ・arduino nano(3000円くらい)
 ・抵抗/ブレッドボード(合わせて300円くらい)
IMG_0111.jpg

操作用のPCを除けば、値段は5,000円以下で調達可能です。

ブレッドボードで配線

IMG_0116.jpg

次にarduinoと接続して赤外線受信ポートにリモコンをつなげてリモコン操作を記録。

受信プログラム

#define READ_PIN 2
#define LOW_STATE 0
#define HIGH_STATE 1

unsigned long now = micros();
unsigned long lastStateChangedMicros = micros();
int state = HIGH_STATE;
int delimiter = 0;

// 初期化
void setup(){
  Serial.begin(57600);
  pinMode(READ_PIN, INPUT);
  Serial.print("\n");
}

void waitLow() {
  while (digitalRead(READ_PIN)==LOW) {
    ;
  }
}

int waitHigh() {
  unsigned long start = micros();
  while (digitalRead(READ_PIN)==HIGH) {
    if (micros() - start > 5000000) {
      return 1;
    }
  }
  return 0;
}


void loop() {
    if (state == LOW_STATE) {
      waitLow();
    } else {
      int ret = waitHigh();
      if (ret == 1) {
        Serial.print("\n");
        return;
      }
    }
    now = micros();
    if (delimiter == 1) {
      Serial.print(",");
    }
    Serial.print((now - lastStateChangedMicros) / 10, DEC);
    delimiter  = 1;
    lastStateChangedMicros = now;
    if (state == HIGH_STATE) {
      state = LOW_STATE;
    } else {
      state = HIGH_STATE;
    }
}

このプログラムをマイコンに書き込んで、赤外線受信ポートにリモコンを向けて操作。

スクリーンショット 2014-10-03 0.19.05.png

各操作の信号が取得できます。
エアコンは信号が多い。。。

エアコン操作

小型ブレッドボードに配線してラズベリーパイとシリアル接続でON/OFFシグナルで実行できるようにして組み込み。

IMG_0119.jpg

プログラム(arduino側)

byte val=0;

int output = 2;

int aircon_on[] =  {340,171,43,128, ……先ほど取得したデータを貼付け};
int aircon_off[] = {340,171,43,1288};

int last = 0;
unsigned long us = micros();

void setup() { 
  Serial.begin(9600);
  pinMode(output, OUTPUT);
}


void send(int data[]) {
  int dataSize = sizeof(data) / sizeof(data[0]);
  for (int cnt = 0; cnt < dataSize; cnt++) {
    unsigned long len = data[cnt]*10; 
    unsigned long us = micros();
    do {
      digitalWrite(output, 1 - (cnt&1)); 
      delayMicroseconds(8); 
      digitalWrite(output, 0);
      delayMicroseconds(7);
    } while (long(us + len - micros()) > 0);
  }
}

//シリアル処理の待ち受け
void loop() {
  if(Serial.available() > 0){ 
    val = Serial.read();
   } else if(val == 'ON'){
     send(aircon_on);
   } else if(val == 'OFF') { 
     send(aircon_off);
   }
   delay(3000);
}   

ラズベリーパイから信号を送信すると、エアコンの電源が入ります。
※ラズベリーパイからはnode.jsで実行しました。

【補足】
応用でラズベリーパイをWEBサーバにして、iOSのシェイクイベントなどを利用して
ジェスチャーで直感的にリモコン操作の家電を操作できます。

シェイクイベント取得はgShake.jsが便利です(example)

<script src="jquery.min.js" type="text/javascript"></script>
<script src="gShake.js" type="text/javascript"></script>
<script type="text/javascript">
$(document).ready(function() {
  $(this).gShake(function() {
  // ajax
    $.ajax({
      type: "GET",
      url: "/aircon/on",
      dataType: "script"
    });  
  });
});
</script>
41
42
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
41
42