Raspberry Pi Infrarood Camera

Raspberry Pi Logo

Ook de Pi NOIR infrarood camera aangeschaft (€40 bij Conrad). Dit is dezelfde als de normale Raspberry camera, maar dan zonder ingebouwd infrarood-blokkerend filter. Er staan goede uitleg op deze Raspberry camera pagina. Samen met een paar 3 Watt infrarood-LEDs als lichtbron heb je zo een leuke nachtkijker. Dat was ook de reden voor de aanschaf: eens kijken wat dat gerommel op het platte dak van onze slaapkamer 's nachts toch is... Zie verderop voor de resultaten!

Stilstaande beelden

Ik heb geen HDMI monitor aan mijn Raspberry hangen (hangt alleen maar aan Ethernet), dus als ik een foto maak moet ik die eerst overhalen (bijvoorbeeld met ftp via FileZilla). Foto nemen kan je met:

# 1 second delay, quality 75, no-preview
raspistill -v -t 1000 -w 1280 -h 960 -q 75 -o test.jpg -n
# In het donker: 6 seconden sluitertijd, ruisonderdrukking etc
raspistill -t 1000 -ex night -mm average -ev 8 -q 14 -ifx denoise -ss 6000000 -o current.jpg -n

Ps afhankelijk van de Raspberry versie (voor mij de oude 1B): krijg je foutmeldingen, omdat je je videohardware alleen met sudo goed kan aanspreken? Om ook als gewone gebruiker toegang te hebben moet je eenmalig wat extra instellingen doen (en een reset):

sudo echo 'SUBSYSTEM=="vchiq",GROUP="video",MODE="0660"' > /etc/udev/rules.d/10-vchiq-permissions.rules
sudo usermod -a -G video kees; # zelf toevoegen aan de groep 'video'

Video streaming test

Movement detected!
De eerste detectie...

Het leuke is dat de camera zelfs bij video nauwelijks rekenkracht vraagt, bij 10 Mb/s H264 is de CPU maar een paar procent met video bezig omdat het meeste werk door de video-accelerator van de Broadcom-chip gedaan wordt (de zwaarste load is de SSH-verbinding vanwege de encryptie, 10%). Twee mogelijkheden:

1. Op de Raspberry video met netcat streamen naar bijvoorbeeld poort 5001, en dit op Ubuntu oppikken en doorgeven naar mplayer gaat bij mij het best. Bij de instellingen hieronder zelfs met vrij kleine vertraging (latency):

# uitvoeren op de Ubuntu (of andere linux PC):
# eenmalig: sudo apt-get install mplayer netcat
# en vergeet niet de poort op je firewall open te zetten!
nc -l 0.0.0.0 5001 | mplayer -fps 40 -cache 512 -
# uitvoeren op de raspberry:
raspivid -t 999999 -w 1280 -h 960 -o - | nc -v <ip_van_je_ubuntu_machine> -p 5001

2. Kan ook in een keer vanaf Ubuntu door het raspivid commando remote op te starten, maar dit geeft bij mij een latency van ongeveer 1 seconde (onderstaande is één regel):

ssh -p <je_ssh_poort> pi@<ip_van_je_raspberry> raspivid -t 1000000000 -b 10000000 -w 1280 -h 960 -o - -fps 40 -ex night | mplayer -fps 40 -cache 512 -

Motion detection

Steenmarter?
En daar is'ie dan... 9 april 2015
Compositie van drie opnames (er is dus maar een marter)

En nu de bewegingsdetectie... Hier ging het me uiteindelijk om: wat stommelt er 's nachts op het dak?

Met het recept op Setting up Wireless motion-detect cam heb ik motion en mmal geïnstalleerd, config aangepast (bijvoorbeeld rotate 180 omdat de kamera ondersteboven is gemonteerd) en starten met ./motion-mmal -n -c motion-mmalcam.conf.

Hiermee is op een browser (behalve Chrome) te zien wat de Raspberry ziet (adres: http://<adres_van_je_pi>:8081) in de vorm van MJPEG, inclusief een kader rond de beweging (in de motion config file de optie: locate on). Bovendien wordt er van de scene een avi-filmpje gemaakt zodat je het ook later terug kunt kijken, en niet 's nachts wakker hoeft te blijven. Ik laat deze filmpjes direct naar de netwerkschijf wegschrijven, omdat de SD-card vrij snel vol zou zijn (is mijn 'reserve-Raspberry' met een SDcard van maar 4 GB).
Steenmarter?
Nog een foto (klik voor groter)

Links een van de eerste detecties :-) . En rechts het eerste echte nachtresultaat (compositie van meerdere opnames)... Het lijkt een kleine rover, zo te zien zou het wel eens een steenmarter kunnen zijn. Waar zou'ie wonen (we horen/zien hem lang niet elke nacht, dus zal hier wel gewoon op rooftocht zijn)? Leuk, wonen hier echt dicht bij de natuur! Van mij mag'ie blijven (maar liefst niet in mijn huis...).

Helaas is de infrarood-LED niet zo heel sterk, dus de opnames 's nachts zijn vaak bewogen en nogal donker. Met wat extra LEDs (nu 5 stuks, dus zo'n 15 Watt in totaal) worden de plaatjes beter, zie de muis hieronder die ook voor de camera verscheen..


Alleen 's nachts

Een muis voor de camera
Muis voor de camera

Overdag wil ik de camera niet aan hebben, en de infrarood LEDs al helemaal niet. Ik heb dus een 'cron'-taak gemaakt die de opname in de avond start, en een tweede die deze in de ochtend weer stopt. Ook worden de LEDs hierdoor aan en uitgezet. Op de stroombron voor de LEDs zit een 'enable'-ingang waarmee deze aan en uit te zetten is, via een opto-coupler heb ik deze aan een GPIO van de Raspberry geknoopt.

Met 'crontab -e' kan je de lijst taken bijwerken. Ik heb de volgende twee regels toegevoegd, die om 21:03 de opnames starten, en weer om 6:66 stoppen (op dit moment goede tijden met zonsop- en ondergang):

# m h  dom mon dow   command
03 21   * * *   /home/kees/scripts/startircam
33 6    * * *   /home/kees/scripts/stopircam

In het script startircam wordt de LED aangezet, en de opname gestart (en nog een en ander gedaan, naar de goede folder gaan en checken of de opname al loopt, soms start ik hem eerder met de hand). De twee basisregels uit het script startircam zijn:

sudo sh -c 'echo "0" >/sys/class/gpio/gpio17/value'
./motion-mmal -n -c motion-mmalcam-opt.conf >>/home/kees/scripts/ircam.log 2>&1 &

Stoppen gaat vergelijkbaar, opname stoppen met pkill motion-mmal en de LED weer uit zetten.

De hardware

En hier komt nog een meer gedetaileerde beschrijving van de setup, met schema en plaatjes...

IR Led met constante-stroombron
Constante-stroombron en LED op koelvin

De LED is een '3W InfraRed LED 850nm IR Emitter on 2cm Star' (DealExtreme €3.09). Let op, de 940nm-versie is niet geschikt omdat de kamera veel ongevoeliger is op die golflengte. Werkt samen met een als constante-stroombron ingestelde geschakelde voeding 'Buck Constant voltage Constant Current Module' (DealExtreme $5.61). Deze is ingesteld op 1.75A, wat samen met de 1.66 Volt over de LED 2.9 Watt oplevert. Aangesloten op 5 Volt trekt dit ruim 600 mA. Monteer de LED op een koellichaam.

Niet direct in de LED kijken: je oog ziet het infrarood niet, en trekt de pupil niet dicht, maar het kan wel je oog beschadigen! Je ziet de LED iets rood opgloeien als'ie aan is (net op de rand van je gezichtsveld), da's wel handig.

Het geheel is met de Raspberry Pi 1B in een kastje gemonteerd (nou ja, eigenlijk een lege ijsemmer, had zo snel niets anders bij de hand). Hier zit ook de constant-current module zoals hierboven genoemd, en een regelaar van 12..20 Volt naar 5 Volt voor de Raspberry zelf. Vanaf dit kastje loopt een Ethernetkabel via een ventilatiekier in het raam naar mijn netwerk in huis. Over de Ethernetkabel loopt ook de stroomvoorziening, met behulp van een Chinese 'Power over Ethernet splitter'. Heeft niets met echte Power over Ethernet van doen, maar gebruikt de vier ongebruikte draadjes (bij 100 Mb/s) in de kabel om de voeding over te leiden. In huis is deze aangesloten op een oude laptop-voeding.