スポンサーリンク

ラズパイ2で人感センサーを使って一日の仕事時間を計りたいけど・・・未完成

スポンサーリンク

人感センサーとりあえず購入してみたけど使い道がないので考えてみた。

これで自分がデスクにいる時の時間を測れそう。

離席時間とか、どんだけサボってるか汗 図ったら反省材料になるのかもしれない。

こちらの方のスクリプトなどを参考にさせていただきました。

# はじめに 人感センサーを買いました。 蝉が好きなので、家でも蝉に鳴いてほしいと思って以下の動作をするようにしようと思いました。 **① 蝉が鳴いている** **② 人が近づくと鳴き止む** **③ しばらくするとまた鳴き始める...

ラズパイ2とHC-SR501配線

温度湿度センサーを接続したままでそのままシステム起動したまま配線します。(ホントはいけないのかもしれない。)

  • GND:6番(ブレッドボードからとる)
  • Data:12番 BCM 18 (PWM0)
  • 電源:2番:5V, 4番:5Vのいずれか

アイコンでは電源とアースが逆のようだけど(製品が違うのかもしれない)上から見て実際は左がアース、右が電源

ラズパイ2

fritzingでHC-SR501のアイコンが見つからなかったので下記の回路図をダウンロードしてコピーしました。

HC-SR501の仕様

仕様書が以下にあります。

https://www.mpja.com/download/31227sc.pdf

感知設定

裏返して調整ネジを下向きにした、

  • 右側:Time Delay 感知間隔 右に回すと反応が遅くなる。左だと速くなる。
  • 左側:Sensitivity 感知感度だと思う。右に回すと敏感かな?

WS000001

あと、ジャンパーピンもあって、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」こういう反応がでた。

WS000000

動作確認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時間の合計を計算するのはできない。

motion-day

このような表示になりました。デスクに座ってる時は「1」、離席しているときは「0」

muninは分おきにcronやるのでタイミングがずれると就業してても離席状態になるみたい。

やっぱりwhileで定期的に確認して何処か別の場所に結果を保存、定期的にmuninで保存したものを表示させるようにしなければ無理っぽい。

気が向いたらやってみます。

シェアする

  • このエントリーをはてなブックマークに追加

フォローする

コメント

  1. HiKat より:

    ラズパイで人感センサを使ってみたいと思い,
    この記事を拝見いたしました.
    そこで, お尋ねしたいのですが,
    この使用されたセンサでは, どれくらいセンサから離れれば, 出力が0になるのでしょうか.
    1mくらいでしょうか.
    よろしくお願いします.

    • go より:

      HiKat様
      コメントありがとうございます。
      今は分解してしまいましたので(汗)実際に測ることはできませんが、たしか1Mほどだと思います。
      正確な距離をお知らせできなくてスミマセンm(_ _)m

      • HiKat より:

        どうもありがとうございます.
        センサ自体もそんなに高くないのでとりあえず試して見ようと思います.

        あと, 余計なお世話かもしれませんが,
        椅子のうえに重さセンサ仕込んだ座布団でも敷いても測れるのかなとも思いました (笑

        • go より:

          重さセンサいいですねぇ♪
          本当は集中力センサとかあればどのくらい集中して仕事しているか分かるんですけどね。
          いつか出来るのかしら?