Back to tech

コタツをスマートフォンで操作する

3 min read
Table of Contents

寒い季節となりました

私はコタツで寒さを凌いでいます コタツいいですよね エアコンやファンヒーターと比べて温もりを感じられます

しかしながら、手動でスイッチをON/OFFしなければなりません さらに、電源を付けっぱなしで外出することもありとても危険です

コタツの電源をスマートフォンで操作できるようになれば、わざわざスイッチまで行かなくて済みます スマートフォンでコタツを操作できるものを作ってみたので掲載しておきます

準備するもの

準備するものを見た通り、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の接続については、後日記事にします