Kazalo:

Raspberry PI kamera in nadzor svetlobe Death Star: 5 korakov (s slikami)
Raspberry PI kamera in nadzor svetlobe Death Star: 5 korakov (s slikami)

Video: Raspberry PI kamera in nadzor svetlobe Death Star: 5 korakov (s slikami)

Video: Raspberry PI kamera in nadzor svetlobe Death Star: 5 korakov (s slikami)
Video: Моя работа наблюдать за лесом и здесь происходит что-то странное 2024, Julij
Anonim
Raspberry PI kamera in Death Star Star Control Light
Raspberry PI kamera in Death Star Star Control Light
Raspberry PI kamera in Death Star Star Control Light
Raspberry PI kamera in Death Star Star Control Light
Raspberry PI kamera in Death Star Star Control Light
Raspberry PI kamera in Death Star Star Control Light

Kot vedno si želim ustvariti uporabne, delujoče in trdno delujoče naprave in pogosto celo izboljšave v primerjavi s sedanjimi rešitvami.

Tu je še en odličen projekt, prvotno imenovan Shadow 0f Phoenix, Raspberry PI ščit v povezavi z zaznavanjem gibanja na osnovi Arduino in krmiljenjem svetlobe.

Korak: Stanje komercialnih IP kamer

Stanje komercialnih IP kamer
Stanje komercialnih IP kamer
Stanje komercialnih IP kamer
Stanje komercialnih IP kamer
Stanje komercialnih IP kamer
Stanje komercialnih IP kamer

Poleg tega, da je izdelava lastnega fotoaparata/nadzornega sistema bolj kul, poglejmo, zakaj je to izboljšava v primerjavi s standardno rešitvijo.

Primerjal ga bom s serijo brezžičnih IP -kamer NEO COOLCAM Full HD 1080P, saj imam v lasti veliko teh različnih modelov neo -cool kamer (ONVIF). Prihajajo v različnih oblikah in velikostih, na prostem in v zaprtih prostorih, večina jih ima vgrajeno podporo za wifi, vendar poglejmo njihova opozorila:

  • Kitajski proizvajalci, ki prodajajo te kamere, skoraj vedno lažejo o vgrajeni ločljivosti slikovnega senzorja. Ko kupite kamero s 5 MP/8 MP na Ebayu, lahko na koncu dobite poceni 2 MP kamero s slabo sliko (deluje, vendar je kakovost smeti). Ko kupite kamero 8MP Raspberry PI v2 pri prvotnem prodajalcu, boste dobili tisto, kar ste plačali, in dejansko tipalo 8MP z ločljivostjo 3280 × 2464 slikovnih pik =>
  • Z varnostnega vidika so te kamere (tudi dražji Dlink in drugi modeli) grozne, uporabljajo privzeta gesla, na primer 123456, ali vgrajene uporabnike, kot je administrator/skrbnik/operater, česar morda ne boste mogli spremeniti ali sprememba je izginila po ponovnem zagonu. Zaključite z mnogimi od teh kamer telefon doma (povežite se s strežniki na Kitajskem, nekateri celo pretočno predvajajo video posnetke/slike, ne da bi vas vprašali samo zato, da bi vam olajšali, če se boste nekega dne odločili namestiti njihovo aplikacijo za Android/iPhone za preverjanje doma). Tudi če te naprave postavite za usmerjevalnik, to ni dovolj dobro, najbolje je, če v njih ne nastavite privzetega prehoda, jih požarno ozadite ali postavite v VLAN, da jim onemogočite odhod na internet ali še bolje: sploh jih ne uporabljajte.
  • So bolj zanesljivi? ne, mnogi od njih, tudi dražji DLINK -ji, imajo možnost, da dnevno/tedensko znova zaženejo kamero itd. Ta možnost obstaja z razlogom, saj po X dneh pogosto izgubijo povezavo Wi -Fi ali se na druge načine obnašajo slabo. Pomislite nanje kot na dobre stare škatle Win95, ki jih je bilo treba pogosteje znova zagnati:) Ne pravim, da je strojna oprema na osnovi Raspija tako trdna, da jih lahko vgradite v nadzor jedrskih elektrarn, vendar z ustrezno strojno/programsko opremo konfiguracije, hladilniki, samodejni ventilatorji za hlajenje in zmanjšano delovanje RW na kartici SDCARD lahko brez težav dosežejo več kot 100 dni neprekinjenega delovanja. V času pisanja je moj DeathStar deloval že 34 dni, več kot 100, včasih pa sem vdrl v vir napajanja, ki napaja nekatera druga moja vezja, zato sem ga moral zapreti:(
  • Ciljna strojna oprema: izdelane so za en poseben namen, pogosto imajo majhno območje nvram in busybox, vendar nekateri modeli onemogočajo tudi dostop do te lupine, zato jih lahko uporabite le za tisto, za kar jih želite uporabiti uporabite kamero, ki temelji na Raspi, za katera koli druga opravila: datotečni strežnik, strežnik tftp/dhcp, spletni strežnik, stresen strežnik … možnosti so neomejene.
  • Prostor za shranjevanje: nimajo ga ali pa uporabljajo kartice microsd z datotečnim sistemom FAT32 VS na malinastem pismu, če želite, lahko priključite tudi 2 TB trdi disk.
  • Kontrolne luči: nekatere imajo izhod ALARM, kjer boste morda lahko priključili majhen rele, da se sprožijo luči. Kot vam bom pokazal v tem vodiču, uporaba infrardečih kamer pomeni popolno izgubo časa, saj zaradi slabe kakovosti ne boste mogli identificirati nikogar na IR slikah. Če morate posneti video v temi, je najbolje, da najprej prižgete svetlobo in nato posnamete video.

Zato se lahko vprašate, ali obstajajo kakšni PRO -ji za uporabo kamere, ki ni na voljo? Da, za podjetja, kjer bi bili delovni časi za njegovo nastavitev dražji, kot če bi se malčkali z Raspberry pisom (zame pa itak ne:)) in da, obstajajo vrhunske kamere (500 $+ z boljšo ločljivostjo od kamere pi seveda). Kot drugo prednost lahko rečem, da so kamere po standardu ONVIF olajšale centralizirano oskrbo. To zagotavlja standardni vmesnik, ki ga lahko uporabite za pošiljanje ukazov fotoaparatu za nastavitev njegove IP/omrežne maske/prehoda in drugih stvari. V ta namen lahko prenesete upravitelja naprav Onvif iz Sourceforge. Mnoge te naprave so opremljene z neumnimi pokvarjenimi spletnimi vmesniki, kjer na primer ne dovolite pravilne nastavitve IP -ja ali maske omrežja, ker javascript, ki potrjuje ta polja, ne deluje pravilno in edini način za pravilno nastavitev teh parametrov je ONVIF.

2. korak: Načrti Zvezde smrti

Načrti Zvezde smrti
Načrti Zvezde smrti
Načrti Zvezde smrti
Načrti Zvezde smrti
Načrti Zvezde smrti
Načrti Zvezde smrti

To napravo lahko sestavite s katerim koli Raspberry PI -jem od 1 do 3B+. Tudi nič ima vrata za kamero, a ker je na trgu toliko različnih rabljenih raspisov, se morda sprašujete, katera je najbolj idealna za to gradnjo.

Odgovor je odvisen od tega, kje želite obdelati video tok.

Obstajata dve izbiri:

1, Obdelujte videoposnetke lokalno z gibanjem in posnemite video tok, ko zazna gibanje (opomba: premikanje naprej počasi stalen tok na strežnik, ne glede na vse, to je lahko odvisno od ločljivosti in hitrosti sličic, ki jih uporabljate od nekaj sto megabajtov na več gigabajtov na dan, samo opomnik, če želite nastaviti nastavitev na merjeni povezavi). Tu je procesor pomemben in na žalost gibanje (v času pisanja) ne izkorišča več jeder, vendar bo OS poskušal rahlo uravnotežiti obremenitev. Pri 100% uporabi boste vedno imeli eno od jeder.

2, Obdelujte videoposnetke na osrednjem strežniku: tukaj samo posredujete surovi video tok iz kamere na zunanji strežnik za pretakanje (na primer iSpy, ki deluje na računalniku x86 ali MotionEyeOS, ki deluje na drugem namenskem mini računalniku). Ker lokalno ni obdelave, model PI, ki ga uporabljate, ni pomemben, bo PI1 poslal isti tok kot PI3B+.

V tej vadnici se bom odločil za prvo izbiro.

Splošno pravilo je, da hitrejši procesor, ki ga premikate, boljše rezultate boste dobili. Na primer, moja kamera, ki temelji na Raspi 2 in gleda na hodnik, je včasih ni opazila, ko je nekdo šel mimo in je med snemanjem snemanje potekalo počasi, pri čemer je v primerjavi s modelom 3. padlo veliko sličic. Model 3 ima tudi 802.11 abgn wifi, ki je priročen za pretakanje videoposnetkov višje kakovosti, deluje izven škatle in je precej zanesljiv. V času pisanja, da je model 3B+ izšel, vam priporočam, da to dobite s štirijedrnim procesorjem 1,4 Ghz.

Seznam materialov

  • 30 cm plastična DeathStar:)
  • Malina Pi 3 B+
  • PiCam v2 (8 MP)
  • Arduino Pro Micro 5.5v
  • 2x rele za reed stikalo SIP-1A05
  • 1x PCS HC-SR501 IR piroelektrični infrardeči IR PIR senzor zaznavanja gibanja modul
  • 1x 10kohm upor za LDR
  • 1x LDR
  • 1x12V 4A enosmerni adapter
  • 1xWarm bela LED 5050 SMD prilagodljiv svetlobni trak 12V DC
  • Regulator napetosti 1xBuck

Kot lahko vidite na shemah, je bil ta projekt prvotno zasnovan za krmiljenje ene same luči z enim relejem, ker nisem nameraval dodati notranje razsvetljave (kar je precej kul), zato sem na Arduino samo priključil drugi rele. Odlična stvar pri SIP-1A05 je, da ima notranjo letečo diodo in poraba v mA je precej pod Arduinovo omejitvijo moči na pin.

Razlog, zakaj je PIR na ščitu na slikah, ker je bilo na začetku S0P namesto v DeathStar nameščeno v preprosto plastično škatlo IP. Kot ste morda uganili, da je kamera neposredno v laserski pištoli, sta PIR in LDR potrebovala še druge izvrtane luknje, ki so z lepilom, ker jih ne nameravam odstraniti.

Na dnu DeathStar je bila izvrtana luknja, kjer sem z močnim dvokomponentnim lepilom zlepil velik vijak. To je mogoče priviti v originalno stojalo Neo Coolcams (vseeno je bilo za nekaj dobro:)). Za dodatno oporo sem uporabil trde bakrene žice, da bi imel oprijem na vrhu zvezde.

Pomembna opomba glede napajanja: ker bo isti vir napajal PI, Arduino in LED trak, mora biti dovolj močan, da lahko z njimi ravna, zato bo temeljil na LED traku, ki ste ga izbrali za projekt. Komercialni LED trak 5050 12v 3 meter odteka okoli 2A, to je veliko. Za PI in Arduino morate izračunati v +2A (čeprav to preveliko ne bo škodilo). Če uporabite LED trak preko standardnih halogenskih žarnic, neonske ali druge razsvetljave velike moči, lahko celotno vezje postavite na lepo 12V@10Ah svinčeno kislinsko baterijo kot rezervno, tako da bo delovala tudi v primeru izpada električne energije.

Buck bo znižal napetost z 12-> 5V za napajanje Arduina in PI, medtem ko je neposredni 12V napajalnik priključen na rele za vklop LED traku.

3. korak: programska oprema Arduino

Programska oprema Arduino
Programska oprema Arduino

Spodaj najdete celotno izvorno kodo, ki je dobro komentirana, a tukaj je kratka razlaga, kako deluje: Na začetku vsake zanke se pokliče običajna funkcija xcomm (), da se preveri, ali obstaja ukaz iz Raspberry PI, ki lahko je LIGHT_ON/OFF za vklop luči na hodniku ali DS_ON/OFF za vklop/izklop osvetlitve ozadja DeathStar, to sem uvedel zgolj zaradi popolnosti, saj naj jo kdo vzame in vklopi, če gre mimo PIR luči, morda pa si želite iz nekega razloga ogledati kraj, tudi ko ni nikogar.

Po tem se odčita vrednost fotocelice in preveri gibljivost nožice. Če pride do gibanja, koda preveri, ali je dovolj temno, nato pa preveri, ali nismo zadržani. Če vse to mine, preprosto prižge luč na hodniku in pošlje nazaj PHOENIX_MOTION_DETECTED v Raspberry PI, če ni dovolj temno, še vedno signalizira nazaj v računalnik, vendar ne prižge luči. Ko zazna gibanje, se zažene 5 -minutni časovnik zadrževanja.

Takoj za tem bo naslednji razdelek kode preveril, ali smo na čakanju (kar bi moralo biti, če je prišlo samo do dogodka gibanja, zato predpostavimo, da je minilo 5 minut, da lahko to preverjanje potrdimo). Koda preveri, ali je spet gibanje, če ne, ugasne luči. Kot lahko vidite, če ni gibanja, se bo ta funkcija vedno znova ponavljala in poskušala ugasniti luči, tako da do računalnika ni povratnih informacij.

Za notranjo razsvetljavo DeathStarja imamo še en časovnik, ki je popolnoma odvisen od fotoceliceReading <dark_limit.

Čeprav dve rutini ne vesta drug za drugega, bosta odlično delovala, saj ko se prižge luč na hodniku, zagotavlja toliko svetlobe, da bo LDR mislil, da je spet dan, in izklopi notranjo razsvetljavo. Vendar pa je bilo v zvezi s tem postopkom nekaj opozoril, ki so razložene v kodi, če vas zanima, če ne, potem odgovorite Nvidiji, da "samo deluje!".

4. korak: programska oprema Raspberry PI

Programska oprema Raspberry PI
Programska oprema Raspberry PI
Programska oprema Raspberry PI
Programska oprema Raspberry PI
Programska oprema Raspberry PI
Programska oprema Raspberry PI

Zadnji Raspbian dela zame:

Raspbian GNU/Linux 9.4 (raztezanje)

Linux Phoenix 4.9.35-v7+ #1014 SMP pet 30. junij 14:47:43 BST 2017 armv7l GNU/Linux ii motion 4.0-1 armhf V4L program za zajemanje, ki podpira zaznavanje gibanja

Čeprav lahko uporabljate druge distribucije, boste v primeru težav s kamero dobili podporo le, če uporabljate njihov uradni operacijski sistem. Zelo priporočljivo je tudi odstranjevanje nezaželene programske opreme, kot je systemd.

Gibanje je mogoče enostavno ustvariti tudi iz vira:

apt-get -y install autoconf automake pkgconf libtool libjpeg8-dev build-bistvena libzip-dev apt-get install libavformat-dev libavcodec-dev libavutil-dev libswscale-dev libavdevice-dev

apt-get -y install libavformat-dev libavcodec-dev libavutil-dev libswscale-dev libavdevice-dev apt-get -y install git git clone https://github.com/Motion-Project/motion cd motion/autoreconf -fiv. /configure --prefix =/usr/motion make && make install/usr/motion/bin/motion -v

Priporočam iSpy kot strežnik za snemanje videa/zbiranje. Na žalost v času pisanja ni dobrih alternativ za Linux. Kamero lahko dodate z URL -jem MJPEG https:// CAMERA_IP: 8081 privzeta vrata.

Obdelava gibanja je lahko uporabna, na primer ni vam treba ves dan gledati strežnika iSpy, v primeru gibanja lahko prejmete e -pošto. Čeprav ima iSpy to funkcijo za opozarjanje po e -pošti v primeru gibanja, občasno vklopi snemanje za različne dogodke, na primer, da se svetloba odbije na območje. Z zaznavanjem gibanja PIR nikoli nisem imel niti enega lažnega alarma. Opozorila je mogoče obdelati lokalno:

Na senzorju zaznan dogodek gibanja Pir> Arduino opozorilo> Raspberry pi prejme na konzoli> Program za obdelavo C> Zunanja aplikacija za pošto

Raje pa dnevnike in videoposnetke obdelujem na daljavo, zato sem v tem primeru dodal odsek nadzornemu programu C, medtem ko se dnevniki lokalno beležijo v datoteko z navadnim besedilom, tudi v sistemski dnevnik, ki se posreduje v SIEM za nadaljnjo obdelavo.

void logger (char *besedilo) {

FILE *f = fopen ("phoenix.log", "a"); if (f == NULL) {printf ("Napaka pri odpiranju datoteke dnevnika! / n"); vrnitev; } fprintf (f, " %s => %s / n", cur_time (0), besedilo); fclose (f); #ifdef SYSLOG char loggy [500]; sprintf (loggy, " %s => %s / n", cur_time (0), besedilo); setlogmask (LOG_UPTO (LOG_NOTICE)); openlog ("DeathStar", LOG_CONS | LOG_PID | LOG_NDELAY, LOG_USER); // syslog (LOG_NOTICE, "Program je zagnal uporabnik %d", getuid ()); syslog (LOG_NOTICE, loggy); closelog (); #endif vrnitev; }

Na sprejemnem koncu syslog-ng lahko razkrije te dogodke iz glavnega dnevnika:

filter f_phx {

match ("DeathStar"); }; destination d_phx {file ("/var/log/phoenix/deathstar.log"); }; dnevnik {vir (s_net); filter (f_phx); cilj (d_phx); };

in ga lahko posredujete drugemu orodju (motion.php glej priloženo) za analizo in opozarjanje.

V tem skriptu lahko preprosto nastavite običajni čas med tednom, ko niste doma:

$ opt ['alert_after'] = '09:00:00'; // Jutro $ opt ['alert_before'] = '17:00:00'; // Večeri

Program php uporablja odličen pripomoček za analizo dnevnikov.

$ cmd = "logtail -o". $ offsetfile. ' '. $ logfile.'> '. $ logfile2;

Logtail sledi položaju v datoteki offset, tako da glavnemu programu ni treba vedeti, od kdaj začeti gledati dnevnike, bodo na voljo najnovejši neobdelani podatki.

Motion.php je mogoče zagnati iz crontaba z majhnim trikom za vikende, ko bo šel skozi dnevnike, vendar ne bo potrebno nadaljnje obdelave.

*/5 * * * 1-5/usr/local/bin/php ~/motion.php &>/dev/null */5 * * * 6-7/usr/local/bin/php ~/motion.php vikend &>/dev/null

5. korak: Seznam težav in opravil

Seznam težav in opravil
Seznam težav in opravil
Seznam težav in opravil
Seznam težav in opravil

Če uporabljate Raspberry pi 3 ali novejši, lahko ta razdelek preskočite, teh težav najverjetneje ne boste več naleteli.

V preteklih letih sem imel nekaj težav s ploščami na osnovi Raspberry pi 2, ki bi lahko delovale z istim svežnjem programske opreme, vendar so bile kupljene ob različnih časih na različnih mestih. Po določenem časovnem obdobju, ki bi lahko trajalo 2 dni ali 20 dni, ko bi SSH vstopil v napravo, bi SSH samo visel, zato sta se demonski gib in lokalna koda C, ki je govorila z Arduinom, naložila v ram, zato je naprava delovala vendar v tem stanju ni bilo mogoče storiti ničesar drugega.

Po veliko odpravljanju težav sem prišel do rešitve:

homesync.sh

#!/bin/sh -e

### BEGIN INIT INFO # Omogoča: homesync # Zahtevan zagon: mountkernfs $ local_fs # Zahtevan-Stop: fotoaparat feniks # Privzeti zagon: S # Privzeti ustavitev: 0 6 # Kratek opis: Domači sinhronizator # Opis: Domači sinhronizator avtor NLD ### END INIT INFO NAME = home DESC = "Ramdisk Home Synchronizer" RAM = "/home/" DISK = "/realhome/" set -e case "$ 1" na začetku | naprej) echo -n "Starting $ DESC: "rsync -az --numeric -ids --delete $ DISK $ RAM &> /dev /null echo" $ NAME ".;; stop | back) echo -n "Ustavljanje $ DESC:" rsync -az --numeric -ids --delete $ RAM $ DISK &> /dev /null echo "$ NAME.";; *) echo "Usage: $ 0 {start | stop}" exit 1;; esac izhod 0

Skript gre skupaj s spremembo fstab:

tmpfs /home tmpfs rw, velikost = 80%, nosuid, nodev 0 0

Domača particija je nameščena kot ramdisk, kar bi prineslo približno 600 MB prostega prostora na Raspberry pi 2, kar je več kot dovolj za shranjevanje nekaterih binarnih datotek in majhnih datotek dnevnika:

tmpfs 690M 8,6M 682M 2% /dom

Izkazalo se je, da je PI hang pripisan operacijam pisanja na kartico SD, čeprav sem poskusil z različnimi karticami (Samsung EVO, Sandisk), ki so bile pred in po večkrat skenirane glede napak, pri drugih prenosnikih pa niso imele težav. prihaja. Z Raspberry PI 3s in višjo strojno opremo (še) nisem imel iste težave, zato jih tudi priporočam v tej vadnici.

Čeprav je trenutno gibanje za Raspberry PI 3 zame dovolj dobro, je tukaj nekaj idej, ki jih je vredno raziskati:

  1. Ne uporabljajte gibanja, ampak uporabite raspivid tok po omrežju in dovolite zmogljivemu strežniku, da zazna gibanje in kodira video (npr. ISpy). -> Težava: stalno povezovanje pasovne širine omrežja.
  2. Uporabite gibanje in pustite, da ffmpeg kodira video. -> Težava: CPE ne prenese večjih ločljivosti
  3. Uporabite gibanje, posnemite surovi video in pustite, da močan strežnik kodira. -> CPU na RPi je nizek, pasovna širina omrežja pa je omejena na dejansko gibanje. Za ta scenarij bi lahko za največjo zmogljivost zapisali na kartico SD/ramdisk in nato videoposnetek kopirali na drug strežnik.

Opozoril bi tudi, da je gradnjo tega projekta mogoče zgraditi brez Arduina. Vse komponente (releji, LDR, PIR) bi lahko bile nekako povezane z malinovim pi, vendar imam raje v realnem času mikrokrmilnike za interakcijo s senzorji in izhodnimi napravami. V primerih, ko je moj malinov pi na primer visel ali se je zrušil, je nadzor svetlobe, ki ga izvaja Arduino, deloval v redu.

Če vam je bil ta pouk všeč, ostanite z nami, saj bom naslednje leto nadaljeval serijo z mojo 360 -stopinjsko zunanjo kamero z malinami pi zero dome.

Priporočena: