wiki:ESP-DOOR

ESPr Door Seonsor の使い方

ESP-WROOM-02 Wi-Fiモジュールとリードスイッチを搭載したドアセンサです。公共施設にあるようなトイレの個室ドアに設置することを目的に設計しました。ドアの動作によってはうまく情報が取れない可能性もありますのでご注意ください。(4.動作説明参照) また、本製品は待機時の消費電力を抑えるため、ドアの開閉時に必ずリセットがかかる仕様になっていますので本製品自体にサーバー機能を持たせて運用することはできません。センサからの情報を受け取るホストを別途用意する必要があります。


トイレの個室ドアに設置した様子。

1.電源

電源供給にはMicro USBケーブル(下図赤枠)もしくはリチウムイオン電池(下図緑枠)を使用します。その他にVin端子(下図青枠)に乾電池などの電源(3.7 V~6.0 V)をつなげることもできます。Vin端子とリチウムイオン電池用PHコネクタの間には保護用のダイオードが入っていないので同時に接続はできません。リチウムイオン電池の充電機能、低電圧検知機能はありません。

バッテリー動作時の消費電力を抑えるために電源用のLEDは搭載されていません。動作確認用のLEDがGPIO4に接続されていますので、必要に応じて光らせてください。

リチウムイオン電池は次の物を推奨します。
リチウムイオン電池900mAh
リチウムイオン電池1800mAh

2.プログラムの書き換え

プログラムを書き換えるためには別売のFTDI USBシリアル変換アダプター(5V/3.3V切り替え機能付き)が必要です。
下図のように接続してください。FTDI USBシリアル変換アダプターは3.3V動作になるようにジャンパソケットを3.3V側に接続してください。

FTDI USBシリアル変換アダプターからはESPr Door Sensorに給電しないようになっています。プログラムの書き換え時は基板本体の電源とFTDI USBシリアル変換アダプター用のMicro USBケーブルをご用意ください。
プログラムを書き換えるためにはESPr Door Sensor上のジャンパソケットをPROGと書かれた側に接続してください。書き込んだプログラムを実行する場合はRUNと書かれた側に接続してください。ジャンパソケットをどちらにも繋がなかった場合は実行モードになります。

ここではArduino IDEを使用して開発する際の設定方法を説明します。Arduino IDEにESP8266ボードの開発環境を整える方法はこちらを参照してください。
Arduino IDE 1.6.8 と ESP8266 Core for Arduino Ver 2.2.0を使用しました。(2016.06.13)
ボードの設定を下図のようにしてスケッチを書き込んでください。


3.リードスイッチ

本製品にはリードスイッチ(磁石を近づけるとONになるスイッチ)が搭載されていますが、リードスイッチ用の磁石は付属しませんので各自で用意していただく必要があります。当社での動作試験ではホワイトボードで紙を止めていた小型のネオジウム磁石を使用しました。磁石の磁極の向きは下図を参考にしてください。片側の極のみを近づけてもなかなか反応しません。

J3端子に別のリードスイッチやスイッチを取り付けることができます。(下図赤枠)

4.動作説明

本製品はトイレの個室ドアに設置することを目的に設計されています。通常時にドアが開いていて、使用時に閉じるドアに設置します。
リードスイッチに磁石が接近するとESP-WROOM-02がリセットされます。また、接近していた磁石がリードスイッチから離れた瞬間にもESP-WROOM-02がリセットされます。

動作の流れの一例を記します。
1.トイレのドアが閉じるとリセットがかかります。この時GPIO5に接続されているリードスイッチの値を読むとLOWになっています。Wi-Fiに接続してホストにドアが閉じたことを送信します。
2.情報送信後はDeepSleepモードに入り消費電力を抑えます。
3.トイレのドアが開くとリセットがかかります。この時GPIO5に接続されているリードスイッチの値を読むとHIGHになっていいます。Wi-Fiに接続してホストにドアが開いたことを送信します。
4.情報送信後はDeepSleepモードに入り消費電力を抑えます。

上記の1、3ではドアの開閉時にWi-Fiに接続して情報を送信していますが、接続から送信までには数秒かかりますので、トイレのドアのように開閉の状態が少なくとも十数秒以上続くようなドアでないとうまく情報を送ることができません。閉じている状態が数秒しか続かないドアでは情報の送信の前にリセットがかかってしまう可能性があります。

通常は閉じていて、使用中に開くようなドアの場合はリードスイッチに電流が流れる時間が長くなってしまうためバッテリーの動作時間が短くなってしまいます。

例えば、玄関ドアや家庭用トイレドアのように通常は閉じていて、かつ開いている時間が短いドアの場合は有線給電にして、閉→開の時は何もせず開→閉の時にのみWi-Fi接続をして情報を送信するなどの工夫が必要です。

バッテリーの管理IC等は搭載していませんが、代わりにバッテリーの電圧を抵抗分圧で約1/10にしたものをESP-WROOM-02のアナログ入力ピンに入力しています。ESP-WROOM-02のADCは入力電圧範囲が0~1 Vで分解能が10bitです。A/D変換された値が378だった場合、378/1023 * 1 = 0.37 Vが入力電圧です。その10倍がバッテリーの電圧ですので、バッテリー電圧は3.7Vとなります。抵抗分圧した電圧なので精度はよくありませんが、バッテリー残量のおおよその目安にすることができます。

5.サンプルスケッチ

動作確認用簡易サンプルスケッチ(GitHub)

int LED = 4;
int reed_sw = 5;

void setup() {
  pinMode(LED,OUTPUT);
  delay(10);
  if(digitalRead(reed_sw) == 0){
    digitalWrite(LED,HIGH);
      delay(100);
      digitalWrite(LED,LOW); 
  }
  else{
    for(int i = 0; i < 3; i++){
      digitalWrite(LED,HIGH);
      delay(100);
      digitalWrite(LED,LOW);
      delay(100);
    }
  }
  ESP.deepSleep(0,WAKE_RF_DEFAULT);
  delay(1000);
}

void loop() {
  

}

このサンプルスケッチではリードスイッチによるリセットが正常にかかるかを確認しています。
リードスイッチに磁石を近づけると、リセットがかかりLEDが一回短く光ります。
リードスイッチに磁石が近づいた状態から遠ざけると、リセットがかかりLEDが三回短く点滅します。
光った後はDeepSleepモードに入り次にリセットがかかるまで待機します。
このサンプルの動作が本製品の基本です。ここにWi-Fiでの通信機能などを追加することでドアセンサとして使用することができます。
Wi-Fiの通信機能を追加したサンプルが次のスケッチです。

実用サンプルスケッチ(GitHub)

このサンプルスケッチではドアが開閉するたびにホストにGETを送信します。(ドアの開閉状態とバッテリー電圧情報を送信)
ドアが開いている間はDeepSleepモードで待機します。(ドアが閉じるまで待機)
ドアが閉じている間はDeepSleepモードで待機します。(ドアが開くまで待機)

6.おまけ

どうしてもドアが開いた時にだけリセットがかかってほしい場合。C6のコンデンサを取り外すとドアが閉じてもリセットがかからなくなります。
どうしてもドアが閉じた時にだけリセットがかかってほしい場合。C7のコンデンサを取り外すとドアが開いてもリセットがかからなくなります。

Last modified 4 months ago Last modified on Jan 13, 2017 7:57:33 PM

Attachments (9)