うちには、人間怖いー!(元野良なので)と、人間大好き!(元野良なのに)と、 お嬢ちゃん(ちょいぽちゃ)な3匹の猫がいます。 先日、飼い猫が3匹に増えているのを友人に知られ、呆れられたのですが、 これには色々と事情が…ブツブツ…。
と、それは置いといて、季節の挨拶状に使いたいから、飼い猫の画像を集めたい、、、 という時に、手作業で撮影するのは時間もかかるし、「人間怖いー」な子がいると苦労します。 ということで、Raspberry Pi、使ってみました。
HC-SR501、MCP3008、フォトレジスタ、LED は、Raspberry Pi 3 Model B と OSOYOO 初心者キットの温湿度センサー (DHT11) のサンプル で使った、「OSOYOO(オソヨー)」の初心者向け電子工作キット「オソヨー電子工作キット(改良版) for Raspberry Pi 3 2 Model B」に付いていたものです。
上記材料をブレッドボードに差して、Raspberry Pi とつなぎます。
ブレッドボードの真ん中の黒いのは MCP3008 です。抵抗はブレッドボードの左側(LED につながっている)が 510 Ω、右側(フォトレジスタおよび MCP3008 の CH0 につながっている)が10 kΩです。
接続が済んだので、猫にいたずらされないよう、箱に納めました。 25 枚入りフロッピーディスクのケース(プラスチック)があれば、収まりそうだし、おしゃれだねー、と探したのですが、はるか昔に捨ててしまったようで…。仕方なく何かの箱です。 手作り感満載ですが。。。
Raspberry Pi のディスク容量が心配だったので、撮影した画像は他のマシンにアップロード・保存するようにしました。 保存するマシンは、撮影中は起動したままにしておきます。
以下の環境および設定が必要です。
Python 3 と以下のライブラリ
マシンの 8080 番ポートが利用できるようファイアウォールを設定
マシンに アップローダのソース一式 をダウンロードし、コマンドラインから実行します。
python3 uploader.py
Raspberry Pi からアップロードされた画像は files ディレクトリ下に格納されます。
アドレス・ポートを変更する場合、uploader.py の host='0.0.0.0' および port=8080 を変更します。
run(host='0.0.0.0', port=8080, debug=True, reloader=False)
pi camera の設定と以下の環境が必要です。
Python 3 と以下のライブラリ
Raspberry Pi に 撮影のソース一式 をダウンロードし、take_picture.py の IMG_UPLOAD_URL(画像ファイルのアップロード先)を、画像を保存するマシンに変更します。
IMG_UPLOAD_URL = 'http://192.168.1.4:8080/upload'
コマンドラインから実行します。
python3 take_picture.py
赤外線センサーが何かを感知した時、一定の明るさがあれば撮影を行い、画像を保存するマシンにアップロードします。
撮影するかどうかの明るさのしきい値の変更は、take_picture.py の PVALUE_THRESHOLD を調整します。
PVALUE_THRESHOLD = 850
PVALUE_THRESHOLD とフォトレジスタから取得した値を比較し 「フォトレジスタから取得した値 < PVALUE_THRESHOLD」 の場合に、撮影が行われます。
def enough(self):
pvalue = self.read_pvalue()
##print('enough(): pvalue: [%d]' % (pvalue))
if pvalue < PVALUE_THRESHOLD:
return True
上記の接続方法では、フォトレジスタから取得した値は、明るいと値が小さくなり、暗いと大きくなるため、
PVALUE_THRESHOLD を大きくすると比較的暗くても撮影が行われ、PVALUE_THRESHOLD を小さくすると暗いと撮影が行われません。
※take_picture.py 記載の 850 だと比較的暗くても撮影されます。
プログラムを実行したまま、ターミナルからログアウトしたい時は screen を使うと便利です。
例えば Ubuntu の場合、以下のコマンドでインストールできます。
sudo apt-get install screen
あとは待っているだけで、画像を保存するマシンに画像が貯まっていきます。
人がいる時といない時では、猫の行動も少し変わるようで、特に「人間怖いー」な子が、のびのび遊んでるのを見て、安心しました。
なお、、、当然、猫だけでなく人間も撮影されてしまいます。振る舞いに気をつけなければ…。 また、赤外線センサーが感知した時だけ撮影するようにはしたのですが、 部屋に差し込む陽の光が明るくなった時など、誰もいないのに撮影されることがありました。 幽霊ではないようで(たぶん)、、、ちょと残念。
※画像は一部加工済み(部屋が汚いので隠しました)です。
以下のページを参考にさせていただきました。
Raspberry Pi 側のプログラムは OSOYOO 様のサイトのサンプルをベースにさせていただいたのですが、 MCP3008 から値を取得する際、C と Python とでは事前の設定や値の取得方法が若干違うため、なんでかなぁ、、、と思っていました。 すごく勉強になりました!。どうもありがとうございます。