Raspberry Pi Infrarood Camera

Raspberry Pi Logo

Maart 2016: 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 staat goede uitleg op deze Raspberry 'getting started with the camera' pagina, ook met Python voorbeelden. Samen met een paar 3 Watt 850nm 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!

Aanzetten van de camera

Helaas, bij een recente (2020) poging de camera te her-installeren met de laatste 'Buster' versie van Raspberry OS gaat het goed mis. Alles werkt prima, tot ik de camera enable (via sudo rasp-config). Als ik dan herstart, lijkt het systeem te werken, maar krijg ik geen Ethernet verbinding (hoewel de LEDs suggereren dat de verbinding op is)... Als ik dan de backup (gemaakt net voor het aanzetten van de camera) weer terugzet op de SD-kaart werkt alles weer. Camera aan--> weer dood. Gaat dus iets mis met aanmaken van de instellingen voor de camera. Nu heb ik 'slechts' een Raspberry Pi 1 in gebruik voor de camera, met beperkt geheugen. Zou daar de fout kunnen zitten?

Als je de camera aanzet, wordt gelijk ook video-geheugen voor 128 MB gereserveerd. En dat is wat veel voor de RPi1. Handmatig op mijn laptop de /boot/config.txt file ge-edit (na op de Raspberry aanzetten van de camera), van gpu_mem=128 heb ik gemaakt gpu_mem=64. En ja, nu start de Pi weer, en een foto of video maken zoals hieronder beschreven werkt. Nog te testen: zou 32MB ook genoeg zijn, scheelt weer werkgeheugen? Toch lijkt er genoeg vrij te zijn; free geeft 95MB available.

Stilstaande beelden

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

# 1 second delay, quality 75, no-preview (-vf en -hf draaien het beeld 180 graden in geval van montage op de kop)
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 Raspbian versie kreeg je foutmeldingen (is weg op nieuwere versies) omdat je de videohardware alleen met sudo goed kon 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> 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), en een veel hogere processor-belasting:

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 camera 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. De enable ingang van deze module is aangesloten op de GPIO17 pin van de Raspberry, kan dus onder software-controle worden aan- en uitgezet.

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 maar nu met 4 LEDs, 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 19V laptop-voeding.