Raspberry Pi time-lapse

Förra sommaren delade Teknograd ut en Raspberry Pi till alla anställda. Satte upp den på kontoret och kollade runt men tog alltså över ett år innan jag började laborera med den.

Ganska liten dator men har allt man behöver.
Ganska liten dator men har allt man behöver.

Förra helgen fick jag idén att sätta upp den som en time-lapse kamera. Fick nämligen med en kamera modul och var nyfiken på hur enkelt det var att få den att fungera.

5 megapixel och kan hantera upp till 1080p30 video. Imponerande!
5 megapixel och kan hantera upp till 1080p30 video. Imponerande!

Första steget var att koppla in kameran rätt. När jag gjorde lite tester förra sommaren gjorde jag fel och fick aldrig kameran till att fungera. RTFM Fredrik, eller som man gör nu, Googlar det och ser en video på YouTube. Nåväl fick upp kameran ganska snabbt efter att jag satte den i rätt port.

Första steget var att skapa ett script som tog en bild. Gör så mycket som möjligt i PHP men tog mig samman och beslutade att göra det på “rätt” sätt. Bash scriptet nedan tar en bild i 600×600 px, långt mycket mindre än vad kameran hanterar men ville inte fylla upp disken direkt.

#!/bin/bash

DATE=$(date +"%Y-%m-%d_%H%M")
raspistill -w 600 -h 600 -vf -hf -o /home/pi/camera/images/$DATE.jpg

Körde scriptet ett par gånger och allt funkade som det skulle. Dags för nästa steg, att lägga in en crontab så att datorn automatiskt tar en bild med fast frekvens. I mitt fall satte jag upp den a ta en bild vart tionde minut mellan sju på morgonen och sju på kvällen.

# Take photo
*/10 7-19 * * * /home/pi/camera/cron_camera.sh 2>&1

# Create timelapse
00 20 * * * /home/pi/camera/cron_timelapse.sh 2>&1

I crontabben ovan ser ni även själva time-lapse script referensen som jag valde att köra varje dag klockan åtta.

#!/bin/bash

vPATH="/home/pi/camera"
vWPATH="/var/www"
vTODAY=$(date +"%Y-%m-%d")

ls $vPATH/images/$vTODAY*.jpg > $vPATH/stills_$vTODAY.txt

mencoder -nosound -ovc lavc -lavcopts vcodec=mpeg4:aspect=16/9:vbitrate=8000000 -vf scale=600:600 -o $vWPATH/video/$vTODAY.avi -mf type=jpeg:fps=15 mf://@$vPATH/stills_$vT
ODAY.txt > /dev/null 2>&1

rm $vPATH/images/$vTODAY*.jpg
rm $vPATH/stills_$vTODAY.txt

Tittar vi på time-lapse scriptet så tar jag alla bilderna som tagits under dagen och lägger filnamnen i en text fil. Denna textfilen kör jag sedan via mencoder som tar de enskilda filerna och automagiskt gör om de till en film. Är inte speciellt insatt i memcoder så väldigt osäker på alla parametrar. När filmen är färdig städar jag upp och raderar text filen och dagens bilder. Dagens film är färdig och datorn färdig inför morgondagen.

Ni kanske noterar att jag lägger ut filen under /var/www. Detta så att jag enkelt kan se dagens film via en webbläsare.

Som ni ser så är det ganska enkelt att sätta upp en time-lapse lösning med Raspberry Pi. Grundkoden googlade jag till mig ganska snabbt och sedan var det bara att sätta samman pusselbitarna för att få en lösning som passade mina behov.

Raspberry Pi är en fantastisk plattform och det är väldigt befriande att kunna härja runt i ett Linux system som inte köra i produktion.