小型で扱いやすいシングルボードコンピューターRaspberry Pi(ラズベリーパイ)を使うと、簡単なプログラムで定点観測カメラを作ることができます。 今回はカメラモジュールをつないだRaspberry Pi(Model3+)を使って、決まった時間ごとに撮影を行い画像ファイルを保存する機能を持った定点観測カメラの制作手順をご紹介します。
Raspberry Piで作成できる定点観測カメラの仕組み
まず下記処理を行うシェルスクリプト(OSに対して命令をするコマンドの集まり)を作成します。
- 1.カメラを起動する
- 2.写真を撮影する
- 3.写真をファイルとしてUSBメモリ上に保存する
次に、もともとRaspberry PiのOS(Raspbian)上にある「crontab」コマンドを使用して、1分ごと(時間は任意に設定可能)に上記のシェルスクリプトを実行するように設定します。
これで、定期的に写真を撮影して保存する定点観測カメラの機能が実現できます。
カメラモジュールを接続する
最初にカメラモジュールをRaspberry Piに接続するところから始めますが、カメラモジュールとRaspberry Piを接続するための設定は以前の記事で紹介しているので、そちらを参考にしてください。
“Raspberry Piとカメラモジュールを接続する”
https://www.pc-koubou.jp/magazine/17276
撮影ができる状態のRaspberry Piが用意できたら、定点観測カメラのベースとなる撮影部分の作成に入っていきます。
カメラモジュールで撮影をして保存する
定点観測カメラを作成するために、カメラで撮影するための設定を行う「camera.sh」ファイルを作成します。
「ターミナル」を起動して、下記のコマンドを実行してください。
sudo vim camera.sh
vimエディターが起動したら、下記の内容を書いて保存します。
#!/bin/sh raspistill -o image.jpg
ファイルを保存できたら、下記のコマンドを入力して実行します。
sh camera.sh
無事コマンドが成功すると、「/home/pi」内に画像が保存されます。
撮影した画像の名前を設定する
保存する画像ファイルのファイル名を時間に変更して保存します。
camera.shを下記のように書き換えます。
#!/bin/sh fn=$(date +%Y%m%d%H%M%S) raspistill -o ${fn}.jpg
保存する際に撮影した画像のファイル名がそのとき撮影した時間に名前変更に設定しています。
USBメモリに画像を保存する
今回は撮影した画像は、USBメモリに保存するようにするために新しく設定をする必要があります。
まず、USBメモリをRaspberry Piに挿します。
USBメモリが読み込めたら、「ターミナル」を起動して、下記のコマンドを実行します。
cd デスクトップ
デスクトップに移動したら、USBメモリを認識して読み込みや書き込みをするために「mount」コマンドで設定が必要になります
下記のコマンドを実行してください。
sudo mkdir usb1
続いて、下記のコマンドを実行してください。
sudo mount /dev/sda1 /home/pi/デスクトップ/usb1
これでRaspberry PiがUSBメモリをマウント(≒認識)することができ、読み込みや書き込みができるようになりました。
新しくマウントしたUSBメモリのフォルダーのパス名を指定するために「camera.sh」ファイルを編集します。
下記のコードに書き換えてください。
#!/bin/sh fn=$(date +%Y%m%d%H%M%S) raspistill -o /home/pi/デスクトップ/usb1/${fn}.jpg
一定時間ごとに自動的に撮影するように設定する
カメラで撮影する部分を作成したので、今度は一定時間ごとに自動的に撮影できるようにRaspberry Piを設定します。
最初にも記載したcronで設定を行うのですが、そもそもcronというのは。スクリプトや実行ファイルを定期的に実行してくれる仕組みです。
起動時に毎回実行したいときや、今回の様に指定した時間にスクリプトを実行するときに使います。
cronの指定方法
早速、cronで設定をします。「ターミナル」上で、下記のコマンドを実行してください。
crontab -e
実行した際に、下図の画面が出力されると思いますが、次に行う設定の手順に設定ファイルに追記する部分があるのですが、どのエディターを使って設定ファイルを編集するか選択する画面になります。
今まで、vimエディターを使ってファイルの編集などは行ってきましたが、nanoエディターが簡単に扱えて推奨になっているため2を選択してnanoエディターでファイル編集します。
設定ファイルが開いたら、一番下までスクロールをして設定を書き込みます。
cronの書き込みのやり方はいくつかルールがありまして、そのルールに沿って指定します。
cronは、分 時 日 月 曜日 コマンド の順番で実行するタイミングや時間を指定します。
分は「0~59」の値で、時は「0〜23」の値で、日は「1〜31」の値で、月は「1〜12」ので曜日はそれぞれ「1→月、2→火、3→水、4→木、5→金、6→土、7→日」の数字で表します。
何も指定をしない場合は、数字の代わりに「*」を入力をします。
例として
毎時5分おきに今回作成した「camera.sh」ファイルを実行したい場合は下記の指定をします。
5 * * * * /home/pi/camera.sh
毎日10時に今回作成した「camera.sh」ファイルを実行したい場合は下記の指定をします。
0 10 * * * /home/pi/camera.sh
毎週月曜日10時に今回作成した「camera.sh」ファイルを実行したい場合は下記の指定をします。
0 10 * * 1 /home/pi/camera.sh
では、今回は1分おきに今回作成した「camera.sh」ファイルを実行したいと思います。
n分おきやn時おき、n日おき、n月おきで指定したい場合は、「*/n」とすることでn◯おきを設定することができます。
今回の場合1分おきに今回作成した「camera.sh」ファイルを実行するのは下記の指定をします。
*/1 * * * * /home/pi/camera.sh
最初は慣れるまで大変ですが、ルールにしたがって組み合わせて指定することを知っておけば設定できます。
動作させるタイミングを設定できたら、設定ファイルを保存して閉じてください。
cronが動作しないとき
この地点で定期的に動作しない場合に考えられることは、「camera.sh」ファイルの記載が間違っていることや、cronの設定ファイルでの記載ミスなど様々な理由が考えられます。
まずcronの動作を確認するために、下記のコマンドを実行して確認します。
sudo /etc/init.d/cron status
正常に動作をしている場合は、以下のように”Active:active(running)“と表示されます。
動作が止まっているときの表示は下図のように“Active:inactive(dead)”となります。
動作が止まっている場合は、cronをスタートさせることでcronが定期的に動きます。
下記のコマンドを実行してください。
sudo /etc/init.d/cron start
ログを確認してみる
プログラムの動作の記録のことを「ログ」と呼びますが、cronがどんな動きをしているのかログを見ることができます。
ログを見るためには設定を行う必要があります。「ターミナル」上で下記のコマンドを実行してください。
sudo vim /etc/rsyslog.conf
下図の部分のコメントアウト(先頭の”#”記号)を削除します。
削除したら、「rsyslog.conf」ファイルを保存してエディターを閉じます。
エディターを閉じたら、下記のコマンドを実行してrsyslogを再起動します。
sudo /etc/init.d/rsyslog restart
次にログをどこまで、表示するかの指定をします。
下記のコマンドを実行してエディターを開きます。
sudo vim /etc/default/cron
下記の場所を修正します。
EXTRA_OPTS=””
の部分を下記にのように編集します。
EXTRA_OPTS=”-L 15”
編集が完了したら、ファイルを保存して閉じてcronを再起動します。
sudo /etc/init.d/cron restart
ここまで設定することができたら、ログファイルを確認することができます。
下記のコマンドを入力して実行します。
tail -f /var/log/cron.log
もしここでcronは動いているが、ファイルが読み込まれていない場合などは、「caamera.sh」の実行権限を変更する必要があります。
下記のコマンドで実行権限を変更することができます。
sudo chmod 777 camera.sh
これで大抵動くようになりますが、もしこの設定をしても動かない場合は「camera.sh」のファイルの中身を再度確認したりRaspberry Piを再起動したりして試してみてください。
定点観測カメラとして動かしてみる
ターミナル画面に戻ると、cronの設定ファイルを読み込み定期的にカメラが起動します。
1分おきにカメラが起動したら、正常に動作していることを示します。
電源を切りもう一度Raspberry Piを起動してみます。
正常にcronの動作ができていたら、何もコマンドや、動作をしないでも自動的にカメラが立ち上がり写真撮影をしてくれます。
cronで設定した内容は、Raspberry Piが電源の供給できている間は自動的に実行してくれます。
途中で、中断したい場合などは以下のコマンドを実行することで、システムを停止することができます。
sudo /etc/init.d/cron stop
様々な用途に使える定点観測カメラ
今回は、定点観測カメラをRaspberry Piで作ってみました。学習や研究などで植物などの写真を撮影して観察するのに使ったり、Raspberry Piで人物検出をした時に撮影を開始する防犯カメラのベースにこの仕組みを応用したり、アイデア次第で様々な利用が可能です。
石郷祐介
大学卒業後、公設研究機関勤務を経て、「情報科学芸術大学院大学[IAMAS]」に入学。
専門学校講師を経て、企業の研究開発をコンセプトから開発まで支援する「合同会社4D Pocket」代表、エンジニアを養成するフリースクール「一般社団法人HOPTER TECH SCHOOL」代表理事、「名古屋文理大学」及び「名古屋造形大学」非常勤講師。