Cuprins:

Camera Raspberry PI și controlul luminii Death Star: 5 pași (cu imagini)
Camera Raspberry PI și controlul luminii Death Star: 5 pași (cu imagini)

Video: Camera Raspberry PI și controlul luminii Death Star: 5 pași (cu imagini)

Video: Camera Raspberry PI și controlul luminii Death Star: 5 pași (cu imagini)
Video: Un film bazat pe fapte reale _ 2024, Iulie
Anonim
Camera Raspberry PI și controlul luminii Death Star
Camera Raspberry PI și controlul luminii Death Star
Camera Raspberry PI și controlul luminii Death Star
Camera Raspberry PI și controlul luminii Death Star
Camera Raspberry PI și controlul luminii Death Star
Camera Raspberry PI și controlul luminii Death Star

Ca întotdeauna, doresc să construiesc dispozitive care să fie utile, să funcționeze robust și deseori să fie chiar îmbunătățiri în comparație cu soluțiile actuale de pe raft.

Iată încă un alt proiect grozav, numit inițial Shadow 0f Phoenix, un scut Raspberry PI împreună cu detectarea mișcării bazate pe Arduino și controalele luminii.

Pasul 1: Starea camerelor IP comerciale

Starea camerelor IP comerciale
Starea camerelor IP comerciale
Starea camerelor IP comerciale
Starea camerelor IP comerciale
Starea camerelor IP comerciale
Starea camerelor IP comerciale

Pe lângă faptul că construirea propriului sistem de camere / supraveghere este mai interesant, să vedem de ce este o îmbunătățire dintr-o soluție de tip raft.

Îl voi compara cu seria de camere IP NEO COOLCAM Full HD 1080P fără fir, deoarece am deținut o mulțime de aceste diverse modele de camere neo coolcams (ONVIF). Ele vin în diferite forme și dimensiuni, în aer liber și în interior, cele mai multe dintre ele au încorporat suport wifi, dar să le vedem avertismentele:

  • Producătorii chinezi care vând aceste camere aproape întotdeauna mint despre rezoluția încorporată a senzorului de imagine, atunci când cumpărați o cameră de 5MP / 8MP pe Ebay s-ar putea să ajungeți la o cameră de 2MP ieftină cu o imagine proastă (funcționează, dar calitatea este gunoi). Când cumpărați camera Raspberry PI v2 de 8MP de la distribuitorul original, veți obține ceea ce ați plătit și senzorul real de 8MP cu rezoluția 3280 × 2464 pixeli =>
  • Din punct de vedere al securității, aceste camere (chiar și cele mai scumpe Dlink și alte modele) sunt teribile, folosesc parole implicite, cum ar fi 123456 sau utilizatorii încorporați, cum ar fi administratorul / administratorul / operatorul, ceea ce s-ar putea să nu puteți schimba sau schimbarea a dispărut după o repornire. Completați-le cu multe dintre aceste camere de telefon la domiciliu (conectați-vă la serverele lor din China, unele chiar transmit fluxuri video / imagini fără a vă cere doar să vă ușurați în cazul în care decideți să instalați aplicația lor Android / Iphone într-o zi pentru a vă verifica Acasă). Chiar dacă puneți aceste dispozitive în spatele unui router, nu este suficient de bun, cel mai bun este dacă nu setați un gateway implicit în ele, le firewall sau le puneți într-un VLAN pentru a le face imposibil să iasă la Internetul sau chiar mai bine: nu le folosiți deloc.
  • Sunt mai fiabili? nu, mulți dintre ei chiar și DLINK-urile mai scumpe au opțiunea de a reporni camera zilnic / săptămânal etc. Această opțiune există acolo dintr-un motiv, deoarece după X zile pierd adesea conectivitatea Wifi sau se comportă greșit în alte moduri. Gândiți-vă la ele ca la niște cutii vechi Win95 bune care trebuiau repornite mai des decât:) Nu spun că hardware-ul bazat pe Raspi este atât de solid, încât le puteți construi în centrale nucleare de control, dar cu hardware / software adecvat configurație, radiatoare, ventilatoare automate de răcire și funcționare minimă RW pe SDCARD, pot atinge cu ușurință acele 100+ zile de funcționare fără probleme. La momentul scrierii, DeathStar rulează de 34 de zile, treceam de peste 100, dar uneori făceam hacking pe sursa de alimentare care alimentează alte circuite, așa că a trebuit să o opresc:(
  • Hardware vizate: sunt realizate pentru un scop specific, adesea vin cu o mică zonă nvram și busybox, dar unele modele fac și accesul acestui shell imposibil, așa că tot ce le poți folosi este pentru ce au fost utilizate pentru cât poți utilizați camera dvs. bazată pe Raspi pentru orice alte sarcini: server de fișiere, server tftp / dhcp, server web, server de cutremur … opțiunile sunt nelimitate.
  • Spațiu de stocare: fie nu au, fie folosesc carduri microsd cu sistem de fișiere FAT32 VS pe raspberry pis, puteți atașa chiar și un hard disk de 2 TB, dacă doriți.
  • Controlul luminilor: unele au o ieșire ALARMĂ unde puteți conecta un releu mic pentru a declanșa luminile. După cum vă voi arăta în acest tutorial, utilizarea camerelor cu infraroșu este o pierdere completă de timp, deoarece nu veți putea identifica pe nimeni pe imaginile IR din cauza calității proaste. Dacă trebuie să înregistrați un videoclip în întuneric, cel mai bun mod de a face acest lucru este să aprindeți mai întâi o lumină, apoi să înregistrați videoclipul.

Așadar, s-ar putea să întrebați dacă există PRO-uri de utilizare a camerei de pe raft? Da, pentru companiile în care programul de lucru pentru configurare ar fi mai scump decât să joci cu Raspberry pis (oricum nu pentru mine:)) și da, există camere de top (500 $ + cu rezoluție mai bună decât camera pi curs). Ca un alt avantaj, aș putea spune că camerele care respectă standardul ONVIF au facilitat aprovizionarea centralizată. Aceasta oferă o interfață standard ce poate fi utilizată pentru a trimite comenzi către cameră pentru a seta IP / masca de rețea / Gateway și alte lucruri. Pentru aceasta, puteți descărca managerul de dispozitive Onvif de la Sourceforge. Multe dintre aceste dispozitive sunt dotate cu frontend-uri web sparte, de exemplu, unde nu vă permite să setați corect IP-ul sau masca de rețea, deoarece javascriptul care validează aceste câmpuri nu funcționează corect, iar singurul mod de a seta acești parametri corect este prin ONVIF.

Pasul 2: Planurile stelei morții

Planurile Stelei Morții
Planurile Stelei Morții
Planurile Stelei Morții
Planurile Stelei Morții
Planurile Stelei Morții
Planurile Stelei Morții

Puteți construi acest dispozitiv cu oricare dintre Raspberry PI începând de la 1 la 3B +. Chiar și zero are porturi pentru cameră, dar din moment ce există pe piață atât de multe raspis second hand, s-ar putea să vă întrebați care este cel mai ideal pentru această construcție.

Răspunsul depinde de unde doriți să procesați fluxul video.

Există două opțiuni:

1, Procesați videoclipurile local cu mișcare și transmiteți un flux video atunci când este detectată mișcare (notă: mișcarea transmite un flux lent lent către server indiferent de ce, acest lucru poate fi în funcție de rezoluție și de ratele de cadre pe care le utilizați mergând de la câteva sute de megaocteți la mai mulți gigaocteți pe zi, doar un memento dacă doriți să faceți o configurare pe o conexiune măsurată). Aici CPU-ul contează și din păcate mișcarea (la momentul scrierii) nu profită de mai multe nuclee, totuși sistemul de operare va încerca să echilibreze ușor încărcarea. Veți avea întotdeauna unul dintre nuclee cu utilizare 100%.

2, Procesați videoclipurile pe un server central: aici pur și simplu redirecționați fluxul video brut de la cameră către un server de streaming extern (cum ar fi iSpy care rulează pe un computer x86 sau MotionEyeOS care rulează pe un alt minicomputer dedicat). Deoarece nu există procesare locală, modelul PI pe care îl utilizați nu contează, un PI1 va trimite același flux ca un PI3B +.

În acest tutorial voi merge cu prima alegere.

Regula generală este că, cu cât CPU aruncă mai rapid la mișcare, cu atât veți obține rezultate mai bune. De exemplu, camera mea bazată pe Raspi 2, care se uita la un coridor, uneori nu o ridica atunci când cineva trecea repede și când înregistra înregistrarea era lent, scăpând o mulțime de cadre în comparație cu modelul 3. Modelul 3 are și 802.11 abgn wifi care vine la îndemână pentru a putea reda în flux videoclipuri de calitate superioară, funcționează din cutie și este destul de fiabil. În momentul în care scriem că modelul 3B + este în afara, aș recomanda doar să obțineți acest lucru cu un procesor de 1,4 Ghz Quad Core.

Lista materialelor

  • 30 cm plastic DeathStar:)
  • Raspberry Pi 3 B +
  • PiCam v2 (8MP)
  • Arduino Pro Micro 5.5v
  • 2x SIP-1A05 releu comutator Reed
  • 1x PCS HC-SR501 IR Piroelectric cu infraroșu IR PIR Modul detector senzor de mișcare
  • 1x rezistor de 10 kohm pentru LDR
  • 1x LDR
  • 1x12V 4A adaptor DC
  • 1x LED alb 5050 SMD bandă de lampă cu lumină flexibilă 12V DC
  • 1xBuck regulator de tensiune

După cum puteți vedea pe schemă, acest proiect a fost inițial conceput pentru a controla o singură lumină cu un releu, deoarece nu intenționam să adăugați iluminare internă (ceea ce este destul de cool), așa că am conectat un al doilea releu la Arduino. Lucrul grozav despre SIP-1A05 este că are diodă internă flyback și consumul în mA este mult sub limitarea puterii Arduino per pin.

Motivul pentru care PIR este pe scutul de pe imagini, deoarece la început S0P a fost planificat să fie introdus într-o cutie simplă de plastic IP în loc de DeathStar. După cum ați putea ghici, camera este direct în pistolul cu laser, PIR și LDR au avut nevoie de alte găuri găsite și sunt lipite, deoarece nu intenționez să le îndepărtez.

O gaură a fost forată în partea de jos a DeathStar, unde am lipit într-un bolț mare cu un adeziv puternic cu 2 componente. Acest lucru poate fi înșurubat în suportul original Neo Coolcams (până la urmă a fost bun pentru ceva:)). Pentru un sprijin suplimentar, folosesc fire de cupru dure pentru a avea o prindere pe vârful stelei.

Notă importantă despre sursa de alimentare: deoarece aceeași sursă va alimenta atât PI, Arduino, cât și banda LED, trebuie să fie suficient de puternic pentru a le putea manipula pe toate, astfel încât să se bazeze pe banda LED pe care o alegeți pentru proiect. O bandă comercială 5050 12v 3meter LED se scurge în jurul valorii de 2A, asta este mult. Pentru PI și Arduino trebuie să calculați în + 2A (deși acest lucru este supradimensionat, nu va strica). Folosind banda LED peste becurile cu halogen standard, neon sau alte sisteme de iluminat de mare putere, puteți pune acest circuit într-o baterie plumb acid de 12V @ 10Ah ca rezervă, astfel încât să funcționeze chiar și în cazul unei întreruperi de curent.

Buck va reduce tensiunea de la 12-> 5V pentru alimentarea Arduino și PI în timp ce alimentarea directă de 12V este conectată la releu pentru a porni banda LED.

Pasul 3: Software Arduino

Software Arduino
Software Arduino

Puteți găsi codul sursă complet mai jos, care este bine comentat, dar iată o scurtă explicație a modului în care funcționează: La începutul fiecărei bucle se apelează funcția obișnuită xcomm () pentru a vedea dacă există o comandă venită de la Raspberry PI care poate fi LIGHT_ON / OFF pentru a aprinde luminile de pe coridor sau DS_ON / OFF pentru a activa / dezactiva iluminarea din spate a DeathStar, le-am implementat doar de dragul unei perfecțiuni excesive, deoarece dacă cineva trece pe lângă PIR ar trebui să o ridice și să o aprindă luminile, dar poate că vrei să te uiți la locul din anumite motive chiar și atunci când nimeni nu este acolo.

După aceasta, valoarea fotocelulei citită și pinul de mișcare sunt verificate pentru mișcare. Dacă există mișcare, codul verifică dacă este suficient de întunecat, atunci verifică dacă nu suntem în așteptare. Dacă toate acestea trec, atunci pur și simplu aprinde lumina coridorului și trimite înapoi PHOENIX_MOTION_DETECTED către Raspberry PI, dacă nu este suficient de întunecat, semnalează înapoi către computer, dar nu aprinde lumina. Odată detectată o mișcare, este pornit un temporizator de 5 minute.

Imediat după aceasta, următoarea secțiune de cod va verifica dacă suntem în așteptare (ceea ce ar trebui să fie cazul dacă a existat doar un eveniment de mișcare, deci să presupunem cele 5 minute trecute, astfel încât această verificare să poată confirma). Codul verifică dacă există din nou mișcare, dacă nu, apoi stingeți luminile. După cum puteți vedea dacă nu există mișcare, această funcție se repetă mereu și încearcă să oprească luminile, astfel încât să nu existe feedback la computer.

Avem un alt timer de așteptare pentru iluminarea internă a DeathStar, care depinde pur și simplu de fotocelulaReading <dark_limit.

Deși cele 2 rutine nu știu unul de celălalt, ele vor funcționa perfect împreună, deoarece atunci când se aprinde lumina coridorului, aceasta oferă atât de multă lumină încât LDR va crede că este din nou ziua și stinge iluminarea internă. Cu toate acestea, au existat câteva avertismente cu privire la acest proces, care sunt explicate în cod dacă sunteți interesat, dacă nu, atunci luați răspunsul Nvidia că „doar funcționează!”.

Pasul 4: Software Raspberry PI

Software Raspberry PI
Software Raspberry PI
Software Raspberry PI
Software Raspberry PI
Software Raspberry PI
Software Raspberry PI

Cea mai recentă Raspbian funcționează pentru mine:

Raspbian GNU / Linux 9.4 (stretch)

Linux Phoenix 4.9.35-v7 + # 1014 SMP Vin 30 iunie 14:47:43 BST 2017 armv7l GNU / Linux ii motion 4.0-1 armhf V4L program de captare care susține detectarea mișcării

Deși puteți utiliza alte distribuții, dacă întâmpinați probleme cu camera, veți primi asistență din partea echipei numai dacă utilizați sistemul lor de operare oficial. Îndepărtarea bloatware-urilor nedorite, cum ar fi systemd, este de asemenea foarte recomandată.

Mișcarea poate fi construită cu ușurință de la sursă:

apt-get -y install autoconf automake pkgconf libtool libjpeg8-dev build-essential 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

Recomand iSpy ca server de înregistrare / colecție video. Din păcate, la momentul scrierii, nu există alternative bune pentru Linux. Camera poate fi adăugată cu un URL MJPEG https:// CAMERA_IP: 8081 portul implicit.

Procesarea mișcării poate fi utilă, de exemplu, nu trebuie să continuați să priviți serverul iSpy toată ziua, puteți primi un e-mail în caz de mișcare. Deși iSpy are această funcționalitate pentru a alerta în e-mail în caz de mișcare, activează înregistrarea din când în când pentru evenimente diverse, cum ar fi o anumită lumină reflectată în zonă. Cu detectarea mișcării PIR nu am avut niciodată o singură alarmă falsă. Alertele pot fi procesate local:

Eveniment de mișcare Pir detectat pe senzor> Alertă Arduino> Raspberry pi primește pe consolă> Program de procesare C> Aplicație de poștă externă

Cu toate acestea, prefer să procesăm atât jurnalele, cât și videoclipurile de la distanță, așa că, în acest caz, am adăugat o secțiune la programul de control C, în timp ce înregistrează jurnalele local într-un fișier text simplu, le înregistrează și în syslog și care este redirecționat într-un SIEM pentru procesare ulterioara.

void logger (caractere * text) {

FIȘIER * f = fopen ("phoenix.log", "a"); if (f == NULL) {printf ("Eroare la deschiderea fișierului jurnal! / n"); întoarcere; } fprintf (f, "% s =>% s / n", cur_time (0), text); fclose (f); #ifdef SYSLOG char loggy [500]; sprintf (loggy, "% s =>% s / n", cur_time (0), text); setlogmask (LOG_UPTO (LOG_NOTICE)); openlog ("DeathStar", LOG_CONS | LOG_PID | LOG_NDELAY, LOG_USER); // syslog (LOG_NOTICE, "Program pornit de utilizatorul% d", getuid ()); syslog (LOG_NOTICE, loggy); closelog (); #endif return; }

La capătul de recepție syslog-ng poate demux aceste evenimente din fluxul principal de jurnal:

filtru f_phx {

meci ("DeathStar"); }; destinație d_phx {fișier ("/ var / log / phoenix / deathstar.log"); }; log {sursa (s_net); filtru (f_phx); destinație (d_phx); };

și poate fi transmis unui alt instrument (motion.php vezi atașat) pentru analiză și alertă.

În acest script puteți seta pur și simplu ora obișnuită în timpul săptămânii când nu sunteți acasă:

$ opt ['alert_after'] = '09:00:00'; // Dimineața $ opt ['alert_before'] = '17:00:00'; // Seare

Programul php utilizează excelentul utilitar logtail pentru a analiza jurnalele.

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

Logtail urmărește poziția într-un fișier offset, astfel încât programul principal nu trebuie să știe de la ce moment să înceapă să se uite la jurnale, acesta va fi furnizat cu cele mai recente date neprelucrate.

Motion.php poate fi rulat de pe crontab cu un mic truc pentru weekenduri, când va trece prin jurnale, dar nu mai face nicio procesare.

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

Pasul 5: Probleme și Listă de rezolvări

Probleme și Listă de rezolvări
Probleme și Listă de rezolvări
Probleme și Listă de rezolvări
Probleme și Listă de rezolvări

Dacă utilizați Raspberry pi 3 sau mai nou, puteți sări peste această secțiune, cel mai probabil nu veți mai întâmpina aceste probleme.

De-a lungul anilor am avut unele probleme cu plăcile bazate pe Raspberry pi 2, ceea ce ar putea rula aceeași stivă de software, dar au fost achiziționate în momente diferite din locuri diferite. După o anumită perioadă de timp, care ar putea fi de 2 zile sau 20 de zile când SSH-ul pe dispozitiv SSH-ul ar fi atârnat, așa că atât demonul de mișcare, cât și codul local C care vorbea cu Arduino au fost încărcate în ram, de aceea dispozitivul funcționa dar era imposibil să mai faci altceva cu ea în această stare.

După o mulțime de depanări, am găsit o soluție:

homesync.sh

#! / bin / sh -e

### BEGIN INIT INFO # Oferă: homesync # Required-Start: mountkernfs $ local_fs # Required-Stop: camera phoenix # Default-Start: S # Default-Stop: 0 6 # Short-Description: Home synchronizer # Description: Home synchronizer de NLD ### END INIT INFO NAME = home DESC = "Ramdisk Home Synchronizer" RAM = "/ home /" DISK = "/ realhome /" set -e case "$ 1" in start | forward) echo -n "Starting $ DESC: "rsync -az --numeric-ids --delete $ DISK $ RAM &> / dev / null echo" $ NAME. ";; stop | back) echo -n "Oprirea $ DESC:" rsync -az --numeric-ids --delete $ RAM $ DISK &> / dev / null echo "$ NAME.";; *) ecou „Utilizare: $ 0 {start | stop}” ieșirea 1;; esac ieșire 0

Scriptul merge împreună cu o modificare fstab:

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

Partiția de pornire este montată sub formă de disc ram, care ar produce aproximativ 600 MB spațiu liber pe Raspberry pi 2, care este mai mult decât suficient pentru a stoca unele binare și fișiere jurnal mici:

tmpfs 690M 8.6M 682M 2% / acasă

S-a dovedit că blocarea PI a fost atribuită operațiunilor de scriere de pe cardul SD, deși am încercat diferite carduri (Samsung EVO, Sandisk) care au fost scanate pentru erori de mai multe ori înainte și după și nu au avut nicio problemă pe alte laptopuri. venind. Nu am avut aceeași problemă (încă) cu Raspberry PI 3 și hardware-ul superior, deci de aceea le recomand în acest tutorial.

Deși mișcarea actuală pe un Raspberry PI 3 este suficient de bună pentru mine, iată câteva idei demne de explorat:

  1. Nu utilizați mișcare, ci folosiți un flux raspivid prin rețea și lăsați un server puternic să facă detecția mișcării și codificarea video (de exemplu, iSpy). -> Problemă: lățimea de bandă de rețea constantă.
  2. Utilizați mișcarea și lăsați ffmpeg să facă codificarea video. -> Problemă: CPU nu poate rezolva rezoluțiile mai mari
  3. Folosiți mișcare, înregistrați videoclipuri brute și lăsați un server puternic să facă codificarea. -> Utilizarea procesorului pe RPi este redusă, iar lățimea de bandă a rețelei este limitată la momentul în care există mișcare reală. Pentru acest scenariu am putea scrie pe un card SD / ramdisk pentru randament maxim și apoi să creăm o copie a videoclipului pe alt server.

Aș mai nota că construirea acestui proiect este posibilă construirea fără un Arduino. Toate componentele (relee, LDR, PIR) ar putea fi conectate la raspberry pi într-un fel, dar prefer microcontrolerele în timp real să interacționeze cu senzorii și dispozitivele de ieșire. În cazurile în care piul meu de zmeură atârna de exemplu sau se prăbușea, controlul luminii rulat de Arduino a funcționat foarte bine.

Dacă ți-a plăcut acest lucru instructiv, ai rămas la curent, deoarece anul viitor voi continua seria cu camera mea de 360 de grade cu zmeură în aer liber cu zmeură pi zero.

Recomandat: