少し前に赤外線リモコンでエアコン操作を実験した結果。
##必要な部品を準備
調達部品(すべて秋月さんで購入)
・赤外線リモコン受信モジュール(100円)
・赤外線RED(150円)
・ジャンパーコード(200円)
・arduino nano(3000円くらい)
・抵抗/ブレッドボード(合わせて300円くらい)
操作用のPCを除けば、値段は5,000円以下で調達可能です。
次に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;
}
}
このプログラムをマイコンに書き込んで、赤外線受信ポートにリモコンを向けて操作。
各操作の信号が取得できます。
エアコンは信号が多い。。。
##エアコン操作
小型ブレッドボードに配線してラズベリーパイとシリアル接続でON/OFFシグナルで実行できるようにして組み込み。
プログラム(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>