Spisu treści:

Raspberry PI Camera i Light Control Death Star: 5 kroków (ze zdjęciami)
Raspberry PI Camera i Light Control Death Star: 5 kroków (ze zdjęciami)

Wideo: Raspberry PI Camera i Light Control Death Star: 5 kroków (ze zdjęciami)

Wideo: Raspberry PI Camera i Light Control Death Star: 5 kroków (ze zdjęciami)
Wideo: 3D hologram fan portrait solution. Who wanna date this holographic sexy lady #3dhologramfan 2024, Lipiec
Anonim
Kamera Raspberry PI i Gwiazda Śmierci Kontroli Światła
Kamera Raspberry PI i Gwiazda Śmierci Kontroli Światła
Kamera Raspberry PI i Gwiazda Śmierci Kontroli Światła
Kamera Raspberry PI i Gwiazda Śmierci Kontroli Światła
Kamera Raspberry PI i Gwiazda Śmierci Kontroli Światła
Kamera Raspberry PI i Gwiazda Śmierci Kontroli Światła

Jak zawsze staram się budować urządzenia, które są użyteczne, działają solidnie, a często są nawet ulepszeniami w porównaniu z obecnymi rozwiązaniami z półki.

Oto kolejny świetny projekt, pierwotnie nazwany Shadow 0f Phoenix, osłona Raspberry PI w połączeniu z wykrywaniem ruchu i sterowaniem oświetleniem opartym na Arduino.

Krok 1: Stan komercyjnych kamer IP

Stan komercyjnych kamer IP
Stan komercyjnych kamer IP
Stan komercyjnych kamer IP
Stan komercyjnych kamer IP
Stan komercyjnych kamer IP
Stan komercyjnych kamer IP

Poza tym, że budowanie własnego systemu kamer/nadzoru jest fajniejsze, zobaczmy, dlaczego jest to ulepszenie z gotowego rozwiązania.

Porównam go z serią bezprzewodowych kamer IP NEO COOLCAM Full HD 1080P, ponieważ posiadałem wiele różnych modeli kamer neo coolcams (ONVIF). Występują w różnych kształtach i rozmiarach, na zewnątrz i wewnątrz, większość z nich ma wbudowaną obsługę Wi-Fi, ale zobaczmy ich zastrzeżenia:

  • Chińscy producenci, którzy sprzedają te aparaty, prawie zawsze kłamią na temat wbudowanej rozdzielczości przetwornika obrazu, kupując aparat 5MP/8MP w serwisie eBay, możesz otrzymać tani aparat 2MP ze złym obrazem (działa, ale jakość jest śmieciowa). Kupując kamerę 8MP Raspberry PI v2 od oryginalnego sprzedawcy otrzymujesz to, za co zapłaciłeś oraz rzeczywisty czujnik 8MP o rozdzielczości 3280 × 2464 pikseli =>
  • Z punktu widzenia bezpieczeństwa te kamery (nawet droższe Dlink i inne modele) są okropne, używają domyślnych haseł, takich jak 123456 lub wbudowanych użytkowników, takich jak admin/admin operator/operator, czego możesz nawet nie być w stanie zmienić lub zmiana zniknęła po ponownym uruchomieniu. Uzupełnij to wieloma z tych aparatów telefonicznych w domu (połącz się z ich serwerami w Chinach, niektóre nawet przesyłają strumieniowo wideo/zdjęcia bez pytania tylko o to, aby ułatwić, jeśli zdecydujesz się zainstalować ich aplikację na Androida/iPhone'a pewnego dnia, aby sprawdzić swoje Dom). Nawet jeśli umieścisz te urządzenia za routerem, to po prostu nie jest wystarczająco dobre, najlepiej, jeśli nie ustawisz w nich domyślnej bramy, zapory ogniowej lub umieścisz je w sieci VLAN, aby uniemożliwić im wyjście do Internet, a nawet lepiej: w ogóle ich nie używaj.
  • Czy są bardziej niezawodne? nie, wiele z nich, nawet droższe DLINK, mają opcję codziennego/tygodniowego restartu kamery itp. Ta opcja jest nie bez powodu, ponieważ po X dniach często tracą łączność Wi-Fi lub zachowują się niewłaściwie na inne sposoby. Pomyśl o nich jak o starych dobrych skrzynkach Win95, które musiały być częściej uruchamiane ponownie niż nie:) Nie mówię, że sprzęt oparty na Raspi jest tak solidny, że można je wbudować do sterowania elektrowniami jądrowymi, ale z odpowiednim sprzętem/oprogramowaniem konfiguracja, radiatory, automatyczne wentylatory chłodzące i zminimalizowane działanie RW na SDCARD mogą z łatwością osiągnąć ponad 100 dni bezawaryjnej pracy bez problemu. W chwili pisania tego tekstu mój DeathStar działa od 34 dni, miał ponad 100, ale czasami grzebałem w źródle zasilania, które zasila inne moje obwody, więc musiałem go wyłączyć:(
  • Ukierunkowany sprzęt: są one wykonane w jednym konkretnym celu, często mają mały obszar nvram i busybox, ale niektóre modele uniemożliwiają również dostęp do tej powłoki, więc wszystko, do czego możesz ich użyć, to to, do czego miały być używane, póki możesz używaj aparatu opartego na Raspi do wszelkich innych zadań: serwera plików, serwera tftp/dhcp, serwera WWW, serwera quake… opcje są nieograniczone.
  • Przestrzeń dyskowa: albo nie mają, albo używają kart microsd z systemem plików FAT32 VS na malinowym pisaku, możesz nawet podłączyć dysk twardy 2 TB, jeśli chcesz.
  • Sterowanie światłami: niektóre mają wyjście ALARM, do którego można podłączyć mały przekaźnik, aby włączyć światła. Jak pokażę w tym samouczku, używanie kamer na podczerwień to kompletna strata czasu, ponieważ nie będziesz w stanie zidentyfikować nikogo na zdjęciach IR ze względu na złą jakość. Jeśli chcesz nagrać wideo w ciemności, najlepszym sposobem na to jest najpierw włączenie światła, a następnie nagranie wideo.

Możesz więc zapytać, czy są jakieś zalety korzystania z aparatu z półki? Tak dla firm, w których godziny pracy związane z konfiguracją byłyby droższe niż majstrowanie przy Raspberry pis (w każdym razie nie dla mnie:)) i tak, są kamery z najwyższej półki (500 $+ z lepszą rozdzielczością niż kamera pi kierunek). Jako kolejną zaletę mogę powiedzieć, że kamery zgodne ze standardem ONVIF ułatwiły scentralizowane udostępnianie. Zapewnia to standardowy interfejs, który może być używany do wysyłania poleceń do kamery, aby ustawić jej IP/maskę sieci/bramę i inne rzeczy. W tym celu możesz pobrać menedżera urządzeń Onvif z Sourceforge. Wiele z tych urządzeń ma brzydkie, zepsute frontendy internetowe, które na przykład nie pozwalają na prawidłowe ustawienie adresu IP lub maski sieci, ponieważ skrypt java, który weryfikuje te pola, działa nieprawidłowo, a jedynym sposobem na prawidłowe ustawienie tych parametrów jest użycie ONVIF.

Krok 2: Plany Gwiazdy Śmierci

Plany Gwiazdy Śmierci
Plany Gwiazdy Śmierci
Plany Gwiazdy Śmierci
Plany Gwiazdy Śmierci
Plany Gwiazdy Śmierci
Plany Gwiazdy Śmierci

Możesz zbudować to urządzenie z dowolnym Raspberry PI od 1 do 3B+. Nawet zero ma porty kamery, ale ponieważ na rynku jest tak wiele różnych używanych raspisów, możesz się zastanawiać, który jest najbardziej idealny dla tej konfiguracji.

Odpowiedź zależy od tego, gdzie chcesz przetworzyć strumień wideo.

Są dwie możliwości:

1, Przetwarzaj filmy lokalnie za pomocą ruchu i przesyłaj strumień wideo po wykryciu ruchu (uwaga: ruch przesyła powolny stały strumień do serwera bez względu na wszystko, może to zależeć od rozdzielczości i szybkości klatek, których używasz, począwszy od kilku od stu megabajtów do wielu gigabajtów dziennie, tylko przypomnienie, jeśli chcesz wykonać konfigurację połączenia taryfowego). Tutaj procesor ma znaczenie i niestety ruch (w momencie pisania) nie wykorzystuje wielu rdzeni, jednak system operacyjny będzie próbował nieco zrównoważyć obciążenie. Zawsze będziesz miał jeden z rdzeni na 100% wykorzystania.

2, Przetwarzaj filmy na centralnym serwerze: tutaj po prostu przekazujesz nieprzetworzony strumień wideo z kamery do zewnętrznego serwera strumieniowego (np. iSpy działającego na komputerze x86 lub MotionEyeOS działającego na innym dedykowanym minikomputerze). Ponieważ nie ma przetwarzania lokalnie, używany model PI nie ma znaczenia, PI1 wyśle ten sam strumień, co PI3B+.

W tym samouczku przejdę do pierwszego wyboru.

Ogólna zasada jest taka, że im szybszy procesor wrzucisz w ruch, tym lepsze wyniki uzyskasz. Na przykład moja kamera oparta na Raspi 2 patrząca na korytarz czasami nie wyłapywała go, gdy ktoś przechodził szybko, a podczas nagrywania nagrywanie było powolne, tracąc dużo klatek w porównaniu do modelu 3. Model 3 również ma 802.11. abgn wifi, które przydaje się, aby móc przesyłać strumieniowo wideo o wyższej jakości, działa po wyjęciu z pudełka i jest dość niezawodne. W chwili pisania tego tekstu, że model 3B+ jest już dostępny, po prostu poleciłbym, abyś otrzymał go z czterordzeniowym procesorem 1,4 GHz.

Lista materiałów

  • 30 cm plastikowa Gwiazda Śmierci:)
  • Raspberry Pi 3B+
  • PiCam v2 (8MP)
  • Arduino Pro Micro 5.5v
  • 2x przekaźnik kontaktronowy SIP-1A05
  • 1x PCS HC-SR501 IR piroelektryczny moduł detektora ruchu na podczerwień IR PIR
  • 1x rezystor 10kohm dla LDR
  • 1x LDR
  • Zasilacz 1x12 V 4A DC
  • 1 x Ciepła biała dioda LED 5050 SMD Elastyczna listwa świetlna 12 V DC
  • 1xBuck regulator napięcia

Jak widać na schemacie, projekt ten został pierwotnie zaprojektowany do sterowania jednym pojedynczym światłem za pomocą jednego przekaźnika, ponieważ nie planowałem dodawania oświetlenia wewnętrznego (co jest całkiem fajne), więc po prostu podłączyłem drugi przekaźnik do Arduino. Wspaniałą rzeczą w SIP-1A05 jest to, że ma wewnętrzną diodę flyback, a zużycie w mA jest znacznie poniżej ograniczenia mocy na pin Arduino.

Powód, dla którego PIR jest na tarczy na zdjęciach, ponieważ na początku S0P planowano umieścić w prostym plastikowym pudełku IP zamiast DeathStar. Jak można się domyślić kamera jest bezpośrednio w pistolecie laserowym PIR i LDR potrzebowały kolejnych wywierconych otworów i są naklejane, bo nie zamierzam ich usuwać.

W dolnej części DeathStara wywiercono otwór, w którym wkleiłem dużą śrubę mocnym dwuskładnikowym klejem. Można to wkręcić w oryginalną podstawkę Neo Coolcams (przecież na coś się przydało:)). Jako dodatkową podporę używam twardych drutów miedzianych, aby utrzymać górę gwiazdy.

Ważna uwaga na temat zasilacza: ponieważ ten sam zasilacz będzie zasilał zarówno PI, Arduino, jak i taśmę LED, musi być wystarczająco mocny, aby móc obsłużyć je wszystkie, więc będzie oparty na taśmie LED, którą wybierzesz do projektu. Komercyjna taśma LED 5050 12v 3meter pobiera około 2A, to dużo. Dla PI i Arduino trzeba liczyć w +2A (choć to przewymiarowanie to nie zaszkodzi). Używanie taśmy LED nad standardowymi żarówkami halogenowymi, neonami lub innym oświetleniem o dużej mocy polega na tym, że cały obwód można umieścić na ładnym akumulatorze kwasowo-ołowiowym 12V@10Ah jako zapasowym, dzięki czemu będzie działał nawet w przypadku awarii zasilania.

Dolar obniży napięcie z 12-> 5 V do zasilania Arduino i PI, podczas gdy bezpośrednie zasilanie 12 V jest podłączone do przekaźnika, aby włączyć pasek LED.

Krok 3: Oprogramowanie Arduino

Oprogramowanie Arduino
Oprogramowanie Arduino

Poniżej znajduje się pełny kod źródłowy, który jest dobrze skomentowany, ale oto krótkie wyjaśnienie, jak to działa: Na początku każdej pętli wywoływana jest zwykła funkcja xcomm(), aby sprawdzić, czy istnieje polecenie pochodzące z Raspberry PI, które może być LIGHT_ON/OFF, aby włączyć światła w korytarzu lub DS_ON/OFF, aby włączyć/wyłączyć podświetlenie DeathStar, zaimplementowałem je tylko dla perfekcji, ponieważ jeśli ktoś przechodzi obok PIR, powinien je podnieść i włączyć światła, ale może z jakiegoś powodu chcesz spojrzeć na to miejsce, nawet gdy nikogo tam nie ma.

Następnie odczytywana jest wartość fotokomórki i trzpień ruchu jest sprawdzany pod kątem ruchu. Jeśli jest ruch, kod sprawdza, czy jest wystarczająco ciemno, a następnie sprawdza, czy nie jesteśmy zawieszeni. Jeśli to wszystko minie, po prostu włącza światło w korytarzu i wysyła z powrotem PHOENIX_MOTION_DETECTED do Raspberry PI, jeśli nie jest wystarczająco ciemno, nadal wysyła sygnał z powrotem do komputera, ale nie włącza światła. Po wykryciu ruchu uruchamiany jest 5-minutowy timer wstrzymania.

Zaraz po tym następna sekcja kodu sprawdzi, czy nie jesteśmy zawieszeni (co powinno mieć miejsce, jeśli wystąpiło tylko zdarzenie ruchu, więc załóżmy, że minęło 5 minut, aby ta kontrola mogła potwierdzić). Kod sprawdza, czy znowu jest ruch, jeśli nie, wyłącz światła. Jak widać, jeśli nie ma ruchu, ta funkcja będzie się powtarzać w kółko, próbując wyłączyć światła, aby nie było sprzężenia zwrotnego do komputera.

Mamy inny zegar wstrzymania wewnętrznego oświetlenia DeathStar, który zależy wyłącznie od odczytu fotokomórki < dark_limit.

Chociaż te dwie procedury nie wiedzą o sobie nawzajem, będą ze sobą doskonale współpracować, ponieważ kiedy światło w korytarzu zapala się, daje tak dużo światła, że LDR pomyśli, że znowu jest dzień i wyłączy oświetlenie wewnętrzne. Istnieją jednak pewne zastrzeżenia dotyczące tego procesu, które są wyjaśnione w kodzie, jeśli jesteś zainteresowany, jeśli nie, weź odpowiedź Nvidii, że „po prostu działa!”.

Krok 4: Oprogramowanie Raspberry PI

Oprogramowanie Raspberry PI
Oprogramowanie Raspberry PI
Oprogramowanie Raspberry PI
Oprogramowanie Raspberry PI
Oprogramowanie Raspberry PI
Oprogramowanie Raspberry PI

U mnie działa najnowszy Raspbian:

Raspbian GNU/Linux 9.4 (rozciągliwy)

Linux Phoenix 4.9.35-v7+ #1014 SMP piątek 30 czerwca 14:47:43 BST 2017 armv7l GNU/Linux ii motion 4.0-1 armhf V4L program do przechwytywania obsługujący wykrywanie ruchu

Chociaż możesz korzystać z innych dystrybucji, jeśli napotkasz jakiekolwiek problemy z aparatem, otrzymasz wsparcie od zespołu tylko wtedy, gdy używasz ich oficjalnego systemu operacyjnego. Zaleca się również usuwanie niepożądanego oprogramowania typu bloatware, takiego jak systemd.

Ruch można również łatwo zbudować ze źródła:

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

Polecam iSpy jako rejestrator wideo/serwer kolekcjonerski. Niestety w chwili pisania tego tekstu nie ma dobrych alternatyw dla Linuksa. Kamerę można dodać za pomocą adresu URL MJPEG https://CAMERA_IP:8081 jako portu domyślnego.

Przetwarzanie ruchu może być przydatne, na przykład nie musisz patrzeć na serwer iSpy przez cały dzień, możesz otrzymać wiadomość e-mail w przypadku ruchu. Chociaż iSpy ma tę funkcję, aby ostrzegać w wiadomościach e-mail w przypadku ruchu, od czasu do czasu włącza nagrywanie w przypadku różnych zdarzeń, takich jak odbicie światła w obszarze. Dzięki wykrywaniu ruchu PIR nigdy nie miałem ani jednego fałszywego alarmu. Alerty mogą być przetwarzane lokalnie:

Wykryto zdarzenie ruchu Pir na czujniku > Alarm Arduino > Raspberry pi odbiera na konsoli > Program do przetwarzania C > Zewnętrzna aplikacja pocztowa

Wolę jednak przetwarzać zarówno dzienniki, jak i filmy zdalnie, więc w tym przypadku dodałem sekcję do programu sterującego C, aby podczas lokalnego rejestrowania dzienników w zwykłym pliku tekstowym, rejestrował go również w syslog i który jest przekazywany do SIEM dla dalsze przetwarzanie.

void logger(char *text) {

PLIK *f = fopen("phoenix.log", "a"); if (f == NULL) { printf("Błąd podczas otwierania pliku dziennika!\n"); powrót; } fprintf(f, "%s => %s\n", cur_time(0), text); fzamknij(f); #ifdef SYSLOG char loggy[500]; sprintf(loggy, "%s => %s\n", cur_time(0), tekst); setlogmask (LOG_UPTO (LOG_NOTICE)); openlog („Gwiazda Śmierci”, LOG_CONS | LOG_PID | LOG_NDELAY, LOG_USER); //syslog (LOG_NOTICE, "Program uruchomiony przez użytkownika %d", getuid ()); syslog (LOG_NOTICE, loggy); closelog (); #endif powrót; }

Po stronie odbierającej syslog-ng może demultipleksować te zdarzenia z głównego strumienia dziennika:

filtruj f_phx{

match("Gwiazda Śmierci"); }; cel d_phx { plik("/var/log/phoenix/deathstar.log"); }; log { źródło(s_net); filtr(f_phx); cel(d_phx); };

i może być przekazany do innego narzędzia (motion.php patrz w załączeniu) w celu analizy i alarmowania.

W tym skrypcie możesz po prostu ustawić zwykłą godzinę w tygodniu, kiedy nie ma Cię w domu:

$opt['alert_after']='09:00:00'; // Poranki$opt['alert_before']='17:00:00'; // Wieczory

Program php wykorzystuje doskonałe narzędzie logtail do analizowania dzienników.

$cmd = "logtail -o".$offsetfile.' '.$plik_dziennika.'>'.$plik_dziennika2;

Logtail śledzi pozycję w pliku offsetowym, dzięki czemu program główny nie musi wiedzieć, od kiedy zacząć przeglądać logi, ponieważ otrzyma najnowsze nieprzetworzone dane.

Motion.php można uruchomić z crontab z małą sztuczką na weekendy, kiedy przejdzie przez logi, ale nie będzie dalej przetwarzać.

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

Krok 5: Problemy i lista rzeczy do zrobienia

Problemy i lista rzeczy do zrobienia
Problemy i lista rzeczy do zrobienia
Problemy i lista rzeczy do zrobienia
Problemy i lista rzeczy do zrobienia

Jeśli używasz Raspberry pi 3 lub nowszego, możesz pominąć tę sekcję, najprawdopodobniej nie napotkasz już tych problemów.

Przez lata miałem pewne problemy z płytami opartymi na Raspberry pi 2, które mogły obsługiwać ten sam stos oprogramowania, ale były kupowane w różnym czasie z różnych miejsc. Po pewnym czasie, który może wynosić 2 dni lub 20 dni, gdy SSH w urządzeniu SSH po prostu się zawiesił, więc zarówno demon ruchu, jak i lokalny kod C, który rozmawiał z Arduino, zostały załadowane do pamięci RAM, dlatego urządzenie działało ale w tym stanie nie można było z nim zrobić nic więcej.

Po wielu rozwiązywaniu problemów wymyśliłem rozwiązanie:

homesync.sh

#!/bin/sh -e

### BEGIN INIT INFO # Zapewnia: homesync # Wymagane-Start: mountkernfs $local_fs # Wymagane-Stop: camera phoenix # Domyślne-Start: S # Domyślne-Stop: 0 6 # Krótki opis: Synchronizator domu # Opis: Synchronizator domu przez NLD ### END INIT INFO NAME=home DESC="Ramdisk Home Synchronizer" RAM="/home/" DISK="/realhome/" ustaw -e przypadek "$1" na początku|forth) echo -n "Uruchamianie $ DESC: " rsync -az --numeric-ids --delete $DISK $RAM &> /dev/null echo "$NAME.";; stop|back) echo -n "Zatrzymywanie $DESC: " rsync -az --numeric-ids --delete $RAM $DISK &> /dev/null echo "$NAME.";; *) echo "Użycie: $0 {start|stop}" exit 1;; esac wyjście 0

Skrypt idzie w parze z modyfikacją fstab:

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

Partycja domowa jest zamontowana jako ramdysk, co dałoby około 600 MB wolnego miejsca na Raspberry pi 2, co jest więcej niż wystarczające do przechowywania niektórych plików binarnych i małych plików dziennika:

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

Okazało się, że zawieszenie PI zostało przypisane operacjom zapisu na karcie SD, chociaż próbowałem różnych kart (Samsung EVO, Sandisk), które były wielokrotnie skanowane pod kątem błędów przed i po i nie miały problemu w innych laptopach to było po prostu nadchodzi. Nie miałem tego samego problemu (jeszcze) z Raspberry PI 3 i wyższym sprzętem, dlatego też polecam je w tym samouczku.

Chociaż obecny ruch na Raspberry PI 3 jest dla mnie wystarczająco dobry, oto kilka pomysłów, które warto zbadać:

  1. Nie używaj ruchu, ale używaj raspivid strumienia przez sieć i pozwól wydajnemu serwerowi wykonać detekcję ruchu i kodowanie wideo (np. iSpy). -> Problem: ciągła przepustowość sieci.
  2. Użyj ruchu i pozwól ffmpeg wykonać kodowanie wideo. -> Problem: CPU nie radzi sobie z wyższą rozdzielczością
  3. Użyj ruchu, nagrywaj surowe wideo i pozwól, aby potężny serwer wykonał kodowanie. -> Użycie procesora na RPi jest niskie, a przepustowość sieci jest ograniczona do rzeczywistego ruchu. W tym scenariuszu moglibyśmy zapisać na karcie SD/ramdysku, aby uzyskać maksymalną przepustowość, a następnie skopiować plik wideo na inny serwer.

Chciałbym również zauważyć, że zbudowanie tego projektu jest możliwe do zbudowania bez Arduino. Wszystkie komponenty (przekaźniki, LDR, PIR) można by w jakiś sposób podłączyć do raspberry pi, ale wolę mikrokontrolery czasu rzeczywistego do interakcji z czujnikami i urządzeniami wyjściowymi. W przypadkach, w których moja raspberry pi zawieszała się na przykład lub uległa awarii, sterowanie oświetleniem prowadzone przez Arduino działało dobrze.

Jeśli podobała Ci się ta instrukcja, pozostań dostrojony, ponieważ będę kontynuował serię z moją kamerą kopułkową 360-stopniową raspberry pi zero w przyszłym roku.

Zalecana: