ESP8266を使ったホームセキュリティ
ESP8266を触って半年ぐらい経過するけど単機能での検証は結構やってきた。改めて言うのもなんだけど、このESP8266は価格の割にはやっぱりスゴイなと思う。ESP32シリーズが主流になっている今、ブルートゥースがないとか性能面では劣るけど、工夫次第では今でも現役なのは間違いないと思う。
Arduino、RaspPiのマイコンを触れるにあたって、当初色々やりたいことがあった。
- 「ソーラーパネルの電力測定」から始まる「自宅の電力消費量のモニタリング」
- 「ウエラブルセンサー」をもちいた「バイタルサイン、ボディサインの取得と管理」
- 「環境センサーとWebプログラム」を用いた「環境センシング」「ホームセキュリティの構築」
- マイコンとスマートフォンの連携(BT、BLE、Wifiなどを用いたアプリ開発)
- 自動ロボットの製作(ドローン、自律制御ロボットなど)
1は、ある程度目的を達したしたかな。データの活用は、まだ考察中ですけど
2は最近では、パルスオキシメーターを考察してみた。いま、心電図センサーが中国から配送中で、これもまた記事にしたいと思う。
3は記事にはしてないんだけど、PM2.5赤外線ダストセンサーモジュールM501Aと温度・湿度・気圧センサーBME280を用いた環境計測機をつくって外気の状態を記録している。
というわけで、次はホームセキュリティということで取り掛かかりました。
ホームセキュリティの要件
人感センサーで音を鳴らすとか、単機能ではつまらない。まずは欲しい機能をあげてみた。
- 人感センサーによる監視
- 温度・湿度センサーによる室内環境のモニター
- 照度センサーになる室内の明度モニター
- 赤外線リモコンによる室内機器(TV・照明・エアコン)の操作
- 圧電ブザーによる警報発報
- アレクサとの連携
- 異常時ラインへの通知機能
- ブラウザによる操作
一応、このくらいあれば元を取った感がでるのかなと思う。
赤外線リモコンはセキュリティには必須ではないけど、スマホからの家電操作ができれば長期不在の照明点灯とかできるので便利かもと思った。
4はアレクサから赤外線リモコンを使った家電操作でおまけ機能。ESP8266から情報を引きだしたり、与えたりするのは7によるWebベースで行います。SPIFFにCSSとHTMLを置いてJavaScript・JQueryを用いて制御と考えています。ちなみに僕はJavaScriptはあんまり使ったことありませんw。
とりあえず、ここに挙げた機能は、いろいろなブログで紹介されていて単機能としてはすべてESP8266で実現可能なのは確認できています。なにがネックかというと様々なライブラリを使ってコーディングしていくことになると思うんですが、ESP8266のスペック内でできるかどうかということです。そこを検討してみたいと思います。
人感センサー(SB412・AM312)によるセンシング
人感センサーには以前に紹介したにはマイクロ波ドップラーで壁の向こうでも反応するRCWL-0516もあります。
部屋の外でも反応するし動作電圧が4V~と少々ESP8266では使いにくいです。というわけで、3.3Vでも動く、毎度おなじみ焦電型人感センサーを使います。
秋月さんで販売しているSB412は反応持続時間(HIGH時間)が調整可能なもの。尼やAliespressのAM312は2.3秒固定のもの。秋月さんとこのデータシートをみてもらえばわかると思います。ちなみに反応時間はESP8266側で操作するので短い方が使いやすいです。SB412でも最短で使います。
また、データシートより反応範囲が角度で100度以上とあります。感覚では120度程度なので三角のケースに入れて3つつければ360度カバーできます。ですが…地味にこのセンサーが高価(尼500円、アリ300円)なので、まずは正面1つでやってみます。
単機能トライアルとして、SSRと人感センサーで運用してみました。
ESP8266とは12ピンへ接続しておきます
温度・湿度センサー(DH11)によるセンシング
温度湿度センサーにもいろいろあります。
- I2C接続のBMP280・BME280系の大気圧も測れるやつ。BMPは湿度が測れない。
- DH系(DH11・DH12)の温度・湿度計。DH12のほうが精度が高い分お高め
- サーミスタによる温度計。ADCが必要(ESP8266にはとりあえず1チャンネルある)
BME280とサーミスタでの計測は当ブログでも以前紹介しました。
DH11は測定部が外部に露出しやすく設置しやすそう。ほかのセンサーでI2Cの利用予定もない(1つだけならSDLとSCAの2pinを使ってしまうため)。ADCは照度センサー(CDS)での利用を想定しています。2つ以上アナログセンサーを使うとなると、ADCの追加が必要となるのでDH11を採用しました。
DH11は13ピンへ接続しておきます
照度センサー(CDS)によるセンシング
照度センサーは
- CDS
- フォトダイオード(フォトトランジスタ、ソーラーパネルもこの一種)
この二つぐらいしか思いつきません。両方ともアナログセンサーですのでESP8266のADCは必然的にこれに使われます。手元にCDSがあり安価なことから、こちらを選択しました。欠点といえば固定しにくいことでしょうか?素子を固定する部品を3Dプリンタで作りたいですが、そもそもが小さいので難しいです。
昔、ラズパイでADS1115検証時に用いたCDSを流用します。ADCはESP8266のものを使います。ちなみにこのADCの性能は分解能10bit(1024階調)の0~1Vでの検出とのことです。おそらくですが、ESP8266に供給する電源電圧の監視用なのだと思います。でも今回はCDSで使います。
[2020-09追記]
電源電圧の監視用書きましたが、どうやら特別な回路なしでコードから電源電圧を取得できるようです。その場合、内臓ADCは使えなくなるようです。
ESP8266に接続するときは分圧して0-1Vに収まる範囲でESP8266のADCに接続します。ちゃんと分圧(100kΩと47kΩで分圧しました)しないと壊れますから注意です。アナログデータが出力されますので自分の間隔で明るい、薄暗い、暗い、真っ暗などの閾値を計測しておきます。
1 2 3 4 |
//閾値 const static uint16_t CDS_BRIGHT = 870; // <=870 明るい const static uint16_t CDS_DIM = 500; // 500<870 薄暗い const static uint16_t CDS_DARK = 200; // 200<500 暗い |
感覚でこのくらいで定義しときました。
接続はADCピンにつなぎます
4個の赤外線LEDの接続
多機能リモコン機能を持たせるため赤外線LEDも接続します。1個だと一方向にしか照射できないので4つ装備したいと思います。注意点は赤外線LEDは意外に消費電力が多いです。順方向電圧(VF)が一般のLEDよりも低いです。赤外線はVF=1.35Vで普通のLEDはVF=3.5V程度です。ちなみに紫外線LEDはVF=5V程度とのことです。赤外線LEDはちゃんと電流を流さないと受信されません。一般的に50-100mAとのことですのでVF=1.35V 電源電圧3.3V電流値100mAで抵抗を計算すると大体20Ωとなります。抵抗の持ち合わせが27Ω(75mA)か10Ω(190mA)しかなかったので、普通ならば27Ωを選ぶんですが、常時点灯ではないので10Ωを選びました。定格範囲なら27Ωを選びましょう。
並列で一個200mA程度流れるので800mAをドライブしなければなりません。一般的なトランジスタ2SC1815のコレクタ電流は150mAで全然足りないので、パワーMOS-FETをつかいます。手元に数年前に購入した2SK4017がありましたのでデータシートを見てみたところ、これ4V駆動なんですね。3.3Vで期待するドレイン電流が流れてくれるのか心配です。
データシートをみると、一応3.3Vドレインソース電圧で3.3Vゲートソース電圧の時に4A(4000mA)は流れてくれそうです。念のため、ブレッドボードで仮組して点灯確認(赤外線カメラ)し、点灯状態で消費電力を確認しておきました(実測700mA程度)。実際はパルスでの発光となるので大丈夫そうです。
組んでから気づいてしまいましたが、考えなければならないのがレギュレーターの容量です。AMS1117を使った定番商品で5V->3.3Vを作っていました。
このレギュレータは最大800mAまでですので、ESP8266やら色々つかうと赤外線送信時に不安定になる可能性があります。
素人の浅はかな考えで組んでしまってから気づいてしまったのですが、赤外線LEDは5Vでドライブしたほうが良かったですね。そうすれば、後でLEDを増やすことも簡単でしたし、LEDの制限抵抗も電源電圧5V VF=1.35Vで計算すると22Ωで100mAでよかったと思います。2号機の時の宿題としておきます。
仕方がないので、おまじない的に大き目なコンデンサを入れてごまかしましたw。落ちるとか不安定になるとかは今のところはなさそうです。ESP8266とは4ピンに接続しておきます。
[追記2020-6-24]
4つの点灯回路で電源5Vで、直列を混ぜてやってみました。ブレッドボード上でのテストも問題なさそうですし電流量も200mA程度と思います。
上の並列回路だと抵抗1つあたり電圧が1.95v(3.3v-1.35v)、電流は10Ωで190mA程度なので、抵抗の消費電力は0.37wとなり使ってる金属皮膜抵抗の1/4W=0.25wを超えちゃってます。常時点灯じゃないので大丈夫かと思いますが1/2W抵抗を使った方がいいです。
この直列回路だと、抵抗の電圧は2.3v(5v-1.35v×2)、電流は22Ωで100mAなので、抵抗の消費電力は0.23wでギリギリ収まります。常時点灯じゃないところを考えて、まだこっちの方がいいかなと思います。
とりあえず、長くなりそうなのでいったんここで「その①」を閉じます。続きは「その②」で