TairaHamiltonのアイコン画像
TairaHamilton 2021年02月28日作成 (2021年12月11日更新) © MIT
製作品 製作品 閲覧数 921
TairaHamilton 2021年02月28日作成 (2021年12月11日更新) © MIT 製作品 製作品 閲覧数 921

私のレンズにサインしてもらえますか

私のレンズにサインしてもらえますか

前口上

スポーツの試合前後にあこがれの選手からサインを貰えるチャンスがある。自分のカメラにサインをして貰う事により、サインをしている映像までもが宝物になるというカメラをRaspberry Piで製作した。

外観写真と透視図

スチレンボード製の筐体内部に、Raspberry Piとバッテリーを格納している。
アクリルパネルの前面に固定治具があり容易に取り外すことができる。
サインを書いてもらった後新しいパネルに交換をする。
なお、丸ダイヤルはダミーである。
キャプションを入力できます
キャプションを入力できます

材料

  • Raspberry Pi Model A+
  • Raspberry Pi Camera Module with Wide Lens
  • DS3231 RTC Module
  • AQM0802A 8x2 LCD Module
  • 4.3inch Color LCD
  • タクトスイッチ
  • モバイルバッテリー
  • スチレンボード
  • 磁石
  • アクリルパネル

ブロック図

キャプションを入力できます

GPIOはデフォルトPulldownで使用する。
8x2 LCD(AQM0802A)はステータス、時刻表示用である。
RTCは、LANに繋がらない屋外環境下で時間を保持するのに必要である。
4.3inch Color LCDは撮影時のモニタリング用である。

キャプションを入力できます

GPIOのスイッチは ONで3.3Vに接続され、Highを検出する。

Code

シェルを使用した。
GPIOスイッチに応じてraspividを起動する。
停止時は kill -9 で乱暴に終了させる。
未撮影時はLCDに時刻を表示する。

#!/bin/sh GPIO_stil=22 #GPIO port(stil) GPIO_movie5=23 #GPIO port(movie5fps) GPIO_movie30=24 #GPIO port(movie30fps) GPIO_stil5=25 #GPIO port(stil5) GPIO_run=20 #GPIO port(shoot button) GPIO_stop=21 #GPIO port(stop) Holdtime=5 #Shutdown button wait time SAVEDIR=/home/pi/picture/ ### Setting ### #echo "$GPIO_run" > /sys/class/gpio/export #echo "in" > /sys/class/gpio/gpio$GPIO_run/direction #echo "low" > /sys/class/gpio/gpio$GPIO_run/direction for i in 20 21 22 23 24 25 do echo "$i" > /sys/class/gpio/export echo "in" > /sys/class/gpio/gpio$i/direction echo "low" > /sys/class/gpio/gpio$i/direction done ### ACT LED control ### set_led_mode () { echo $1 > /sys/class/leds/led0/trigger } set_led_value () { echo $1 > /sys/class/leds/led0/brightness } ### Initialize ### /usr/local/sbin/i2c_lcd.sh -i `date +"%H:%M:%S"` #echo > /usr/local/etc/raspicam.pid raspicampid="" #Get PID sleeptimez="" #sleep time serial value ### Wait n seconds ### count=0 while [ $count -lt $Holdtime ] ; do sleeptimecheck=`date "+%s"` #serial value chiptemp=`cat /sys/class/thermal/thermal_zone0/temp` chiptemp=`echo "scale=1; $chiptemp / 1000" | bc` if [ `cat /sys/class/gpio/gpio$GPIO_run/value` -eq "1" ] ; then # raspicampid=`cat /usr/local/etc/raspicam.pid` if [ `cat /sys/class/gpio/gpio$GPIO_stop/value` -eq "1" ] ; then if [ -n "$raspicampid" ] ; then sudo kill -9 $raspicampid raspicampid="" /usr/local/sbin/i2c_lcd.sh -p 0 'PID:' /usr/local/sbin/i2c_lcd.sh -p 4 ' ' /usr/local/sbin/i2c_lcd.sh -p 4 $raspicampid /usr/local/sbin/i2c_lcd.sh -p 40 'kill -9 ' sleepenh 0.3 /usr/local/sbin/i2c_lcd.sh -p 40 ' ' /usr/local/sbin/i2c_lcd.sh -p 0 'Standby.' sleepenh 0.2 /usr/local/sbin/i2c_lcd.sh -p 7 ' ' /usr/local/sbin/i2c_lcd.sh -p 0 ' ' else /usr/local/sbin/i2c_lcd.sh -p 0 'CPU:' /usr/local/sbin/i2c_lcd.sh -p 4 $chiptemp sleepenh 0.5 fi elif [ `cat /sys/class/gpio/gpio$GPIO_stil/value` -eq "1" ] ; then if [ -z "$raspicampid" ] ; then filename='image%08d.jpg' subdir=`date +"%Y%m%d%H%M"` mkdir $SAVEDIR$subdir raspistill -t 0 -tl 2000 -n -ex antishake -mm matrix -o "$SAVEDIR$subdir/$filename" & raspicampid=`pidof raspistill` /usr/local/sbin/i2c_lcd.sh -p 0 'Shooting' /usr/local/sbin/i2c_lcd.sh -p 40 'Jpg:2sec' fi elif [ `cat /sys/class/gpio/gpio$GPIO_movie5/value` -eq "1" ] ; then if [ -z "$raspicampid" ] ; then filename=`date +"%Y%m%d_%H%M%S_05fps.h264"` raspivid -t 0 -fps 5 -f -awb sun -o "$SAVEDIR$filename" & # pidof raspivid > /usr/local/etc/raspicam.pid raspicampid=`pidof raspivid` /usr/local/sbin/i2c_lcd.sh -p 0 'Record..' /usr/local/sbin/i2c_lcd.sh -p 40 'H264:5f ' fi elif [ `cat /sys/class/gpio/gpio$GPIO_movie30/value` -eq "1" ] ; then if [ -z "$raspicampid" ] ; then filename=`date +"%Y%m%d_%H%M%S_30fps.h264"` raspivid -t 0 -fps 30 -n -awb sun -o "$SAVEDIR$filename" & # pidof raspivid > /usr/local/etc/raspicam.pid raspicampid=`pidof raspivid` /usr/local/sbin/i2c_lcd.sh -p 0 'Record..' /usr/local/sbin/i2c_lcd.sh -p 40 'H264:30f ' fi elif [ `cat /sys/class/gpio/gpio$GPIO_stil5/value` -eq "1" ] ; then if [ -z "$raspicampid" ] ; then filename=`date +"%Y%m%d_%H%M%S_m30fps.h264"` raspivid -t 0 -fps 30 -vs -n -awb sun -mm matrix -o "$SAVEDIR$filename" & # pidof raspivid > /usr/local/etc/raspicam.pid raspicampid=`pidof raspivid` /usr/local/sbin/i2c_lcd.sh -p 0 'Record..' /usr/local/sbin/i2c_lcd.sh -p 40 'H264:30fm' fi else if [ -z $raspicampid ]; then /usr/local/sbin/i2c_lcd.sh -p 0 'Shutdown' /usr/local/sbin/i2c_lcd.sh -p 41 ' ' /usr/local/sbin/i2c_lcd.sh -p 40 `expr $Holdtime - $count` fi count=`expr $count + 1` [ $count -eq 1 ] && set_led_mode heartbeat fi else [ $count -gt 0 ] && set_led_mode mmc0 count=0 fi sleeptimez=`sleepenh $sleeptimecheck 1` if [ -z $raspicampid ] && [ $count -eq 0 ]; then if [ `expr \( $sleeptimecheck + 1 \) % 30` -eq 0 ] ; then /usr/local/sbin/i2c_lcd.sh -p 0 `date +"%H:%M:%S"` /usr/local/sbin/i2c_lcd.sh -p 40 ' ' else /usr/local/sbin/i2c_lcd.sh -p 0 ' ' /usr/local/sbin/i2c_lcd.sh -p 40 `date +"%H:%M:%S"` fi fi done ### Shutdown (LED) ### /usr/local/sbin/i2c_lcd.sh -c set_led_mode none set_led_value 1 sleep 2 set_led_value 0 set_led_mode mmc0 ### Shutdown ### #raspicampid=`cat /usr/local/etc/raspicam.pid` if [ -n $raspicampid ]; then sudo kill -9 $raspicampid fi shutdown -h now

起動時に実行させたいので /etc/rc.localに追記する。
/usr/local/bin/camera.sh &

消費電力およびファイルサイズ

外部ビデオ出力無しの状態での5V系の消費電流を測定。
5fps/1920x1080 : 0.15A
30fps/1920x1080 : 0.26A~0.33Aで揺れる
消費電力的にはフレームレートを下げるのが良いが、5fpsは映像として実用的ではない。

また、ファイルサイズは36分で4.4GBとなった。

撮影後の処理

MP4BOXを使用。

MP4Box -fps 30 -add hoge.h264 hoge.mp4
でmp4形式となる。

撮影結果

ここに動画が表示されます

ここに動画が表示されます

ここに動画が表示されます

ここに動画が表示されます

ここに動画が表示されます

リスト

標本化

サインは、タグをつけてアルバムに保管する。
キャプションを入力できます

  • QRコード
  • 名前
  • チーム名
  • レース名
  • 取得場所・日付
    を記載する。
    QRコードは10.5mm□で、YouTubeのURLを格納している。
1
TairaHamiltonのアイコン画像
明和電機協同組合会員
ログインしてコメントを投稿する