人感センサーとりあえず購入してみたけど使い道がないので考えてみた。
これで自分がデスクにいる時の時間を測れそう。
離席時間とか、どんだけサボってるか汗 図ったら反省材料になるのかもしれない。
こちらの方のスクリプトなどを参考にさせていただきました。
Contents
ラズパイ2とHC-SR501配線
温度湿度センサーを接続したままでそのままシステム起動したまま配線します。(ホントはいけないのかもしれない。)
- GND:6番(ブレッドボードからとる)
- Data:12番 BCM 18 (PWM0)
- 電源:2番:5V, 4番:5Vのいずれか
アイコンでは電源とアースが逆のようだけど(製品が違うのかもしれない)上から見て実際は左がアース、右が電源
fritzingでHC-SR501のアイコンが見つからなかったので下記の回路図をダウンロードしてコピーしました。
HC-SR501の仕様
仕様書が以下にあります。
https://www.mpja.com/download/31227sc.pdf
感知設定
裏返して調整ネジを下向きにした、
- 右側:Time Delay 感知間隔 右に回すと反応が遅くなる。左だと速くなる。
- 左側:Sensitivity 感知感度だと思う。右に回すと敏感かな?
あと、ジャンパーピンもあって、Repeatにしたけど変わり無いようでした。
ラズパイ2で人感センサー感知してみる
sudo su #rootになる echo 18 > /sys/class/gpio/export #gpio18 有効にする #/sys/class/gpio/の中にgipo18のディレクトリができる。 echo in > /sys/class/gpio/gpio18/direction
これでGPIO18が使えるようになったみたい。
cat /sys/class/gpio/gpio18/value
センサー部分に手をかざすと「1」、離すと「0」こういう反応がでた。
動作確認OK!
今はやらないけど無効にする方法
echo 18 > /sys/class/gpio/unexport
pythonのスクリプトちょっと自作
感知させるスクリプトを参考にして改造したスクリプト。みなさん定期的に取得してましたが、muninが定期的に取得してくれるのでwhileの部分を外しました。
#!/usr/bin/env python
#-*- coding: utf-8 -*-
import RPi.GPIO as GPIO
SENSOR_PIN = 18
GPIO.setmode(GPIO.BCM)
GPIO.setup(SENSOR_PIN, GPIO.IN)
print GPIO.input(SENSOR_PIN)
chmod 755 motion.py
とりあえずrootの状態で上記を実行すると、
./motion.py
「1」「0」が出力される。
ただ、感度がいまいち曖昧かもしれない。調整とセンサーの固定が必要。
一応うまくいったので、/usr/local/binにコピー
sudo cp motion.py /usr/local/bin/
muninプラグイン作成
こちらを参考にmuninプラグインを作成してみました。(サイト無くなっちゃった(泣))
sudo vim /usr/share/munin/plugins/motion
#!/bin/sh #%# family=auto #%# capabilities=autoconf GETNUM=`python /usr/local/bin/motion.py` if [ "$1" = "autoconf" ]; then if [ -n ${GETNUM} ] ; then echo yes exit 0 else echo no exit 0 fi fi if [ "$1" = "config" ]; then echo 'graph_title Motion sensor' echo 'graph_args -r --lower-limit 0' echo 'graph_vlabel work' echo 'graph_category motion' echo 'total.label Ran' echo 'total.min 0' echo 'total.draw LINE2' echo 'total.type GAUGE' exit 0 fi echo "total.value $GETNUM";
本当はラベルを日本語にしたかったけど、”人感”とか書いても文字化けした。
chmod 755 /usr/share/munin/plugins/motio
動作するかテストする
/usr/share/munin/plugins/motion autoconf
yes
/usr/share/munin/plugins/motion config
graph_title Motion sensor graph_args -r --lower-limit 0 –upper-limit 1 graph_vlabel work graph_category motion total.label Ran total.min 0 total.draw LINE2 total.type GAUGE
/usr/share/munin/plugins/motion
motion.value 1
このように出力されます。
シンボリックリンク
sudo ln -s /usr/share/munin/plugins/motion /etc/munin/plugins/motion
実行ユーザー(root)追加
sudo vim /etc/munin/plugin-conf.d/motion
[motion] user root
munin再起動
/etc/init.d/munin-node restart
とりあえずここまでできたけど、muninは5分おきにデータを取得してグラフ化するので
このままでは、着席時にグラフを1にして離席時に0にし、24時間の合計を計算するのはできない。
このような表示になりました。デスクに座ってる時は「1」、離席しているときは「0」
muninは分おきにcronやるのでタイミングがずれると就業してても離席状態になるみたい。
やっぱりwhileで定期的に確認して何処か別の場所に結果を保存、定期的にmuninで保存したものを表示させるようにしなければ無理っぽい。
気が向いたらやってみます。
コメント
ラズパイで人感センサを使ってみたいと思い,
この記事を拝見いたしました.
そこで, お尋ねしたいのですが,
この使用されたセンサでは, どれくらいセンサから離れれば, 出力が0になるのでしょうか.
1mくらいでしょうか.
よろしくお願いします.
HiKat様
コメントありがとうございます。
今は分解してしまいましたので(汗)実際に測ることはできませんが、たしか1Mほどだと思います。
正確な距離をお知らせできなくてスミマセンm(_ _)m
どうもありがとうございます.
センサ自体もそんなに高くないのでとりあえず試して見ようと思います.
あと, 余計なお世話かもしれませんが,
椅子のうえに重さセンサ仕込んだ座布団でも敷いても測れるのかなとも思いました (笑
重さセンサいいですねぇ♪
本当は集中力センサとかあればどのくらい集中して仕事しているか分かるんですけどね。
いつか出来るのかしら?