Hlavní navigace

Noční lovy beze zbraní s Raspberry Pi

14. 9. 2015
Doba čtení: 7 minut

Sdílet

Oprášíme starší Raspberry Pi a použijeme ho k nahrávání video záznamu s automatickou detekcí pohybu v zorném poli kamery. Díky použití NoIR kamery a infračerveného světla uvidíme i v noci. A vyřešíme i nestabilitu Raspberry Pi při slabém zdroji hardwarovým rozšířením pro napájení libovolným napětím.

Možná máte, podobně jako já, doma starší verzi mikropočítače Raspberry Pi. Ještě tu před verzí „plus“ (která vylepšuje napájecí obvody). A nemáte pro něj žádné rozumné využití. Anebo znáte někoho, kdo se ho rád zbaví, protože si právě koupil jeho silnějšího bráchu se čtyřmi jádry a tento jednojádrový kousek vedle něj naráz vypadá zastaralý a k ničemu. Pokud ale k němu připojíte kameru, můžete si z něj jednoduše udělat šikovnou „video past“, která automaticky sleduje a nahrává život kolem nás. A když zvolíte „infra kameru“, přesněji kameru bez infračerveného filtru, získáte obraz i v noci, což začíná být teprve ta pravá zábava.

Mám Raspberry Pi verze 1 B bez plus.

Dlouhou dobu jsem se na Raspberry Pi snažil vyřešit streamování živého videa, ale ukázalo se to být mimořádně složitým úkolem. Po vyzkoušení několika slepých cest (patchnutý ffmpeg, crtmpserver, patchnutý mjpeg) a dosažení jen částečných úspěchů (nepříliš vysoký frame rate, složité přehrávání video streamu) jsem to odložil k ledu a začal vymýšlet alespoň nahrávání mnohahodinového videa na disk, abych mohl zaznamenat třeba celou noc a pak si ji ráno zrychleně prohlédnout.

Už už jsem byl rozhodnutý použít obyčejný raspistill, sejmout fotku co pět sekund a nakonec je slepit v jeden dlouhý zrychlený film, takže by 125 sekund reálného času bylo namačkáno do dvaceti pěti políček (tedy v jedné sekundě) filmu a celonoční záznam (8 hodin) by tak vyšel na komicky zrychlený čtyřminutový film. Díky tomu bych u toho nemusel přes den sedět celých 8 hodin při přehrávání celonočního videa a měl bych aspoň zběžnou představu, co se v noci před kamerou dělo. A nezabralo by to gigabajty místa.

Kamerka k Raspberry Pi bez IR filtru („NoIR“), takže vidí v noci.

Pak jsem ale narazil na motion - projekt zralý již 10 let, dodneška se nacházející v repozitářích všech distribucí. Někde na DropBoxu jsem našel verzi patchnutou pro kamerku v Raspberry Pi a rázem byl video záznam vyřešený – motion totiž automaticky nahrává jen pokud se něco v obrazu hýbe, což jsem pro noční video záznam přesně potřeboval. A navíc nabízí živý náhled (dostupný na http://raspberrypi:8081/), takže nemusím ani řešit streamování videa, pokud například potřebuji zamířit kameru na objekt/scénu. Paráda!

Mé Raspberry Pi s kamerkou a WiFi, v 3D vytištěných krabičkách.

Teď stačilo jen nainstalovat Raspberry Pi s kamerou před objekt či scénu, připojit infračervené osvětlení a rozjet záznam. Při testech na stole mi to fungovalo dobře, ale nakonec „v terénu“ mi to neuvěřitelně zlobilo – Raspberry Pi se odmlčelo vždycky ve chvíli, kdy se v zorném poli kamery něco pohnulo. Odmlčením myslím, že ztratilo IP konektivitu (připojeno přes Wi-Fi), takže jsem k němu musel dojít a fyzicky ho vypojit ze zdroje napájení a znovu zapojit. Toto kolečko jsem absolvoval třikrát, než mi došlo, že to určitě není náhoda.

Infračervené přisvětlení ke kameře.

Pro lidské oko IR LEDky jen nepatrně žhnou, když vestavěný fotorezistor detekuje tmu.

Chvíli jsem z výpadků podezříval rušení Wi-Fi signálu či dokonce padání ovladače Wi-Fi (se kterým jsou při upgradech linuxového jádra věčné problémy), ale nakonec jsem to intuitivně odhadl na slabé napájení. Raspberry Pi jsem totiž měl zapojené do zdroje pro mobilní telefon. Sice do velmi kvalitního zdroje, který je schopen dodávat při nabíjení telefonu 1 ampér bez mrknutí oka, ale kombinací dvoumetrové USB prodlužky a dalšího metrového USB-mikroUSB kabelu jsem nasbíral tolik odporu ve vedení, že při proudových nárazech způsobených začátkem záznamu z kamery (kdy Wi-Fi začne posílat fotky a video na server) se napětí na samotném Raspberry Pi propadlo kvůli ztrátám v napájecích USB kabelech pod kritickou hodnotu. Milé Raspberry Pi pak prostě a jednoduše vytuhlo.

Nedalo mi to a všechno jsem si proměřil. Dvoumetrová laciná USB prodlužka má součet odporů napájecích vodičů 1,2 ohmu, metrový mikroUSB kabel má nejspíš dalších minimálně 0,6 ohmu, tedy celkem 1,8 ohmu (není to zdaleka přesná hodnota, ale pro ilustraci postačí). Raspberry Pi s kamerkou a WiFi mi bere v klidu kolem 500 mA, takže ztráta napětí na takovémto třímetrovém vedení je 1,8 * 0,5 = 0,9 voltu. Z 5 V, které dodává zdroj od mobilu, se do Raspberry Pi dostane tedy jen (5 – 0,9) = 4,1 V. Copak se asi stane, když motion zaznamená pohyb a zvýší se proudový odběr, což zároveň zvýší i napěťovou ztrátu v napájecích kabelech? Situaci se mi nakonec povedlo zachytit na osciloskopu připojeném přímo na 5V rozvod na desce Raspberry Pi. Jak vidíte na fotce níže, napětí spadlo z 4,1 V až pod 3,5 V. Lineární regulátor typu NCP1117, který na Raspberry Pi staré revize snižuje napětí z 5 V na 3,3 V, má poměrně velký vlastní úbytek napětí (až 1,2 V), takže místo běžných pracovních 3,3 V dostalo v tu chvíli Raspberry Pi zřejmě méně než (3,5 – 1,2) = 2,3 V, a to už nemohlo zvládnout…

Chvilkový zničující pád napájecího napětí z 4,1 V pod 3,5 V

Usoudil jsem, že napájení Raspberry Pi přes jeho mikroUSB konektor je příliš nespolehlivé a začal vymýšlet lepší způsob. Rovnou jsem přitom chtěl vyřešit i napájení pro to infračervené osvětlení, které vyžaduje 12 V. Z toho mi logicky vyšlo, že napětí společného zdroje pro Raspberry Pi a osvětlení by mělo být také 12 V.

Pak už zbývalo jen vyřešit konverzi z 12 V na stabilních a silných 5 V. Myšlenku lineárního regulátoru, zahazujícího 12 – 5 = 7 V do kanálu (resp. proměňující v teplo), jsem ihned zavrhl a podíval se po step-down měničích napětí. Už v pár projektech jsem úspěšně použil Mini-360, tak jsem ho zvolil i tentokrát.

Mini-360 – menší než si myslíte.

Je mimořádně maličký (pouhých 11 × 17 mm) a přitom dokáže dodávat proud až 1,8 ampéru (špičkově až 3 A). Pracuje v širokém rozsahu vstupního napětí a výstupní se dá jednoduše nastavit trimrem. No a teď to nejlepší – stojí naprosto neuvěřitelných 61 amerických centů. Ano, 15 (slovy patnáct) korun českých. Najdete ho třeba na eBay.com či AliExpress.com pod názvem „Mini-360“.

Výstupní napětí je potřeba nastavit před zapájením do Raspberry Pi.

Vestavění tohoto modulu do Raspberry Pi byla hračka – stačilo ho připájet přímo na „nožičky“ (plošky) filtračního kondenzátoru u vstupu napájení do Raspberry Pi (na fotkách vpravo nahoře). Bezproblémovou funkčnost jsem právě ověřil, mám kompletní celonoční video záznam, bez jakýchkoliv výpadků.

Moje Raspberry Pi – napájecí část je vpravo nahoře.

Mini-360 již připájeno na vstupní kondenzátor.

Přesně tam pasuje, jako by tam vždycky patřilo.

Raspberry Pi teď můžu napájet jakýmkoliv zdrojem s napětím od 7 do 23 V, tedy například šesti AA články, nebo dvěma/třemi Li-Pol/Li-Ion články, ale v praxi nejspíš klasickým 12V olověným akumulátorem (jaký je třeba v automobilu nebo v UPS).

Když se nad tím zamýšlím, tak tohle napájení vyšším napětím mělo být v Raspberry Pi vestavěno od začátku, přímo z výroby, jako to má každé Arduino. Ušetřilo by to mnoha majitelům Malin vytrhané vlasy.

No a pak už stačilo jen postavit kameru i s infračerveným světlem před domeček, ve kterém bydlí naše morče a čekat, až motion detekuje pohyb a nahraje ho…

… jenže Kubík (to morče) měl za sebou asi náročný den a spal – tak jsem ho nakonec musel zavolat na kousek mrkve, aby ho motion viděl pohybovat se a začal nahrávat.

Pokud chcete také automaticky zaznamenávat, co se ve vašem okolí šustne, je to poměrně jednoduché a levné. Samotné Raspberry Pi první generace (které na daný úkol postačuje) se jako nové vyprodává za 25 dolarů, takže použité z druhé ruky bude nejspíš u nás k mání za méně než 500 korun.

Kamerka k němu stojí prakticky stejné peníze. Pro noční vidění chcete „NoIR“ verzi. Infračervené přisvětlení jsem koupil na eBay za 50 korun – najdete ho pod frází „Surveillance CCTV Camera IR Light Board 36pcs F5 5W LED Night Vision 30m“.

Měnič napětí je, jak už jsem psal, vyhledatelný pod frází „Mini-360“ a stojí pod dvacet korun. Zdroják ke krabičce pro Raspberry Pi a pro kamerku jsem našel na Thingiverse.com (před rokem – teď se mi nedaří dohledat je).

Paměťová karta v Raspberry Pi obsahuje standardní Raspbian, další instalace je dle výše zmíněného článku na Instructables.com, takže v podstatě jen apt-get install motion libjpeg62. Snímky a hotová videa motion ukládá na sdílený disk na mém domácím serveru, který mám přimountován na Raspberry Pi (přes CIFS, tedy Sambu). Konfiguraci motion jsem nechal výchozí, tedy dva snímky za sekundu, pokud se něco pohne, a 60 sekund nahrávání po té, co se něco pohnulo. Ještě jsem neměl čas to víc ladit, ale i takto jednoduše to funguje dost dobře.

root_podpora

Varování na závěr: Ano, nakopírovat blob odněkud z Dropboxu (místo z repozitářů Raspbianu) do /usr/bin/motion je docela riskantní. Ne, nemám ověřeno, jestli ten upravený motion „nevolá domů“, neotevírá zadní vrátka do mé LAN nebo neodesílá záznam ještě někam na Internet. Tohle by ještě chtělo vyřešit – zatím jsem oslovil autora binárky motion pro Raspberry Pi s žádostí o zdrojové kódy, a uvidíme.

Je dobré vědět, že motion z výchozí distribuce Raspbian funguje přes V4L2 API se všemi běžnými USB kamerkami, takže pokud k Raspberry Pi připojíte nějakou web kameru, problém s neověřeným blobem odpadá. A dokonce nemůžu ani vyloučit, že motion  z distribuce dnes (v roce 2015) už umí s kamerkou pro Raspberry Pi mluvit přes V4L2 přímo – to jsem konfigurovat ještě nezkoušel, ale podle informací na webu to původně (před dvěma lety) nefungovalo a bylo potřeba použít MMAL rozhraní, jak je rozebíráno například v 350 příspěvků dlouhém vláknu na RaspberryPi.org.

Byl pro vás článek přínosný?

Autor článku

Petr Stehlík vystudoval aplikovanou informatiku a pracuje jako vývojář webových aplikací a administrátor linuxových serverů. Provozuje vlastní server tvpc.cz.