編集履歴一覧に戻る
TairaHamiltonのアイコン画像

TairaHamilton が 2021年02月28日21時43分41秒 に編集

初版

タイトルの変更

+

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

タグの変更

+

秋葉原2021

+

RaspberryPi

メイン画像の変更

メイン画像が設定されました

本文の変更

+

![キャプションを入力できます](https://camo.elchika.com/8f623387cec1b877cd9f7f080fc5ea2ba814e232/687474703a2f2f73746f726167652e676f6f676c65617069732e636f6d2f656c6368696b612f76312f757365722f31396462313965652d626336612d343962662d616137642d3932333034323332636363622f62313964623763632d333465332d346436392d626631632d366435313664643561643632/) ## 前口上 スポーツの試合前後にあこがれの選手からサインを貰えるチャンスがある。自分のカメラにサインをして貰う事により、サインをしている映像までもが宝物になるというスペシャルなカメラをRaspberry Piで製作した。 ## 透視図 スチレンボード製の筐体内部に、Raspberry Piとバッテリーを格納している。 アクリルパネルの前面に固定治具があり容易に取り外すことができる。 サインを書いてもらった後新しいパネルに交換をする。 なお、丸ダイヤルはダミーであり機能しない。 ![キャプションを入力できます](https://camo.elchika.com/79951f19da7de26c3308facfa1f157197d1be6bc/687474703a2f2f73746f726167652e676f6f676c65617069732e636f6d2f656c6368696b612f76312f757365722f31396462313965652d626336612d343962662d616137642d3932333034323332636363622f65363130636461642d336638652d346533382d396632632d616262373235346537613231/) ## 材料 - Raspberry Pi Model A+ - Raspberry Pi Camera Module with Wide Lens - DS3231 RTC Module - AQM0802A 8x2 LCD Module - 4.3inch Color LCD - タクトスイッチ - モバイルバッテリー - スチレンボード - 磁石 - アクリルパネル ## ブロック図 ![キャプションを入力できます](https://camo.elchika.com/7046e07755ae9651e7d849ed4c7d2bd678197189/687474703a2f2f73746f726167652e676f6f676c65617069732e636f6d2f656c6368696b612f76312f757365722f31396462313965652d626336612d343962662d616137642d3932333034323332636363622f32366338626133632d353364652d343434372d613033642d616433623839633839643264/) GPIOはデフォルトPulldownで使用する。 8x2 LCD(AQM0802A)はステータス、時刻表示用である。 RTCは、LANに繋がらない屋外環境下で時間を保持するのに必要である。 4.3inch Color LCDは撮影時のモニタリング用である。 ![キャプションを入力できます](https://camo.elchika.com/1f6ae9dc9447a50caffcc0e7088e36895238fb97/687474703a2f2f73746f726167652e676f6f676c65617069732e636f6d2f656c6368696b612f76312f757365722f31396462313965652d626336612d343962662d616137642d3932333034323332636363622f37643032383561362d336664372d346237312d613863322d646165313164323261313535/) GPIOのスイッチは ONで3.3Vに接続され、Highを検出する。 ## Code シェルを使用した。 GPIOスイッチに応じてraspividを起動する。 停止時は kill -9 で乱暴に終了させる。 未撮影時はLCDに時刻を表示する。 GPIO22 # stilcamera GPIO23 # movie 5fps GPIO24 #H264 30fps(Wb sun) GPIO25 #GPIO port(reserved) GPIO_run=20 #GPIO port(Run button) GPIO_stop=21 #GPIO port(Cam_stop) ``` Camera.sh #!/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 ``` スクリプトを保存。 /usr/local/bin/camera.sh 起動時に実行させたいので /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形式となる。 ## 撮影結果 @[youtube](https://www.youtube.com/watch?v=Q_cvW694g5c) @[youtube](https://www.youtube.com/watch?v=0fBHiMX4OJs) @[youtube](https://www.youtube.com/watch?v=yXsbBy1gclk) @[youtube](https://www.youtube.com/watch?v=CrqpqNOSaj4) @[youtube](https://www.youtube.com/watch?v=WK_u9jW7E34) ## 標本化 サインは、タグをつけてアルバムに保管する。 ![キャプションを入力できます](https://camo.elchika.com/828dd6554d41c45f35971d789bb07443bc34ba3b/687474703a2f2f73746f726167652e676f6f676c65617069732e636f6d2f656c6368696b612f76312f757365722f31396462313965652d626336612d343962662d616137642d3932333034323332636363622f33353237363531302d343532632d343132632d623931642d623466383630386530363563/) MS Pゴシックの6pt  名前  チーム名  レース名  取得場所・日付 QRコードは10.5mm□で、YouTubeのURLを格納する。