Mig hefur lengi langað að vinna meira með hikmyndir (e. time-lapse). Nú þegar lauf eru óðum að þekja tré og blóm að opna krónur sínar er ekki seinna vænna að skella upp nokkrum uppstillingum til að grípa þessi ferli.

Það er vissulega hægt að taka hikmndir með snjalltækjum og þar til gerðum öppum, en þar sem við í Vísindasmiðjunni lúrum á nokkrum Raspberry Pi tölvum, myndavélum fyrir þær, og hleðslubönkum sem geta keyrt tölvurnar yfir heilan dag er tilvalið að nýta þennan búnað.

Myndavélin fylgir staðli sem tölvan þekkir og er tengd með borða í þar til gerða rauf á tölvunni. Það eru til einföld forrit til að taka einfaldar myndir, en ég ákvað að nota bara Python forritunarmálið til að taka myndirnar, en fyrir það er til öfluga skipanasafnið picamera.

Ég setti tvær tilraunir í gang og lét þær malla. Annars vegar eina með upphaflegu Raspberry Pi myndavélinni, festa á PanTiltHat-tinn frá Pimoroni (sem hægt er að stýra með skipanasafninu pantilthat), og hins vegar með Arducam myndavél með stærri linsu.

PanTiltHat og Raspberry Pi myndavél
PanTiltHat og Raspberry Pi myndavél
Arducam og Raspberry Pi
Arducam og Raspberry Pi

Arducam myndavélinni stýrði ég með kóðanum:

from picamera import PiCamera
from time import sleep

c = PiCamera()

for f in c.capture_continuous('arducam{timestamp:%Y-%m-%d-%H-%M}.jpeg'):
    print('Captured '+f)
    sleep(60)

Svo bjó ég til myndband úr listanum með skipuninni:

mencoder "mf://*.jpeg" -nosound -of lavf -lavfopts format=mp4 -ovc x264 -x264encopts pass=1:bitrate=2000:crf=24 -o arducam.mp4 -mf type=jpg:fps=30

Til að stýra PanTiltHat myndavélinni bætti ég við smá bút til að stilla stöðu myndavélarinnar:

from picamera import PiCamera
from time import sleep,time
from datetime import datetime

import pantilthat
import math

c = PiCamera()
c.rotation = 180

def orient_camera():
    # Calculate how many minutes there are since midnight, and then map that to
    # -90 to 90 degrees, to get a pan of the sky.
    now = datetime.now()
    sec_since_midnight = (now - now.replace(hour=0, minute=0, second=0, microsecond=0)).total_seconds()
    sec_per_day = 24*60*60
    pantilthat.pan(90 - sec_since_midnight/sec_per_day*180)

pantilthat.tilt(-10)
orient_camera()

for f in c.capture_continuous('img{timestamp:%Y-%m-%d-%H-%M}.jpeg'):
    print('Captured %s',f)
    sleep(300)
    orient_camera()

Þetta kom bara nokkuð vel út og gerði heilmikið til að lífga upp á myndefnið.