【実装編】会社玄関ドアの開閉を検知してEC2のインスタンスの起動停止を行う


部品は手に入れた

手っ取り早く手に入れたかったので、Amazonで手に入るものはAmazonで仕入れました。
おそらく相場よりも少し高いんだと思うけど会社の金なので関係ないです。磁石は近所の100均で。

センサ動作確認

テスト回路を組む

とりあえずは、ホールセンサのOutputをESPr Developerのアナログ入力に入れて、コンソールログに計測値を出力するためのスケッチを作成しました。
また、回路は磁石が近づいた時にLEDを点滅させるために、13PINにLEDをつないでいます。

sample
extern "C" {
  #include "user_interface.h"
}

void setup() {
  Serial.begin(115200);
  delay(10);

  pinMode(13,OUTPUT);
  pinMode(14,OUTPUT);

  digitalWrite(13,HIGH);
  delay(500);
  digitalWrite(13,LOW);

}

void loop() {
 digitalWrite(14,HIGH);
 delay(10);
 int val = system_adc_read();
 digitalWrite(14,LOW);

 Serial.println(String(val));

 if(val == 1024){
  digitalWrite(13,HIGH);
  delay(100);
  digitalWrite(13,LOW);
  delay(100);
 }

}

特性

Amazonで購入したホールセンサでは動作せず・・・
調べてみるとホールセンサには特性があり、特性によって動作が異なるようです。とりあえず以下のホールセンサを千石電商さんで追加で購入しました。それぞれのスペックシートを見てみると概要に以下のように書かれていました。どちらも無接点スイッチに向いてると書いてます。回路的にはDN6851の方にプルアップ抵抗が入ってるくらいの違いです。

型番 概要
DN6851 DN6851は、ホール効果を利用した半導体集積回路です。特に低電源電圧で交番磁界により動作するように設計されています。各種センサ、無接点スイッチなどに好適です。
DN6952 DN6852は、ホール効果を利用した半導体集積回路です。特に低電源電圧で一方向磁界により動作するように設計されています。各種センサ、無接点スイッチなどに好適です。

計測

テスト回路のホールセンサをDN6851とDN6852、それぞれ差し替えながらコンソールの値を計測します。結果的にDN6851を使うことで目的の動作結果を得ることができました。

この時のシリアルモニタの出力値。磁石が寄るとHIGH(1024)に近くなります。

ちなみに同様の回路でDN6852だと動作せず、DN6851の様にVccとVoutの間にプルアップ抵抗(20k)を挟むと、何もしていない時にHIGHで、磁石を近づけるとLOWになる動作をしました。

理論的なところは理解できていませんが、結果オーライとします。

データ送信

WiFi接続

先程のスケッチにWiFi接続のコードを足して、センサでの取得値を記録します。
記録にはAmbidata.ioというサービスを利用しました。
ドアが開いた時に「1」閉じた時に「0」を送信しています。

ほぼ毎日同じ時間に出社して帰宅しているので、ノコギリの刃の様な形になっているのが分かるかと思います。間が飛んでるところはメンテしててデータが取れてません。

コードを載せたいのですが、途中のコードが残っていなくて現在改修中のコードしか手元にありません・・・【実稼働編】では載せられるかと思うのでそれまでお待ち下さい。

次回【テスト稼働編】では、DEEP SLEEPモードを使った省エネ化に触れたいと思います。