IoT(Idol of Thing)でRasPiに千早さんもどきを宿らせる
はい。
そんなことはみなさんご存知でしょうね。
今年から一人暮らしなので、お部屋ではやりたい放題なのでは?!と思い、1年以上買って寝かせてたRasPi3を取り出しました。
イマイチ使いみちが見つから無かったのですが、ここらでいっちょRasPiならではのことに挑戦していきます。
注意:技術の説明じゃないので、こんなアイデアどう?ってスタンスで見てください
作りたいのはこちら
こんな感じでですね、自宅に入ったら「おかえりなさい」と声をかけてもらえるシステムですね。
センサー
センサーはドーム型の人感センサー、
"HC-SR501"
を使います。(Amazonとか秋月でご参照ください...)
こんな感じで自室ドアに貼り付けます。1Kなので自室ドアで良いんです。
こいつには、電源・GND・信号の3つの端子があります。単純でありがたいですね。
また、センサーが反応してから次にアクティブになるまでの間隔と、反応強度を変更する可変抵抗も付いています。
ご自分の気分で調整してください。
配線
諸々の配置の関係で、RasPi3は逆側の壁際に設置してます。
そのため、5m近い長さの線が必要になりました。
自作するしかねぇ!
というわけで、某電気街で買ってきました。圧着ペンチはAmazonだけど。
"エンジニア 精密圧着ペンチ オープンバレル端子用 PA-20"
頑張ることもなく、3色の線が完成です。
配線しましゅ。
これでハードウェアはOKですね。
プログラム構成
後々の機能拡張を見据え、WebからRasPiを制御したいと思い、
I/Oが制御できる環境を探しました。
それがこの、Pythonで動くWebフレームワーク「bottle.py」です。
売り文句として、
- 軽い
- 早い
- 単一ファイルのimport(pipしなくてもいい)(pip版もある)
- 依存関係ない
らしいです。
これを使ってWebのViewerからI/Oの制御までを行います。
今回で言えばこんな感じ
ってなんの説明にもなってない画像ですね。
とりあえず、Pythonのコード内の時間とかで制御する時の変数をWebから書き換える
ってことを今回はやらせていってると思ってもらえれば。
これ実際のコードです。汚いけど見られてもまずいものはないはず。
テンプレートエンジンだったり、CSSなどのファイルがキッチリロードできるようにだったり、http通信のモジュールだったりをimportしています。
また、時間による動作はapschedulerのBackgroundScheduler
を使っています。これにより、cron的な日時に合わせて動作を行うことができます。
書いてはいなかったですが、起床アラームの機能も付与しており、"Alerm"系で表しています。
AlermConf
, WelcomeBacktimeConf
では、現在設定されている時間を渡しています。
見た目はこんな感じ
RasPiは良いですね。AppleのBonjourが入っていれば、ローカルのRasPiに対してraspbery.local
でIPから代替できますから。
それは置いといて、こんな感じでViewerの方も作りました。
自分しか使わないので、CSSも無しです。
渡された現在設定の時間を表示し、代わりに新たに設定したいものを渡せるようにしています。
Python側でPushされた更新したい時間を受け取り、内部変数を書き換えてスケジューラーを更新することで完成します。
というわけでできたものがこちら
音量小さいですが、デモ動画です。
— croMisaP (@croMisa) 2018年6月17日
ドアを開いて人感センサーが反応すると、千早さんが「おかえりなさい」と声をかけてくれます pic.twitter.com/fmBjkIe20k
帰宅したら千早さんに「おかえりなさい、プロデューサー」って言ってもらえる生活最高かよ
— croMisaP (@croMisa) June 18, 2018