タイムラプス撮影用Raspberry Pi Zeroの設定
作成するもの
圃場(バッテリー駆動)で一定時間毎に写真を撮影してシャットダウンするラズパイを作ります。電池を長期間持たせるために待機時は完全電源Offにします。電源制御は前回作成したArduinoモジュールにて行います。
用意するもの
- Raspberry Pi Zero/W
- 設定時に無線LAN接続の方が便利なので。予め無線でssh接続できるようにしておく。
- PCF8523搭載 RTCモジュール(RTCモジュールなら何でも良い)
- Raspberry Pi Zero用カメラ
RTC(リアルタイムクロック)の接続
電源を完全に落としたラズパイは時刻を保持できません。そのため写真の撮影時刻を記録するには外付けのRTC(リアルタイムクロック)を接続します。RTCはボタン電池で時刻を保持し続けてくれます。
RTCはi2c接続のため、RTCのVcc,GND,SDA,SCLをラズパイの当該ピンに接続します。
ラズパイの設定
I2Cの設定
sudo apt-get install python-smbus i2c-tools
sudo apt-get install -y python-smbus
sudo apt-get install -y i2c-tools
sudo raspi-config
-Interfacing Options
-I2C
-Enable(Yes)
(reboot)
sudo vi /boot/config.txt
最終行に追加
dtoverlay=i2c-rtc,pcf8523
(reboot)
・アドレス68がUUであることを確認
sudo i2cdetect -y 1
・fake hwclockを無効にする
sudo apt-get -y remove fake-hwclock
sudo update-rc.d -f fake-hwclock remove
sudo systemctl disable fake-hwclock
sudo vi /lib/udev/hwclock-set
3行をコメントアウトする
#if [ -e /run/systemd/system ] ; then
# exit 0
#fi
・ラズパイの時刻をntpで合わせる
sudo apt-get install ntpdate
sudo ntpdate -v ntp.nict.jp
sudo timedatectl set-timezone Asia/Tokyo
date
・ラズパイからRTCの時間をセットする
sudo hwclock -D -r
・カメラの設定
sudo apt-get install python-picamera python3-picamera
sudo raspi-config
Interfacing Options > Camera > <Yes>でONにします。
reboot
・テスト撮影
raspistill -o image.jpg
・省電力設定
sudo apt install -y chkconfig
sudo chkconfig dphys-swapfile off #swapの停止
sudo chkconfig plymouth off #グラフィカルブートプロセス
sudo chkconfig triggerhappy off #キーボードのショートカットキー
sudo chkconfig alsa-utils off #サウンド関係
sudo chkconfig bluetooth off #bluetooth
sudo apt-get install powertop
BAD の項目はGood になるように変更(powertopが設定変更してくれる)
・メンテナンスモードの設定
運用時はOS起動後、撮影したらすぐにshutdownしてしまうので、メンテナンスログインができません。そのためGPIO 18番とGNDからジャンパ線を出して、ショートしているときのみ運用モードに入るようにします。
・写真を撮影するスクリプト
pi@raspberrypi:~ $ more getphoto.sh
#/bin/sh
raspistill -o ~pi/photo/`date '+%y%m%d-%H%M%S'`.jpg
・起動時の自動実行シェルを作成
pi@raspberrypi:~ $ more autoexec.sh
#!/bin/bash
~pi/autoexec.py
if test $? -eq 1; then
echo `date '+%y%m%d-%H%M%S'` :boot with OffMente >>~pi/bootlog.log
/etc/init.d/dhcpcd start
systemctl daemon-reload
else
echo `date '+%y%m%d-%H%M%S'` :boot with SHORT >>~pi/bootlog.log
~pi/getphoto.sh
shutdown -P now
fi
・/etc/rc.local にautoexec.shを追記(OS起動時にroot権限で実行される)
・GPIOの値を判定するpythonスクリプト
pi@raspberrypi:~ $ more autoexec.py
#!/usr/bin/python
# coding:utf-8
import time
import RPi.GPIO as GPIO
import sys
GPIO.setmode(GPIO.BCM)
#GPIO18pinを入力モードとし、pull up設定とします
GPIO.setup(18,GPIO.IN,pull_up_down=GPIO.PUD_UP)
sw_status = GPIO.input(18)
if sw_status == 0:
print("SHORT!")
if sw_status == 1:
print("OFF!")
GPIO.cleanup()
sys.exit(sw_status)
・全てが動作するのを確認したら、無線LANの自動起動をOFFにします
sudo chkconfig dhcpcd off
・完成写真(右下は温湿度+照度監視モジュール)

PR