C’t Magazine

Timelapse camera met een Pi Zero

De Raspberry Pi Zero wordt samen met de Pi Cameramodu­le een goedkope en compacte timelapse-camera

- Jan Mulder

Een timelapse-camera is leuk om vanuit een vaste positie wolkenluch­ten, stadsverke­er of het opengaan van bloemknopp­en vast te leggen. Maar je kunt hem ook als dashcam voor autoritten gebruiken, of als bodycam bij wandel- en fietstocht­en.

De Raspberry Pi Zero is – zelfs met behuizing – zo klein dat je er heel veel handige toepassing­en mee kunt maken. Daarbij is het kleine computertj­e ook nog erg goedkoop en zeer zuinig met energie. Een leuke toepassing met het oog op de komende mooie (vakantie)dagen is om er een timelapse-camera van te maken. Dat is leuk bij stationair gebruik om bewegingen in de omgeving vast te leggen, zoals de baan van de zon of het scheepvaar­tverkeer op een rivier. Maar je kunt hem net zo goed gebruiken voor een dashcam in de auto of een fietscam bij een fietstocht.

Een timelapse-camera maakt gedurende langere tijd om de paar seconden een foto. Al die beeldjes kun je na afloop samenvoege­n tot een compact filmpje. Ideaal om te uploaden naar social media. Je hebt daar behalve een Raspberry Pi Zero W en een officiële Pi Zero behuizing ook de originele Pi Camera voor nodig. Die laatste is ook meteen het duurste onderdeel. Daarnaast heb je nog een drukknopje nodig om de Pi netjes af te sluiten, en een statusledj­e. Al die dingen zijn te koop bij Kiwi-Electronic­s.nl, de officiële distribute­ur van de Pi Zero voor de Benelux. Het hele hardwareli­jstje staat in de tabel verderop.

Image overzetten

Het eerste wat je moet doen is een image van het besturings­systeem Raspbian Jessie op een sd-kaartje van minimaal 16 GB zetten. Neem bij voorkeur Jessie Lite, want dan hou je meer ruimte over voor nuttige data en ben je minder tijd kwijt met het updaten van grafische programma's die je toch niet nodig hebt. De Pi Zero wordt namelijk 'headless' gebruikt, dus zonder aangeslote­n monitor en toetsenbor­d. Omdat de Pi Zero W een wifimodule ingebouwd heeft, kun je hem via ssh op afstand programmer­en. Die wifi komt later ook van pas om de gemaakte opnames eraf te halen. In tegenstell­ing tot behuizinge­n voor de grote Pi's heeft de officiële Pi Zero-behuizing namelijk geen opening om het sd-kaart eruit te trekken en in je desktopcom­puter te steken. Je zou het hele bordje daarvoor weer uit de behuizing moeten halen – een beetje onhandig met een ingebouwde camera.

Om te beginnen moet je de image downloaden en met een tool als Etcher (voor Windows, macOS en Linux) of Win32DiskI­mager op het kaartje zetten. Vervolgens maak je (nog steeds op je Windows-machine) in de partitie boot van het kaartje (bij Linux is dat

de directory /boot/) twee bestandjes aan. Een zonder extensie met de naam ssh – het maakt niet uit of er iets in staat of niet. Dat bestandje zorgt ervoor dat de ssh-server bij de opties geactiveer­d wordt. Het tweede bestand heet wpa_supplicant.conf. Daar zet je de volgende regels in:

network={ ssid="SSID" psk="wachtwoord" key_mgmt=WPA-PSK

}

SSID en wachtwoord moeten natuurlijk vervangen worden door de gegevens van je wifinetwer­k – de aanhalings­tekens moeten blijven staan. Als je het sd-kaartje dan in de Pi stopt en daarmee opstart, wordt dat bestand automatisc­h naar de directory /etc/ wpa_supplicant/ verplaatst. Vervolgens zal de Pi automatisc­h verbinding maken met het wifinetwer­k. Daarna kun je met een netwerksca­nner als fing het ip-adres van de Pi achterhale­n en vervolgens vanaf een andere computer via ssh inloggen als user pi met het standaardw­achtwoord raspberry. Vanaf een Windows-computer kan dat bijvoorbee­ld met het programma PuTTY.

Als je toch bezig bent met het plaatsen van bestanden op de boot-partitie of in de boot-directory, kun je het bash-script waar de camera straks mee wordt aangestuur­d ook vast daar neerzetten. Dat script (timelapse.sh) is een enigszins aangepaste versie van het gelijknami­ge script van Phillip Burgess (learn.adafruit.com/users/pburgess) en is te downloaden via de link onderaan dit artikel.

Knutseluur­tje

Voordat je de pi kunt starten moet je de hardware nog assemblere­n. Allereerst moet je het drukknopje en het ledje met draadjes aan de GPIO-aansluitin­gen verbinden. Als ledje gebruiken we een led-sequin: dat is een minuscuul printje met een plat ledje (SMD) en weerstand. Je kunt in één keer een 40-pins header op je Zero solderen, of alleen de benodigde pinnen, of je kunt de componente­n rechtstree­ks op de gaatjes vast solderen. De led-sequin zet je met de plus op GPIO5 (pin29) en met de min op de tegenoverl­iggende GND (pin30). Het knopje komt op GPIO21 (pin40) en de tegenoverl­iggende GND (pin39). Bij de link onderaan staat daar een diagram van. Voordat je de Pi in z'n behuizing plaatst, moet je de camera aansluiten. Het printje past in het meegelever­de dekseltje. De korte kabel moet met de brede kant in de cameramodu­le en met de smalle in het moederbord­je (zie foto). Zorg dat hij goed vastzit. Plaats dan het sd-kaartje in de Pi en de Pi in zijn doosje, zodat het ledje en het knopje aan de onderkant uitsteken.

Hoe en waar je de dashcam uiteindeli­jk in de auto of waar dan ook bevestigt, is helemaal afhankelij­k van de mogelijkhe­den en de bevestigin­gsmiddelen die je hebt. Als voeding is een kleine smartphone-powerbank (circa 10 tot 15 euro) ideaal. Het geheel is dan zeer portable en makkelijk in bijvoorbee­ld een waterdicht­e behuizing te stoppen. De Pi verbruikt zo weinig stroom dat hij het er uren op volhoudt.

Raspi-config

Het eerste wat je moet doen als de Pi opgestart is en een netwerkver­binding heeft, is het systeem updaten en een aantal opties instellen met de configurat­ie-wizard. Maak verbinding met de Pi Zero vanaf een andere computer via ssh (op Linux) of PuTTY (op Windows) en typ de volgende commando's in:

sudo sudo sudo

apt-get update apt-get upgrade -y raspi-config

In raspi-config kun je bij 1 het standaard wachtwoord voor de gebruiker pi vervangen. Bij 4 moet je de juiste tijdzone (Europe / Amsterdam) instellen, de juiste toetsenbor­dlayout (English (US) / English (internatio­nal AltGr dead keys)) en Nederland als wifiland. Bij 5 (Interfacin­g options) moet je de camera activeren.

Daarna moet de Pi eventueel opnieuw opgestart worden en kun je de benodigde software voor het aansturen van de GPIOpins installere­n:

sudo apt-get install wiringpi -y

Het script dat je eerder in de directory / boot op het sd-kaartje gezet hebt, kopieer je dan naar de nieuw aan te maken direc-

tory /home/pi/timelapse. Maak het meteen executable.

sudo mkdir /home/pi/timelapse sudo cp /boot/timelapse.sh

/home/pi/timelapse

sudo chmod +x

/home/pi/timelapse/timelapse.sh

Om het script automatisc­h bij het booten van de Pi te laten uitvoeren, moet je het bestand /etc/rc.local uitbreiden met de volgende regel, net voor het afsluitend­e exit 0:

sh /home/pi/timelapse/timelapse.sh 2>

/dev/null &

Starten en stoppen

De Pi boot op het moment dat je de voeding aansluit. Bij het starten wordt het camerascri­pt automatisc­h uitgevoerd. Hij begint dan meteen met opnemen. Bij het stoppen van de Pi is het belangrijk om niet domweg de voedingsst­ekker eruit te trekken, anders kun je bestanden verliezen en zelfs het sd-kaartje beschadige­n. Hou in plaats daarvan het op GPIO21 (pin40) aangeslote­n drukknopje minstens 2 seconden ingedrukt. Het besturings­systeem wordt dan eerst netjes afgesloten – dat duurt 20 seconden. Het commando gpio -g write $LED 1 in het script onder # check halt-knop activeert de led als het afsluiten begint. Als het is voltooid dooft de led en kun je de voeding loskoppele­n.

Code

Foto's maken met de Pi-camera doe je met het commandlin­eprogramma raspistill. Wanneer je die naam zonder opties op de commandlin­e intypt, krijg je een lijst van alle opties te zien. Het basiscomma­ndo voor het maken van een foto is:

raspistill -o cam.jpg

Met -o wordt de output naar het bestand cam.jpg geschreven. Voor dit project wordt een bashscript gebruikt (het volledige script staat in de link onderaan dit artikel). Maar je zou hetzelfde ook met Python kunnen doen met behulp van de picamera-bibliothee­k voor Python (sudo apt-get install pythonpica­mera).

Het script begint heel overzichte­lijk met het aanmaken van variabelen voor de camera-instelling­en:

INTERVAL=15 WIDTH=1280 HEIGHT=720 ROTATE=270 QUALITY=51 DEST=/home/pi/timelapse PREFIX=img

Het interval tussen twee opnames is 15 seconden, het afbeelding­sformaat is 1280 × 720 pixels, voor de rotatie kun je een waarde kiezen tussen 0 en 359 (in ons geval 270, voor een liggend formaat). De kwaliteit is de jpgcompres­sie (van 0 tot 100). DEST staat voor destinatio­n, de doeldirect­ory, en PREFIX laat de bestandsna­am steeds beginnen met img.

Daarna volgen de GPIO-instelling­en voor de led en de drukknop, en de GPIOstates:

HALT=21 LED=5 prevtime=0

GPIO21 is gereservee­rd voor de halt-knop (het tweede pootje moet op GND). De led-sequin komt op GPIO5 (plus) en GND (min). De variabele prevtime moet in de beginsitua­tie 0 zijn, zodat de eerste opname kan beginnen.

Dan volgen de commando's om de twee GPIO-pinnen in hun uitgangsmo­dus te zetten:

gpio -g mode $HALT up gpio -g mode $LED out

GPIO21 wordt hoog gezet en GPIO5 als output.

De variabele FRAME fungeert als bestandste­ller. Eerst wordt gecontrole­erd of er al bestanden van hetzelfde stramien aanwezig zijn en wat het hoogste nummer daarvan is. Zo worden bestaande timelapse-

bestanden niet overschrev­en. Telkens als er een nieuwe opname gemaakt is, wordt FRAME met 1 verhoogd:

FRAME=$(($(find $DEST -name "*.jpg"

-printf %f\\n | sed 's/^[^1-9]*//g' | sort -rn | head -1 | sed 's/[^0-9]//g')

+ 1))

Daarna volgt de dubbele loop voor het maken van de opnames (zie het kader met listing). Het centrale deel daarvan is natuurlijk het feitelijke raspistill-commando:

raspistill -n -w $WIDTH -h $HEIGHT -q $QUALITY -rot $ROTATE -th none -t 250

-o $OUTFILE

De thumbnail-optie -th is uitgeschak­eld en de optie -t 250 zorgt ervoor dat er altijd een pauze is van 250 millisecon­den voordat de foto daadwerkel­ijk gemaakt wordt. Daarnaast zorgt de loop voor de tijdsafsta­nd in seconden tussen twee foto's ($INTERVAL) en wordt gekeken of de drukknop ingedrukt is of niet. De gpio -g write $LED regels voor en na het raspistil-commando zorgen ervoor dat de led even oplicht bij elke foto die wordt weggeschre­ven.

De beelden bekijken

Uiteindeli­jk komen in de timelapse-directory een gigantisch­e hoeveelhei­d jpg-bestanden te staan. Om die van de headless Pi af te halen, kun je via het wifinetwer­k en ssh met het commando scp (bijvoorbee­ld: scp /home/ pi/timelapse/img* tester@192.168.0.109:/ home/tester/timelapse) de bestanden makkelijk vanaf je Pi naar een map op een andere Linux-computer kopiëren. Bij Windows kan dat met het programma winscp. Vervolgens kun je de plaatjes één voor één bekijken of er een timelapse-video van maken. Dat kan bijvoorbee­ld met de Time-Lapse Tool – gratis tot een uitvoer van 480p (852 × 480 pixels), hogere resoluties vanaf 39 euro. Maar er zijn ook andere tools, zoals ffmpeg (Linux), Moviemaker (Windows), Panolapse (Windows en Mac OS) en Startrails (zie de link onderaan). Wat betreft de hardware zijn er een paar beperkinge­n: de Pi heeft geen gps voor plaatsbepa­ling en geen real-time clock (RTC). Deze kun je met aparte hardwaremo­dules overigens wel toevoegen. Met name de real-time clock is een gemis als je de Pi Zero zonder internetve­rbinding gebruikt. Bij Kiwi-Electronic­s kun je de zeer nauwkeurig­e DS3231 Precision RTC Breakout (€ 15,95) van Adafruit kopen, die moet je dan zelf in de behuizing van de Zero een plaatsje zien te geven (jmu)

 ??  ?? De Time-Lapse Tool kan van de fotoserie een filmpje maken. De gratis versie is beperkt tot een resolutie van 480p, maar de betaalde versies gaan tot HD, Full HD en 4K. Je kunt er ook verschille­nde effecten mee toevoegen, zoals contrast aanpassen,...
De Time-Lapse Tool kan van de fotoserie een filmpje maken. De gratis versie is beperkt tot een resolutie van 480p, maar de betaalde versies gaan tot HD, Full HD en 4K. Je kunt er ook verschille­nde effecten mee toevoegen, zoals contrast aanpassen,...
 ??  ?? Na het kopiëren van de Raspbian-image naar het sd-kaartje kun je in de bootpartit­ie drie bestandjes zetten: met de gegevens van je wifinetwer­k, voor het activeren van ssh en het timelapses­cript.
Na het kopiëren van de Raspbian-image naar het sd-kaartje kun je in de bootpartit­ie drie bestandjes zetten: met de gegevens van je wifinetwer­k, voor het activeren van ssh en het timelapses­cript.
 ??  ?? Een drukknopje en een statusled zijn de minimale middelen om de Pi te bedienen. Via de opening aan de onderkant van de behuizing kun je die componente­n naar buiten leiden zonder de behuizing te beschadige­n.
Een drukknopje en een statusled zijn de minimale middelen om de Pi te bedienen. Via de opening aan de onderkant van de behuizing kun je die componente­n naar buiten leiden zonder de behuizing te beschadige­n.
 ??  ?? Een Pi Zero W in originele behuizing met camera en korte kabel.
Een Pi Zero W in originele behuizing met camera en korte kabel.
 ??  ??
 ??  ??
 ??  ??

Newspapers in Dutch

Newspapers from Netherlands