IoT(Idol of Thing)でRasPiに千早さんもどきを宿らせる

f:id:crssnky:20180710221717p:plain
はい。
そんなことはみなさんご存知でしょうね。

今年から一人暮らしなので、お部屋ではやりたい放題なのでは?!と思い、1年以上買って寝かせてたRasPi3を取り出しました。
イマイチ使いみちが見つから無かったのですが、ここらでいっちょRasPiならではのことに挑戦していきます。

注意:技術の説明じゃないので、こんなアイデアどう?ってスタンスで見てください

作りたいのはこちら f:id:crssnky:20180710222151p:plain
こんな感じでですね、自宅に入ったら「おかえりなさい」と声をかけてもらえるシステムですね。

センサー

センサーはドーム型の人感センサー、
"HC-SR501"
を使います。(Amazonとか秋月でご参照ください...)
f:id:crssnky:20180711225930j:plain
こんな感じで自室ドアに貼り付けます。1Kなので自室ドアで良いんです。
こいつには、電源・GND・信号の3つの端子があります。単純でありがたいですね。
また、センサーが反応してから次にアクティブになるまでの間隔と、反応強度を変更する可変抵抗も付いています。
ご自分の気分で調整してください。

配線

諸々の配置の関係で、RasPi3は逆側の壁際に設置してます。
そのため、5m近い長さの線が必要になりました。
自作するしかねぇ! f:id:crssnky:20180711231709j:plain
というわけで、某電気街で買ってきました。圧着ペンチはAmazonだけど。
"エンジニア 精密圧着ペンチ オープンバレル端子用 PA-20"

頑張ることもなく、3色の線が完成です。
f:id:crssnky:20180711232229j:plain
配線しましゅ。 f:id:crssnky:20180711232432j:plain
これでハードウェアはOKですね。

プログラム構成

後々の機能拡張を見据え、WebからRasPiを制御したいと思い、
I/Oが制御できる環境を探しました。
それがこの、Pythonで動くWebフレームワーク「bottle.py」です。
売り文句として、

  • 軽い
  • 早い
  • 単一ファイルのimport(pipしなくてもいい)(pip版もある)
  • 依存関係ない

らしいです。 これを使ってWebのViewerからI/Oの制御までを行います。
今回で言えばこんな感じ f:id:crssnky:20180714002244p:plain
ってなんの説明にもなってない画像ですね。
とりあえず、Pythonのコード内の時間とかで制御する時の変数をWebから書き換えるってことを今回はやらせていってると思ってもらえれば。

f:id:crssnky:20180714013108p:plain
これ実際のコードです。汚いけど見られてもまずいものはないはず。
テンプレートエンジンだったり、CSSなどのファイルがキッチリロードできるようにだったり、http通信のモジュールだったりをimportしています。
また、時間による動作はapschedulerBackgroundSchedulerを使っています。これにより、cron的な日時に合わせて動作を行うことができます。

書いてはいなかったですが、起床アラームの機能も付与しており、"Alerm"系で表しています。
AlermConf, WelcomeBacktimeConfでは、現在設定されている時間を渡しています。
見た目はこんな感じ f:id:crssnky:20180714015049p:plain
RasPiは良いですね。AppleBonjourが入っていれば、ローカルのRasPiに対してraspbery.localでIPから代替できますから。
それは置いといて、こんな感じでViewerの方も作りました。
自分しか使わないので、CSSも無しです。
渡された現在設定の時間を表示し、代わりに新たに設定したいものを渡せるようにしています。
Python側でPushされた更新したい時間を受け取り、内部変数を書き換えてスケジューラーを更新することで完成します。

というわけでできたものがこちら