ラズパイで植物の定点観測
数年前にRaspberry Piを購入してたのですがちょっと遊んだまま放置になっていたので何か意味のある 装置を作ってみようと最近になって思い立ったので作ってみました。
作ったものはセルトレー上で育てている植物を上からカメラで定点観測するというものです。
用意したもの
- Raspberry Pi 3 model B+
- Raspberry Pi Camera V2
- ブレッドボード
- LED
- ジャンプワイヤー
- 三脚
- 土台となる板
- など…
正直定点観測だけならLEDやブレッドボードはいらないのですが、同時にGPIOについても勉強しようと思い用意しています。
組み立て
ハードの部分の組み立てについては以下の写真に示すような構造にしました。
要はカメラの三脚に土台となる板を取り付け、その上にカメラモジュールを接続したラズパイ、その他周辺機器を接続した感じです。

日曜大工したことない私が何も見ないで作ったので結構適当な設計になっていますが形にはなっているのでよしとします。
LEDはGPIO4番端子に取り付け、プログラミングで制御できるようにしています。(もちろん抵抗はつけています。)
写真をとるスクリプト
続いてソフトの方を開発していきます。やったことはカメラモジュールを操作して写真を撮影するスクリプトの作成です。以下のようなスクリプトを書きました。
#!/usr/bin/env python3
import picamera
import RPi.GPIO as GPIO
import time
import os.path as path
# properties for image
PICTURE_WIDTH = 800
PICTURE_HEIGHT = 600
FRAMERATE = 15
# directory to save image
SAVEDIR = path.join("/", "home", "pi", "plant_observation", time.strftime("%Y%m%d"))
# GPIO setup
GPIO.setmode(GPIO.BCM)
GPIO.setup(4, GPIO.OUT)
# blink LED for indicate taking a picture
for i in range(5):
GPIO.output(4, GPIO.LOW)
time.sleep(0.5)
GPIO.output(4, GPIO.HIGH)
time.sleep(0.5)
# take a picture
cam = picamera.PiCamera()
cam.resolution = (PICTURE_WIDTH, PICTURE_HEIGHT)
cam.framerate = FRAMERATE
filename = time.strftime("%Y%m%d%H%M%S") + ".jpg"
save_file = path.join(SAVEDIR, filename)
cam.start_preview()
time.sleep(5)
cam.capture(save_file)
cam.stop_preview()
# LED off
GPIO.output(4, GPIO.LOW)
GPIO.cleanup()
上記スクリプトは /home/pi/plant_observation/ という名前のディレクトリに hourly_camera.py という名前で保存しました。
カメラはルート権限でないと動かせないようなので上記スクリプトはルート権限で実行しました。
定期的に写真を撮るための設定
Linuxにはcronという仕組みがあり、それにより定期的にコマンドを実行できるので、この仕組みを用いて、自動的に設定した時間に写真が撮られるようにします。
ルートユーザでcronコマンドを打ちます。
crontab -e
するとテキスト編集画面にになるので、最終行に以下の一行を追加します。
00 * * * * cd /home/pi/plant_observation/ ; python3 hourly_camera.py >>log 2>&1
この行の意味は毎時00分に先ほど作成したスクリプトを実行するという意味になります。
以上で植物の簡易的な植物定点観測システムができあがりました。
時間があればさらに環境情報(気温、湿度等)の記録などの機能を付け加えて、 より有意義なシステムにアップグレードしていきたいと思っています。
ちなみに取れた写真はこんな感じです。(ちょっとピントが合ってない感じがあったのでこの後カメラのレンズ部分を回転させて調整しました。)
