【自作】洗濯物 取り込み忘れ防止機器

目次

 

はじめに

WIFIモジュールを用いて、洗濯物 取り込み忘れ防止機器を作成します。

仕組みとしてはWIFIルーターWIFIモジュールの信号強度(RSSI)の値からWIFIモジュールが屋外にあるか、屋内にあるか判定します。

屋内の場合はRSSIが小さく、屋外の場合はRSSIが大きくなります。

      f:id:nandechang:20220319191256p:plain

 

取得したRSSIはWIFIモジュール内で屋内外の判定を行い、屋外であれば信号を出力します。出力した信号はWIFIルーター、Webhooks、LINEを経由してスマートフォンへ通知する仕組みとなっています。

Webhooks、LINEの設定はIFTTTを用いて、行っています。

f:id:nandechang:20220319211520p:plain

使用したもの

・WIFIモジュール:ESP-WROOM-02 ピッチ変換済みモジュール

・降圧レギュレータ:AMS1117-3.3  DC-DC降圧コンバータモジュール

WIFIルーター

・モバイルバッテリー:CP-EL(メーカー:SONY) 電池容量 2000mAh

 

WIFIモジュールarduinoIDEで開発可能な事と入手しやすいため、

ESP-WROOM-02を用いてます。

 

 

回路図

f:id:nandechang:20220416142340j:plain

IC2:AMS1117-3.3 DC-DC降圧コンバータモジュールで5V→3.3Vへ変換しています。

このモジュールにはOUTピンーGND間に22uFのコンデンサが実装されています。

また、動作確認用のLEDも実装されています。

IC1周辺回路はESP-WROOM-02のデータシートの回路図を参照して回路を構成しています。

IO16ピンーRSTピン間のスイッチSW1はDeep Sleepモード切り替え用のスイッチになります。

IO0ピンーGND間のスイッチSW2は書き込みモード、フラッシュモードを切り替えるスイッチです。

消費電力を抑えるため、通常起動時はDeep Sleepモードを用いています。

そのため、IC1へのプログラム書き込み時、通常起動時のSW1,SW2の設定は下記になります。

  SW1 SW2
プログラム書き込み Open Short
通常起動 Short Open

 

プログラムコード

#include <ESP8266WiFi.h>
#include <time.h>

#define JST     3600*9

//ネットワーク情報
char* ssid = "********"; //””で囲まれた中にWiFiルーターssid
char* password = "*******"; //””で囲まれた中にWiFiルーターのpassword


//IFTTT情報
const char* host = "maker.ifttt.com";
const char* eventName = "*****";  // ””で囲まれた中にeventNameをいれる
const char* key = "******";  // ””で囲まれた中にkeyをいれる

 

WiFiServer server(80);//webサーバーをポート80に設定する

String header;//HTTPリクエストのヘッダーを格納する変数

unsigned long currentTime = millis();
unsigned long previousTime = 0; 
const long timeoutTime = 2000;

 

void setup(void)
{
  Serial.begin(115200);
  Serial.print("Connecting to ");
  Serial.println(ssid);
  //Wi-Fi接続を開始する
  WiFi.begin(ssid, password);
  //接続が開始するのを待つ
  while (WiFi.status() != WL_CONNECTED) {
    delay(500);
    Serial.print(".");
    yield();
  } 

  //WiFiServer server(80);で作成したサーバーを開始
  server.begin();

  configTime( JST, 0, "ntp.nict.jp", "ntp.jst.mfeed.ad.jp");

  //時刻反映を正確にするためにdelay必要
  delay(5000);
}

void loop(void)
{

  time_t t;
  struct tm *tm;
  static const char *wd[7] = {"Sun","Mon","Tue","Wed","Thr","Fri","Sat"};

  t = time(NULL);
  tm = localtime(&t);
  
  Serial.printf(" %04d/%02d/%02d(%s) %02d:%02d:%02d\n",
        tm->tm_year+1900, tm->tm_mon+1, tm->tm_mday,
        wd[tm->tm_wday],
        tm->tm_hour, tm->tm_min, tm->tm_sec);
  
  //無線の強さを取得
  long rssi = WiFi.RSSI();
  Serial.println(rssi);

  //無線の強さ かつ 時間を判定
  if(rssi<-67&&tm->tm_hour>16){        //無線の強さから屋内外判定 かつ 時間を判定
    sendifttt();            //iftttへ信号出力
  }

  //deep sleepは上限35分(36分以上は不安定になった)
  ESP.deepSleep(35*60 * 1000 * 1000, WAKE_RF_DEFAULT);

  // スリープモード移行用待機処理
  delay(1000);
}


//IFTTTへ送信
void sendifttt(){
    Serial.print("connecting to ");
    Serial.println(host);

    WiFiClient client;
    const int httpPort = 80;
    if (!client.connect(host, httpPort)) {
        Serial.println("connection failed");
        return;
    }

    client.print(String("GET ") + "/trigger/"+ eventName + "/with/key/" + key + " HTTP/1.1\r\n" +
                 "Host: " + host + "\r\n" +
                 "Connection: close\r\n\r\n");
    unsigned long timeout = millis();
    while (client.available() == 0) {
        if (millis() - timeout > 5000) {
            Serial.println(">>> Client Timeout !");
            client.stop();
            return;
        }
        yield();
    }

    while(client.available()) {
        String line = client.readStringUntil('\r');
        Serial.print(line);
        yield();
    }

    Serial.println();
    client.stop();
    Serial.println("closing connection");
}

 

WIFI通信の設定を行い、時刻とWIFI通信の強さを取得し、屋外の通信強度でかつ16時より遅い時間であれば、IFTTTへ信号を送信するようにしています。

その後は消費電力削減のため、35分間deep sleepモードへ遷移するようにしています。

 

ネットワーク情報のssid、passwordはWIFIルーターに合わせて、設定します。

IFTTT情報はIFTTTの設定に合わせる必要があります。
 if(rssi<-67&&tm->tm_hour>16)の部分は

無線の環境に合わせて-67を変更し、16はアラームを出力したい時間へ変更すると出力条件を変更できます。

deep sleepは35分までは正常動作したため、35分と設定しました。

プログラム上の設定時間の単位はμsecになるため、35*60 * 1000 * 1000としています。

 

出来上がり

・モジュール状態

f:id:nandechang:20220325182400p:plain    f:id:nandechang:20220325182714j:plain

 

・ケース組み込み

f:id:nandechang:20220325183048j:plain

 

・モバイルバッテリー+ケース組み込み

f:id:nandechang:20220325183234j:plain


・物干しへの設置状態

切断したストッキングへモバイルバッテリーと機器を収納し、

物干しへ組み込んだ

f:id:nandechang:20220325181441j:plain

 

消費電流

消費電流は機器の立ち上がりからdeep sleepへ遷移するまでは70mA~150mAを遷移しています。deep sleep時は実測値で約3mAでした。

2000mAhのモバイルバッテリーを用いた構成であると、deep sleep時だけの電流でも27.7日しか起動できない計算になります。そのため、半年くらい稼働する構成にするには5V→3.3Vへ変換している降圧レギュレータの変更、バッテリー容量の増加を行う必要がありそうです。

 

おわりに

降圧レギュレータのAMS1117-3.3DC-DC降圧コンバータモジュールはLEDが実装されていることとAMS1117-3.3の自己消費電流がデータシートでは5mA(Typ)、11mA(Max)であるため、長時間動作させるためには変更が必要になります。

次回は降圧レギュレータの変更検討について記載していきます。