距離センサで防犯システムをDIY


#距離センサで防犯システムをDIY
##やりたいこと
犯罪都市千葉県で自分の家・家族を守り抜きたい。
しかし私にはALS●Kと契約するお金がない。そう、自分で守るしかないのだ。
そう、留守中にセンサの前を人が通り過ぎたら、slackで知らてくれるシステムを自分で作るしかないのだ。
##用意したもの
ESP-WROOM32(ESP32-DevKitC)
距離センサGP2Y0E03
RaspberryPi
##やり方
ESP-WROOM32に距離センサを接続し、ものの接近を監視する。
接近を検知したらRaspberryPiにHTTP POSTする。
HTTP POSTを受けてRaspberryPiはSlackに投稿する。
不審者を捕まえる or 通報する。
###システムイメージ
![system.png](https://qiita-image-store.s3.amazonaws.com/0/140055/5c1f90a2-3f9a-06b0-899d-789f54d3c082.png)
##作る
###ESP-WROOM32とGP2Y0E03を接続する
GP2Y0E03はI2C通信でデジタル出力できるのでESP-WROOM32とはI2Cで接続する。
ESP-WROOM32のI2C通信のやり方がよく分からなかったため、
esp-idf/examples/peripherals/i2c/のREADME.mdを確認した。
>•Pin assignment:
>◦slave : 
>◾GPIO25 is assigned as the data signal of i2c slave port
>◾GPIO26 is assigned as the clock signal of i2c slave port
>
>◦master: 
>◾GPIO18 is assigned as the data signal of i2c master port
>◾GPIO19 is assigned as the clock signal of i2c master port

今回はEWP-WROOM32をmasterにしたいので、GPIO18をdata signal、GPIO19をclock signalとして使用する。
ESP32-DevKitCの回路図を確認すると次のようになっている。
![esp32_ds.png](https://qiita-image-store.s3.amazonaws.com/0/140055/df0597cf-7316-f2cc-222c-af310b69fa2a.png)
またGP2Y0E03のアプリケーションノートは次のようになっている。
![gp2y0e03.png](https://qiita-image-store.s3.amazonaws.com/0/140055/591fa926-0651-a2fb-ec89-7b868a5d5913.png)
![table.png](https://qiita-image-store.s3.amazonaws.com/0/140055/2c2fdac6-7cdf-c04b-1f56-b2b021670b08.png)
そのため、接続は次のようになる。
![esp_gpy.png](https://qiita-image-store.s3.amazonaws.com/0/140055/2cc917eb-c546-7832-1172-26956ebc489d.png)
####完成
ドコモさん、ごめんなさい。
![esp32.png](https://qiita-image-store.s3.amazonaws.com/0/140055/d44b33fb-23cb-9111-0107-8cd5300be199.png)
###検出条件を決める
####センサで物体との距離を取得するプログラムの作成
ソースコード
[esp/i2c/main/i2c_example_main.c](https://github.com/mitazet/esp/blob/master/i2c/main/i2c_example_main.c)
※ビルドには[esp-idfの環境](https://qiita.com/mitazet/items/8a4c36bd9e1e45f463fd)が必要
####人が通るときの距離
こんな感じの廊下に設置してみた。
![room.png](https://qiita-image-store.s3.amazonaws.com/0/140055/55b6f02b-d9c6-8a20-7daf-6dcbcd169ae7.png)
プログラムで人が前にいるときの距離を測定する。
![sensor_val.png](https://qiita-image-store.s3.amazonaws.com/0/140055/3e01cf62-6b75-1c3c-4bde-fd62afb368cc.png)
63cmから変化があれば、人が通過したとみなすことができそうだが、
とりあえず__40cm__以下を人が通る時の距離としよう。
###防犯システムに仕上げる
####人の検知とHTTPリクエストをするプログラムの作成
#####ESP-WROOM-32側ソースコード
[security_system/main](https://github.com/mitazet/esp/tree/master/security_system/main)
sensor.c : センサーで距離を測定する
http_request.c : Wifiに接続し、HTTP POSTを行う
main.c : 100ms毎に距離を測定し、40cmを下回った場合にRaspberryPiにHTTP POSTする
※ビルドには[esp-idfの環境](https://qiita.com/mitazet/items/8a4c36bd9e1e45f463fd)が必要
#####RaspberryPi側ソースコード
RaspberryPiはHTTPリクエストを受けられるように事前にWebサーバーにしておく。
[index.php](https://github.com/mitazet/php_code/blob/master/index.php) : HTTP POSTリクエストを受け、slack投稿プログラムを呼び出す
[slack_sec.py](https://github.com/mitazet/python_code/blob/master/slack_sec.py) : slackerを利用しslackに投稿する
##テスト
センサの前を通りすぎてみた。
![6D9E1E93-91C8-42F1-ACFF-44D401E82FE8.png](https://qiita-image-store.s3.amazonaws.com/0/140055/3a292068-b1a4-b82d-bd42-c6b14ca4c2fa.png)
通知が来た!!
![7A860124-FE62-4501-B611-DC74D0B215F3.png](https://qiita-image-store.s3.amazonaws.com/0/140055/411b706d-faa9-8d68-d63c-0daabbd9d9a7.png)

テスト成功‼︎
##最後に
これを留守中に起動しておけば、侵入者に気づくことができる。
さらに複数個設置すればより信頼性は上がるだろう。
__侵入者をどうやって捕まえるかは今後の課題。__

##参考サイト
[technology memo](http://technology-memo.seesaa.net/article/406837556.html)
[Raspberry Pi3 で I2Cセンサーを使う](http://tuttitan.hatenablog.com/entry/2017/02/09/192926)
[WROOM-32でPCA9624PWを動かす - i2c test ](https://qiita.com/T-YOSH/items/fce3b9ae2129068b1131)
大変お世話になりました。
ありがとうございます。