寒い季節となりました
私はコタツで寒さを凌いでいます コタツいいですよね エアコンやファンヒーターと比べて温もりを感じられます
しかしながら、手動でスイッチをON/OFFしなければなりません さらに、電源を付けっぱなしで外出することもありとても危険です
コタツの電源をスマートフォンで操作できるようになれば、わざわざスイッチまで行かなくて済みます スマートフォンでコタツを操作できるものを作ってみたので掲載しておきます
準備するもの
-
お手持ちのスマートフォン
-
Arduino
-
サーボモーター
購入先: Amazon
-
タクトスイッチ 購入先: 秋月電子
-
Bluetoothアダプタ
購入先: ヨドバシカメラ
-
SBDBT 購入先: RT ROBOT SHOP
準備するものを見た通り、ArduinoとスマートフォンをBluetoothで接続して操作を行っています
そのため、スマートフォン以外でもBluetoothが内蔵しているパソコンでも操作をすることが可能です
上記のモノを接続し、プログラムを書き込みます
書き込むプログラム
/*
Create date: 2014/11/09
implementafor: Momiji Miyakawa
*/
#include <Servo.h>
#include <MsTimer2.h>
Servo servo; //Servoオブジェクト作成
int i = 0;
int flg = 0;
void setup()
{
Serial.begin(9600);
static boolean output = HIGH;
output = !output;
servo.attach(9); //サーボ接続ピン
}
//データ読み込み関数
char Serialread(){
while(!Serial.available());
return Serial.read();
}
//割り込みタイマー
void flash() {
static boolean output = HIGH;
Serial.println("switch off");
output = !output;
stpkota();
}
//ON スタートこたつ
void sttkota(){
MsTimer2::set(i * 100000, flash); // ミリ秒に変換し、タイマー割り込みを実行する
//MsTimer2::set(10000, flash); //debag
MsTimer2::start();
servo.write(0); // サーボの角度を90°に設定
}
//OFF ストップこたつ
void stpkota(){
servo.write(90); // サーボの角度を90°に設定
MsTimer2::stop();
flg = 0;
}
//main文
void loop()
{
if(flg == 0){
Serial.println("How time?");
Serial.println("1 : 1 hour");
Serial.println("2 : 2 hour");
Serial.println("3 : 3 hour");
Serial.println("4 : 4 hour");
//Serial.println("e : 30 minutes");
delay(1000);
char w1 = Serialread();
switch(w1){
//1時間
case '1':
i = 36; //Arduinoのintegerは-2^15から(2^15)-1の範囲であるため、1/100000をする
flg = 1;
Serial.println("ok. 1 hour");
sttkota();
Serial.println("Encyou = e, OFF = o");
break;
//2時間
case '2':
i = 72; //Arduinoのintegerは-2^15から(2^15)-1の範囲であるため、1/100000をする
flg = 1;
Serial.println("ok. 2 hour");
sttkota();
Serial.println("Encyou = e, OFF = o");
break;
//3時間
case '3':
i = 108; //Arduinoのintegerは-2^15から(2^15)-1の範囲であるため、1/100000をする
flg = 1;
Serial.println("ok. 3 hour");
sttkota();
Serial.println("Encyou = e, OFF = o");
break;
//4時間
case '4':
i = 144; //Arduinoのintegerは-2^15から(2^15)-1の範囲であるため、1/100000をする
flg = 1;
Serial.println("ok. 4 hour");
sttkota();
Serial.println("Encyou = e, OFF = o");
break;
//30分
case 'q':
i = 18; //Arduinoのintegerは-2^15から(2^15)-1の範囲であるため、1/100000をする
flg = 1;
//Serial.println("ok. 30 minutes");
sttkota();
Serial.println("Encyou = e, OFF = o");
break;
//エラーメッセージ
default:
Serial.println("error");
stpkota();
//Serial.println("chouse a - d");
break;
}
delay(1000);
}
while(flg == 1){
char w2 = Serialread();
switch(w2){
//延長
case 'e':
i = 108; //3時間の延長
//Serial.println("1"); //debag
sttkota();
break;
//OFF
case 'o':
stpkota();
break;
}
}
}
サーボモータを9pinに接続します SBDBTの接続については下記の動画を参照してください
(参考) mはげ様 【ゆっくり解説】 Bluetoothの使い方 【電子工作】
このプログラムをざっくり説明すると、「スマホから”1~4”までの数値をArduinoが読み込み、それに対応したタイマーが開始し、コタツがONになる」ようにしました
"1"は1時間タイマー、
"2"は2時間タイマー、
"3"は3時間タイマー、
"4"は4時間タイマーです
止めたい場合は、“o”を送信すれば止まります 延長するときは”e”を送信してください
ArduinoとRaspberryPiの接続については、後日記事にします