かびからスマートホーム

Last Updated on 2018-04-16 by djnagureo

ホテル住まいではわからなかったのですが、

沖縄に在住すると、湿度がたかく、すぐにカビる。

自分も早速、靴にカビがちらほら見えまして、かつ

ゴキXXなど、虫も大嫌いです。

空気も、掃除も、自動化。

きれいで住み心地の良い部屋対策をすることとしました。

部屋の空気の流れをよくするために、安めのサーキュレーターと

 

奮発をして、連続排水(タンクがない)除湿機を購入しました。

裏にホースが接続できて、浴室に除水を送っています。

 

仕組み

湿度が上がる=70%を超える=除湿機・サーキュレーターON

下がる=60%から下がる=除湿機・サーキュレーターOFF

 

「温度・湿度センサー」と「通信モジュール」を中心に作ってみる。

ちょっとマニアックなので、概要だけにしておきます。

  1. 1時間おきに湿度と温度を測定
  2. 一定の湿度(70%)を超えたら、インターネット(ifttt)へ投稿をして、部屋の除湿機器を制御する。
  3. ついでにgoogleカレンダーにも記録

こんな感じです。

部屋はインターネットの契約をしていないこともあり、携帯の格安SIMをつかってネットに接続。

家電のON/OFFをさせます。

除湿機やサーキュレータは、一般的なものなので、電源ボタンを物理的にプッシュできるものを使います。

 

 

 

 

 

 

システム

除湿機コロナ CD-H18Aホースで連続排水できる たかかった
サーキュレーターアイリスオオヤマ PCF-HD15安価 
スイッチSwitchbotBluetooth 
スイッチ用HUBSwitchlinkSwitchbotをWiFiに接続 
マイコンARDUINO系 ESP-32なんでも良い手持ち
センサーDHP-11温度と湿度センサー手持ち
通信ユニット3GIM通信モジュール手持ち 
格安SIM480円/月額なんでも良いヤマダ電機 

 

1.センサーから、温度と湿度を1時間おきに取得をするプログラム

半田づけをしなくて、差込みで回路がつくれるブレッドボードをつかいます。

USBが電源で、処理(プログラム)を実行するマイコンと、温度・湿度センサーと、

ネットに通信をおこなうモジュールの構成です。

 

部品全体

 

 

 

 

 

 

 

 

 

 

 

 

2.ifttt

 

iftttとは、

ネットに「到達した情報」に対し、「何かの処理」をするサービスです。

「18:30分になったら、LINEに通知する」

インターネットに接続をする家電やガジェットが、

何か判断をして実行するためのサービスです。

 

通信モジュールから情報が来たら、SwitchbotのJyoshitsuのボタンを押す設定です。

 

 

 

 

 

 

 

 

 

 

3.除湿機がポチッとスイッチオンになる。

壁のコンセントもカチッとONになります。

 

スマートハウス

家の中のいろいろな家電が、環境(時間・気温・室温)で制御ができます。

自分は、那覇の住まいを意識することなく、東京と往復できるようになりました。

 

不在時でも、湿度の維持はもちろん、夜になると防犯のために(在宅として)照明をつけたり

いろいろな制御を自動化しています。

 

これが、もっともっと簡単にできたら良いのですが、教材を考えています。

2 Responses

  • 初めまして。
    ESP32用の3gimライブラリを何を用いていますか?

    • 返信遅くなりました。

      ESP32の場合、ハードウェアシリアル関連で3GIMライブラリをインクルードした際に、エラーが出てしまい
      修正に時間を要しそうでしたので、3GIMライブラリを使用せず、コマンド通信としました。
      以下、汚いのですが、ソースです。

      // WIFIとBLYNK、DHT温度湿度センサーの読み込み、ESPのスリープ(省エネ)設定
      #include
      #include
      #include “DHT.h”
      #include “esp_deep_sleep.h”

      // 3GIM格安SIMを使った通信モデムの設定。家のネット環境が停止した際の非常用。月480円のSIM。
      unsigned long Baudrate_serialMonitor = 9600; //シリアルモニタの通信速度
      unsigned long baudrate_3gim = 9600; //3GIMとの通信速度  $YB 9600 等で設定

      HardwareSerial Serial1(2);

      //#define ioSerial Serial // USB Serial port(not Serial)
      //#define a3gSerial Serial1 // Use serial port

      //BLYNKのAPI PASS
      const char auth[] = “********”;
      //WiFI設定
      const char ssid[] = “********”;
      const char pass[] = “********”;

      //3GIMのモデム電源のON/OFF
      const int powerPin = 5; // 3gim power pin(If not using power control, 0 is set.)
      int len;
      int one_sec = 1000;

      // BLYNKのAPI、アプリを使用する
      #define BLYNK_PRINT Serial
      void process();

      // 気温と湿度センサー
      #define DHTPIN 23 // 使用するGPIOピン ESP32の23PIN
      DHT dht(DHTPIN, DHT11); //DHT11という種類設定
      BlynkTimer timer ;

      // IFTTTへの送信API
      String IFTTT_HOST = “$WG https://maker.ifttt.com“;
      String IFTTT_URI1 = “/trigger/nahatemp/with/key/********”;
      String IFTTT_URI2 = “/trigger/naha70jyoshitsu/with/key/********”;
      String IFTTT_URI3 = “/trigger/naha80jyoshitsu/with/key/********”;
      String IFTTT_URI4 = “/trigger/nahaoffjyoshitsu/with/key/********”;

      void setup() {
      while (!Serial1);
      dht.begin();
      Serial.begin(Baudrate_serialMonitor);
      Serial1.begin(baudrate_3gim);

      esp_deep_sleep_pd_config(ESP_PD_DOMAIN_RTC_PERIPH, ESP_PD_OPTION_OFF);
      esp_deep_sleep_pd_config(ESP_PD_DOMAIN_RTC_SLOW_MEM, ESP_PD_OPTION_OFF);
      esp_deep_sleep_pd_config(ESP_PD_DOMAIN_RTC_FAST_MEM, ESP_PD_OPTION_OFF);
      esp_deep_sleep_pd_config(ESP_PD_DOMAIN_MAX, ESP_PD_OPTION_OFF);

      Serial.println(“start…”);
      Serial.println(“please wait a moment…”);
      pinMode(powerPin, OUTPUT); digitalWrite(powerPin, HIGH); delay(100);
      digitalWrite(powerPin, LOW);

      //Welcome to 3GIMが表示されるまで待機
      String str;
      do {
      while (!Serial1.available());
      str = Serial1.readStringUntil(‘\n’);
      Serial.println(str);
      } while (str.indexOf(“3GIM”) < 0); Serial.println("Connected"); } void sendEnv() { delay(2000); float temp = dht.readTemperature(); float hum = dht.readHumidity(); if (isnan(temp) || isnan(hum)) { Serial.println("Failed to read from DHT sensor!"); return; } Blynk.virtualWrite(V6, temp) ; Blynk.virtualWrite(V5, hum) ; Serial.println("Temperature: " + String(temp) + "C Humidity: " + String(hum) + "%"); RequestToIFTTT("?value1=NAHA%20temp_humi&value2=" + String(round(temp)) + "&value3=%20" + String(round(hum))); if (hum > 80 ) {
      RequestToHishitsudo(“?value1=NAHA%20temp_humi&value2=” + String(round(temp)) + “&value3=%20” + String(round(hum)));
      }
      else if (hum > 70 ) {
      RequestToShitsudo(“?value1=NAHA%20temp_humi&value2=” + String(round(temp)) + “&value3=%20” + String(round(hum)));
      }
      else if (hum < 60 ) { RequestToShitsudooff("?value1=NAHA%20temp_humi&value2=" + String(round(temp)) + "&value3=%20" + String(round(hum))); } } void loop() { Blynk.run() ; delay(2000); // DeepSleepに入る Serial.println("Go to sleep..."); unsigned long tm = millis(); while (millis() - tm < 35000) { while (Serial1.available()) { char c = Serial1.read(); Serial.print(c); } } // delay(one_sec * 3600); delay(one_sec * 60); } // IFTTTにリクエストを送る void RequestToIFTTT(String param) { /* Serial.print("Initializing.. "); if (a3gs.start(DHTPIN) == 0 && a3gs.begin(0, baudrate_3gim) == 0) { Serial.println("Succeeded."); } */ // delay(25000); // ウェイトを持たせる Serial.println("httpGET() requesting.. "); Serial.println(IFTTT_HOST + IFTTT_URI1 + param); Serial1.println(IFTTT_HOST + IFTTT_URI1 + param); } void RequestToShitsudo(String param) { /* Serial.print("Initializing.. "); if (a3gs.start(DHTPIN) == 0 && a3gs.begin(0, baudrate_3gim) == 0) { Serial.println("Succeeded."); } */ // delay(25000); // ウェイトを持たせる Serial.println("httpGET() requesting.. "); Serial.println(IFTTT_HOST + IFTTT_URI2 + param); Serial1.println(IFTTT_HOST + IFTTT_URI2 + param); } void RequestToHishitsudo(String param) { // delay(25000); // ウェイトを持たせる Serial.println("httpGET() requesting.. "); Serial.println(IFTTT_HOST + IFTTT_URI3 + param); Serial1.println(IFTTT_HOST + IFTTT_URI3 + param); } void RequestToShitsudooff(String param) { // delay(25000); // ウェイトを持たせる Serial.println("httpGET() requesting.. "); Serial.println(IFTTT_HOST + IFTTT_URI4 + param); Serial1.println(IFTTT_HOST + IFTTT_URI4 + param); }

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

CAPTCHA