カメラモジュールをつないだRaspberry Pi(Model3+)を使って、決まった時間ごとに撮影を行い画像ファイルを保存する機能を持った定点観測カメラの制作手順をご紹介します。

チャレンジ&ナレッジ最終更新日: 20190906

定点観測カメラをRaspberry Piで作る

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

小型で扱いやすいシングルボードコンピューター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

「camera.sh」ファイルを作成する「camera.sh」ファイルを作成する

vimエディターが起動したら、下記の内容を書いて保存します。

#!/bin/sh
raspistill -o image.jpg

camera.sh」ファイルに写真を撮影するコードを記載camera.sh」ファイルに写真を撮影するコードを記載

ファイルを保存できたら、下記のコマンドを入力して実行します。

sh camera.sh

「camera.sh」ファイルを実行「camera.sh」ファイルを実行

無事コマンドが成功すると、「/home/pi」内に画像が保存されます。

撮影して保存された画像「image.jpg」撮影して保存された画像「image.jpg」

撮影した画像の名前を設定する

保存する画像ファイルのファイル名を時間に変更して保存します。
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

「usb1」ディレクトリーを作成する「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

「camera.sh」ファイルにUSBメモリの保存先を指定するコード「camera.sh」ファイルにUSBメモリの保存先を指定するコード

一定時間ごとに自動的に撮影するように設定する

カメラで撮影する部分を作成したので、今度は一定時間ごとに自動的に撮影できるようにRaspberry Piを設定します。

最初にも記載したcronで設定を行うのですが、そもそもcronというのは。スクリプトや実行ファイルを定期的に実行してくれる仕組みです。

起動時に毎回実行したいときや、今回の様に指定した時間にスクリプトを実行するときに使います。

cronの指定方法

早速、cronで設定をします。「ターミナル」上で、下記のコマンドを実行してください。

crontab -e

cronの設定ファイルを開くためのコマンドcronの設定ファイルを開くためのコマンド

実行した際に、下図の画面が出力されると思いますが、次に行う設定の手順に設定ファイルに追記する部分があるのですが、どのエディターを使って設定ファイルを編集するか選択する画面になります。

今まで、vimエディターを使ってファイルの編集などは行ってきましたが、nanoエディターが簡単に扱えて推奨になっているため2を選択してnanoエディターでファイル編集します。

ここで「2」入力して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

「1分おきにcamera.shファイルを実行する」「1分おきにcamera.shファイルを実行する」

最初は慣れるまで大変ですが、ルールにしたがって組み合わせて指定することを知っておけば設定できます。

動作させるタイミングを設定できたら、設定ファイルを保存して閉じてください。

cronが動作しないとき

この地点で定期的に動作しない場合に考えられることは、「camera.sh」ファイルの記載が間違っていることや、cronの設定ファイルでの記載ミスなど様々な理由が考えられます。
まずcronの動作を確認するために、下記のコマンドを実行して確認します。

sudo /etc/init.d/cron status

cronの現状の動作確認するためのコマンドcronの現状の動作確認するためのコマンド

正常に動作をしている場合は、以下のように”Active:active(running)“と表示されます。

「active(running)」の表示が出力されたら、動作実行中を表す「active(running)」の表示が出力されたら、動作実行中を表す

動作が止まっているときの表示は下図のように“Active:inactive(dead)”となります。

「inactive(dead)」の表示が出力されたら、動作不能を表す「inactive(dead)」の表示が出力されたら、動作不能を表す

動作が止まっている場合は、cronをスタートさせることでcronが定期的に動きます。
下記のコマンドを実行してください。

sudo /etc/init.d/cron start

cronを起動させるコマンドcronを起動させるコマンド

ログを確認してみる

プログラムの動作の記録のことを「ログ」と呼びますが、cronがどんな動きをしているのかログを見ることができます。
ログを見るためには設定を行う必要があります。「ターミナル」上で下記のコマンドを実行してください。

sudo vim /etc/rsyslog.conf

「rsyslog.conf」ファイルを開く「rsyslog.conf」ファイルを開く

下図の部分のコメントアウト(先頭の”#”記号)を削除します。

(先頭の”#”記号)を削除

先頭“#”を消して、上記の設定にする先頭“#”を消して、上記の設定にする

削除したら、「rsyslog.conf」ファイルを保存してエディターを閉じます。
エディターを閉じたら、下記のコマンドを実行してrsyslogを再起動します。

sudo /etc/init.d/rsyslog restart

cronを再起動させるコマンドcronを再起動させるコマンド

次にログをどこまで、表示するかの指定をします。
下記のコマンドを実行してエディターを開きます。

sudo vim /etc/default/cron

vimエディターで開くvimエディターで開く

下記の場所を修正します。

EXTRA_OPTS=””

の部分を下記にのように編集します。

EXTRA_OPTS=”-L 15”

ログを最大に表示する設定ログを最大に表示する設定

編集が完了したら、ファイルを保存して閉じてcronを再起動します。

sudo /etc/init.d/cron restart

cronを再起動するcronを再起動する

ここまで設定することができたら、ログファイルを確認することができます。
下記のコマンドを入力して実行します。

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

cronを停止するコマンドcronを停止するコマンド

様々な用途に使える定点観測カメラ

今回は、定点観測カメラをRaspberry Piで作ってみました。学習や研究などで植物などの写真を撮影して観察するのに使ったり、Raspberry Piで人物検出をした時に撮影を開始する防犯カメラのベースにこの仕組みを応用したり、アイデア次第で様々な利用が可能です。

ライタープロフィール 合同会社 4D Pocket
石郷祐介

大学卒業後、公設研究機関勤務を経て、「情報科学芸術大学院大学[IAMAS]」に入学。
専門学校講師を経て、企業の研究開発をコンセプトから開発まで支援する「合同会社4D Pocket」代表、エンジニアを養成するフリースクール「一般社団法人HOPTER TECH SCHOOL」代表理事、「名古屋文理大学」及び「名古屋造形大学」非常勤講師。

記事を
シェア