こんにちは。前回カメラストリーミングをやったのですが、ぶっちゃけずっと動画データをインターネットに流し続けるのもなんか無駄な感じがします。そこで今回は以前に作ったカメラストリーミングを応用して人が通ったときだけシャッターを切るカメラを作ってみたいと思います。
目的
人が通ったときだけシャッターを切るカメラを作ります。
防犯や入退室チェック、ペットや野生動物の観察にも使えて割と応用がききます。
切るタイミングも変えれば一定間隔で撮影してタイムラプス動画みたいなのも作れます。
準備するもの
fswebcamのインストール
カメラキャプチャにはfswebcamというソフトを使いましょう。いつもどおり次のコマンドでインストールします。
sudo apt-get install fswebcam
webカメラをラズパイに接続したら、撮影できるかどうかテストしてみましょう。ターミナルに次のコマンドを打つだけです。
fswebcam image.jpg
ppdr@raspberrypi:~ $ fswebcam image.jpg --- Opening /dev/video0... Trying source module v4l2... /dev/video0 opened. No input was specified, using the first. Adjusting resolution from 384x288 to 352x288. --- Capturing frame... Captured frame in 0.00 seconds. --- Processing captured image... Writing JPEG image to 'image.jpg'.
勝手にカメラが認識されてとっても簡単です。image.jpgというファイルに画像が出力されていると思います。
ちなみに、よく使いそうなパラメータはこんな感じです。
-q | メッセージを表示せずに実行 |
-l [seconds] | [seconds]秒ごとに撮影。タイムラプス撮影できそう。 |
-d [device] | デバイス名を指定 |
-D [number] | [number]秒待ったあと撮影。起動直後だとうまく撮影できないときに。 |
-r [size] | 動画サイズを指定 |
–greyscale | 白黒で撮影 |
–no-banner | 画像に表示される時間などの文字を無くす |
–overlay | pngファイルを画像に重ねる。一部だけ隠したい時とかに便利?? |
–jpeg ,–png | ファイル名を指定してjpg,pngで保存する。省略することもできます。 |
人感センサ
最も有名で作例も多いこちらの人感センサを使います。パーツ屋さんで500円くらいで買いました。
モジュールになっていて便利
このセンサ、両端の端子を5VとGNDにつなぐだけで真ん中の端子から出力を出してくれるスグレモノです。人などの熱源の動きを感知すると出力は3Vになり、動きがなくなると0Vになります。
ブレッドボードに次のように配線しました。
赤をラズパイの5V、黒をGND、オレンジを17番ピン、青を24番ピンに接続しています。ちなみに赤色LEDは確認用です。
さて、センサをテストしてみましょう。プログラミングは僕の愛用のpythonを使います。(コンパイルしなくても動く便利)
SENSOR_pin = 17 LED_pin = 24 import wiringpi as wp import time wp.wiringPiSetupGpio() wp.pinMode(SENSOR_pin,0) wp.pinMode(LED_pin,1) state = 0 prev_state = 0 wp.digitalWrite(LED_pin,0) try: while 1: state = wp.digitalRead(SENSOR_pin) if (state != prev_state): if state > prev_state: wp.digitalWrite(LED_pin,1) else: wp.digitalWrite(LED_pin,0) prev_state = state time.sleep(0.1) except KeyboardInterrupt: wp.digitalWrite(LED_pin,0) print "KeyboardInterrupt"
今の出力の値(state)を読み込み、前回の値から立ち上がっていればLEDをオンに、立ち下がっていればオフにします。