ESPr Developerで人感センサを使ってみる(4)

先日より、人感センサと ESPr Developer を使った実験を続けています。

我が家のトイレに、人感センサ(EKMC1601111)とESPr Developerで作ったIoTデバイスを設置し、トイレに人が入ってきたことを検知しようとしています。

我が家のトイレには窓がなく、外光も入ってこないので、誤検知しにくい環境だと思うのですが、実験してみると、実際は人がいないにも関わらず、人がいたと誤判定されるという現象が頻繁に発生しました。

センサを取り替えても、同様な結果になるので、そもそもこのセンサは、このぐらい誤検知するものなのだと考え、プログラムで誤判定を減らすように対処することにしました。

当初は 1 のような判定方法だったのですが、これを 2 → 3 と変更することで、誤判定の発生頻度を減らしていきました。

  1. センサからの信号を常時監視し、一定期間中に1度でもHighに変化すると、その期間に人がいたと判定する。
  2. センサからの信号を1秒毎にチェックし、一定期間中に1度でもHigh状態があれば、その期間に人がいたと判定する。
  3. センサからの信号を1秒毎にチェックし、一定期間中にHigh状態が合計15秒以上あれば、その期間に人がいたと判定する。

現在は 3 のプログラムで実験中で、今のところ、完全に誤判定はなくならないものの、気にならないレベルまで削減できています。

 

一方、センサの誤判定について、個体差がどの程度あるのか把握しておきたいと考え、センサを追加で3個購入しました。
3個のセンサの出力信号を、ひとつのESPr Developerに取り込み、3個の検知結果を確認・比較することで、誤判定の頻度・個体差などを調べることにしました。

回路構成は以下のとおりです。

ふたつのセンサは、回路構成が全く同じ、残りひとつは、念のため、電源電圧を5Vにして調査しました。
ついでに、磁気スイッチをトイレの扉に取り付け、それもESPr Developerに繋ぎました。
これで、3個のセンサと扉スイッチの検知結果を確認し、誤判定の状況を比較できます。

ところが、この回路で2〜3日データを取ったところ、いずれのセンサも全く誤判定しませんでした。これまでの調査内容と違います。

今回の追加実験では、ブレッドボードで回路を組んでいますが、以前からの実験回路は、ふたつとも、ユニバーサル基板で回路を作っています。

もしかして、ユニバーサル基板で回路を組む際に、どこか接続でも間違えたのではないかと思い、基板を再度見直しました。

すると、回路構成に間違いはなかったのですが、ひとつ気付いたことがあります。

ユニバーサル基板で回路を組む際に、やや小さめのケースに基板を詰め込むために、基板のおもてにESPr Developerを、裏に人感センサを取り付けています。人感センサとESPr Developerが重なって配置されており、ESPr Developerが発生する何らかのノイズを、人感センサが検知してしまうのではないか?と思いました。
さらによく観察すると、人感センサと重なっているのは、ESPr DeveloperのWiFiアンテナの部分です。ますます怪しそうです。

早速、追加で実験してみました。

ブレッドボードで組んだ実験回路は、これまで全く誤動作せずに稼働していますが、このうちのセンサひとつを、ESPr Developerの上面に移動しました。
変更したのはセンサの位置のみで、回路構成は以前から変更ありません。

これでデータ採取を継続しました。

すると、これまで誤判定は全くなかったにも関わらず、位置を変えたセンサひとつだけ、頻繁に誤判定するようになりました。ビンゴです!

トイレにデバイスを設置するために、できるだけ目立たないようにしようと思い、小さなケースに詰め込もうとしていましたが、それが原因で誤動作が頻発していたことになります。ケースについては、もう少し考え直さないといけません。

また、これまで作ってきたデバイスでは、このようなノイズの問題は起こりませんでしたが、今回のような問題は、人感センサだけではなく、他のセンサでも起こり得ます。
今後、電子工作をしていく際には、このような点にも気を付けなければいけないと思いました。