Inhoudsopgave:

Raspberry PI-camera en lichtregeling Death Star - Ajarnpa
Raspberry PI-camera en lichtregeling Death Star - Ajarnpa

Video: Raspberry PI-camera en lichtregeling Death Star - Ajarnpa

Video: Raspberry PI-camera en lichtregeling Death Star - Ajarnpa
Video: Dead Easy Raspberry Pi Time-Lapse Tutorial 2024, Juli-
Anonim
Raspberry PI-camera en lichtregeling Death Star
Raspberry PI-camera en lichtregeling Death Star
Raspberry PI-camera en lichtregeling Death Star
Raspberry PI-camera en lichtregeling Death Star
Raspberry PI-camera en lichtregeling Death Star
Raspberry PI-camera en lichtregeling Death Star

Zoals altijd ben ik op zoek naar apparaten die nuttig zijn, robuust werken en vaak zelfs verbeteringen zijn in vergelijking met de huidige kant-en-klare oplossingen.

Hier is nog een ander geweldig project, oorspronkelijk genaamd Shadow 0f Phoenix, een Raspberry PI-schild in combinatie met op Arduino gebaseerde bewegingsdetectie en lichtbesturing.

Stap 1: De staat van commerciële IP-camera's

De staat van commerciële IP-camera's
De staat van commerciële IP-camera's
De staat van commerciële IP-camera's
De staat van commerciële IP-camera's
De staat van commerciële IP-camera's
De staat van commerciële IP-camera's

Naast dat het bouwen van je eigen camera/bewakingssysteem nog cooler is, laten we eens kijken waarom dit een verbetering is ten opzichte van een standaardoplossing.

Ik zal het vergelijken met de NEO COOLCAM Full HD 1080P draadloze IP-cameraserie, aangezien ik veel van deze verschillende modellen neo coolcams (ONVIF) camera's heb gehad. Ze zijn er in verschillende soorten en maten, buiten en binnen, de meeste hebben ingebouwde wifi-ondersteuning, maar laten we eens kijken naar hun kanttekeningen:

  • Chinese fabrikanten die deze camera's verkopen liegen bijna altijd over de ingebouwde resolutie van de beeldsensor, wanneer je een 5MP/8MP camera op Ebay koopt, zou je kunnen eindigen met een goedkope 2MP camera met slecht beeld (het werkt maar de kwaliteit is rotzooi). Wanneer u de 8MP Raspberry PI v2-camera bij de oorspronkelijke winkelier koopt, krijgt u waar u voor hebt betaald en een daadwerkelijke 8MP-sensor met de resolutie 3280 × 2464 pixels =>
  • Vanuit veiligheidsoogpunt zijn deze camera's (zelfs de duurdere Dlink en andere modellen) verschrikkelijk, ze gebruiken standaard wachtwoorden zoals 123456 of ingebouwde gebruikers zoals admin/admin operator/operator wat je misschien niet eens kunt veranderen of de verandering is verdwenen na een herstart. Maak het af met veel van deze camera's die naar huis bellen (maak verbinding met hun servers in China, sommige streamen zelfs video / foto's terug zonder u te vragen, alleen om het gemakkelijker te maken voor het geval u op een dag besluit hun Android / iPhone-app te installeren om te controleren op uw huis). Zelfs als je deze apparaten achter een router plaatst, is het gewoon niet goed genoeg, het beste is als je er geen standaardgateway in zet, ze uit de firewall haalt of ze in een VLAN plaatst om het voor hen onmogelijk te maken om naar buiten te gaan. internet of nog beter: gebruik ze helemaal niet.
  • Zijn ze betrouwbaarder? nee, veel van hen, zelfs de duurdere DLINK's, hebben de mogelijkheid om de camera dagelijks/wekelijks opnieuw op te starten, enz. Die optie is er met een reden, want na X dagen verliezen ze vaak wifi-connectiviteit of gedragen ze zich op andere manieren. Zie ze maar als goede oude Win95-boxen die vaker wel dan niet opnieuw moesten worden opgestart:) Ik zeg niet dat de op Raspi gebaseerde hardware zo solide is dat je ze kunt inbouwen in kerncentrales, maar met de juiste hardware/software configuratie, koellichamen, automatische koelventilatoren en geminimaliseerde RW-werking op de SDCARD kunnen ze probleemloos die 100+ dagen uptime halen. Op het moment van schrijven is mijn DeathStar sinds 34 dagen actief, meer dan 100, maar soms was ik aan het hacken op de voedingsbron die een aantal andere van mijn circuits van stroom voorziet, dus moest ik het afsluiten:(
  • Gerichte hardware: ze zijn gemaakt voor 1 specifiek doel, hebben vaak een klein nvram-gebied en een busybox, maar sommige modellen maken de toegang van deze shell ook onmogelijk, dus het enige waar je ze voor kunt gebruiken, is waarvoor ze bedoeld zijn, zolang je kunt gebruik uw op Raspi gebaseerde camera voor alle andere taken: bestandsserver, tftp/dhcp-server, webserver, aardbevingsserver… de opties zijn onbeperkt.
  • Opslagruimte: ze hebben er geen of ze gebruiken microsd-kaarten met FAT32-bestandssysteem VS op de Raspberry Pis, je kunt zelfs een harde schijf van 2 TB aansluiten als je wilt.
  • Verlichting aansturen: sommige hebben een ALARM-uitgang waarop u mogelijk een klein relais kunt aansluiten om de verlichting te laten activeren. Zoals ik je in deze tutorial zal laten zien, is het gebruik van infraroodcamera's complete tijdverspilling, omdat je vanwege de slechte kwaliteit niemand op de IR-foto's kunt identificeren. Als u een video in het donker wilt opnemen, kunt u dit het beste doen door eerst wat licht aan te doen en vervolgens de video op te nemen.

Dus je kunt je afvragen of er voordelen zijn aan het gebruik van een kant-en-klare camera? Ja voor bedrijven waar de werkuren om het op te zetten duurder zouden zijn dan knutselen met Raspberry pis (in ieder geval niet voor mij:)) en ja, er zijn eersteklas camera's (500 $ + met een betere resolutie dan de pi-camera van Cursus). Als een ander voordeel zou ik kunnen zeggen dat de camera's die de ONVIF-standaard volgden, gecentraliseerde provisioning gemakkelijker maakten. Dit biedt een standaard interface die kan worden gebruikt om commando's naar de camera te sturen om het IP/Netwerkmasker/Gateway en andere dingen in te stellen. Hiervoor zou je de Onvif device manager van Sourceforge kunnen downloaden. Veel van deze apparaten worden geleverd met waardeloze, kapotte webfrontends, waarbij je bijvoorbeeld het ip of netmask niet correct kunt instellen omdat het javascript dat deze velden valideert niet goed werkt en je enige manier om deze parameters correct in te stellen via ONVIF is.

Stap 2: Plannen van de Death Star

Plannen van de Death Star
Plannen van de Death Star
Plannen van de Death Star
Plannen van de Death Star
Plannen van de Death Star
Plannen van de Death Star

U kunt dit apparaat bouwen met een van de Raspberry PI's vanaf 1 tot 3B+. Zelfs de nul heeft camerapoorten, maar aangezien er zoveel verschillende tweedehands raspi's op de markt zijn, vraag je je misschien af welke het meest ideaal is voor deze build.

Het antwoord hangt af van waar u de videostream wilt verwerken.

Er zijn twee keuzes:

1, Verwerk de video's lokaal met beweging en stuur een videostream door wanneer er beweging wordt gedetecteerd (let op: beweging stuurt een langzame constante stream door naar de server, wat er ook gebeurt, dit kan afhankelijk zijn van de resolutie en framesnelheden die u gebruikt, van een paar honderd megabytes tot meerdere gigabytes per dag, slechts een herinnering als u een installatie op een gemeten verbinding wilt doen). Hier is de CPU van belang en helaas maakt beweging (op het moment van schrijven) geen gebruik van meerdere kernen, maar het besturingssysteem zal proberen de belasting enigszins te balanceren. Je hebt altijd een van de kernen op 100% gebruik.

2. Verwerk de video's op een centrale server: hier stuurt u de onbewerkte videostream van de camera door naar een externe streamingserver (zoals iSpy op een x86-computer of MotionEyeOS op een andere speciale minicomputer). Aangezien er geen lokale verwerking is, maakt het PI-model dat u gebruikt niet uit, een PI1 verzendt dezelfde stream als een PI3B+.

In deze tutorial ga ik met de eerste keuze.

De vuistregel hier is dat hoe sneller je CPU in beweging komt, hoe betere resultaten je krijgt. Mijn op Raspi 2 gebaseerde camera bijvoorbeeld die naar een gang keek, pikte het soms niet op als iemand snel voorbij ging en wanneer het aan het opnemen was, was de opname traag, waardoor er veel frames vielen in vergelijking met het model 3. Het model 3 heeft ook de 802.11 abgn wifi wat handig is om video van hogere kwaliteit te kunnen streamen, het werkt uit de doos en het is redelijk betrouwbaar. Op het moment van schrijven dat het model 3B+ uit is, zou ik je aanraden om dat te kopen met 1.4 Ghz Quad Core cpu.

Lijst met materialen

  • 30 cm kunststof DeathStar:)
  • Raspberry Pi 3 B+
  • PiCam v2 (8MP)
  • Arduino Pro Micro 5.5v
  • 2x SIP-1A05 Reed-schakelrelais
  • 1x PCS HC-SR501 IR Pyro-elektrische Infrarood IR PIR Bewegingssensor Detector Module
  • 1x 10kohm weerstand voor LDR
  • 1x LDR
  • 1x12V 4A DC-adapter
  • 1xWarm Witte LED 5050 SMD Flexibele Licht Lamp Strip 12V DC
  • 1xBuck spanningsregelaar

Zoals je in de schema's kunt zien, was dit project oorspronkelijk ontworpen om één enkel licht met één relais te besturen, omdat ik niet van plan was interne verlichting toe te voegen (wat best cool is), dus ik heb gewoon een tweede relais op de Arduino aangesloten. Het mooie van de SIP-1A05 is dat hij een interne flyback-diode heeft en dat het verbruik in mA ver onder de stroombeperking per pin van de Arduino ligt.

De reden waarom de PIR op het schild op de foto's staat, is omdat in het begin S0P was gepland om in een eenvoudige IP-plastic doos te worden geplaatst in plaats van in een DeathStar. Zoals je misschien al geraden had, bevindt de camera zich direct in het laserpistool, de PIR en LDR hadden nog een geboorde gaten nodig en ze zijn met lijm vastgemaakt omdat ik niet van plan ben ze te verwijderen.

Er is een gat geboord aan de onderkant van de DeathStar waar ik een grote bout in heb gelijmd met een sterke 2 componenten lijm. Deze kan in de originele Neo Coolcams stand geschroefd worden (was toch ergens goed voor:)). Voor een extra ondersteuning gebruik ik harde koperdraden om de bovenkant van de ster vast te houden.

Belangrijke opmerking over de voeding: aangezien dezelfde voeding zowel de PI, Arduino als de LED-strip van stroom zal voorzien, moet deze stevig genoeg zijn om ze allemaal aan te kunnen, zodat deze gebaseerd is op de LED-strip die u voor het project kiest. Een commerciële 5050 12v 3meter LED strip verbruikt ongeveer 2A, dat is veel. Voor de PI en Arduino moet je rekenen in +2A (hoewel dit oversized is kan het geen kwaad). Door LED-strips te gebruiken over standaard halogeenlampen, neon- of andere krachtige verlichting, kunt u dit hele circuit op een mooie 12V@10Ah-loodzuurbatterij plaatsen als back-up, zodat het zelfs werkt in geval van stroomuitval.

De buck zal de spanning verlagen van 12-> 5V voor het voeden van de Arduino en de PI, terwijl de directe 12V-voeding op het relais is aangesloten om de LED-strip aan te zetten.

Stap 3: Software Arduino

Software Arduino
Software Arduino

Je kunt de volledige broncode hieronder vinden, die goed is becommentarieerd, maar hier is een korte uitleg hoe het werkt: Aan het begin van elke lus wordt de gebruikelijke xcomm()-functie aangeroepen om te zien of er een commando komt van de Raspberry PI die kan LIGHT_ON/OFF zijn om de gangverlichting AAN of DS_ON/OFF te zetten om de DeathStar-achtergrondverlichting AAN/UIT te zetten. de lichten, maar misschien wil je om de een of andere reden naar de plek kijken, zelfs als er niemand is.

Hierna wordt de fotocelwaarde ingelezen en wordt de bewegingspen gecontroleerd op beweging. Als er beweging is, controleert de code of het donker genoeg is en controleert hij of we niet in de wacht staan. Als dit allemaal voorbij is, schakelt het gewoon het ganglicht aan en stuurt PHOENIX_MOTION_DETECTED terug naar de Raspberry PI, als het niet donker genoeg is, geeft het nog steeds een signaal aan de computer maar doet het licht niet aan. Zodra een beweging wordt gedetecteerd, wordt een timer van 5 minuten gestart.

Direct hierna zal de volgende codesectie controleren of we in de wacht staan (wat het geval zou moeten zijn als er slechts een bewegingsgebeurtenis was, dus laten we aannemen dat de 5 minuten verstreken zijn, zodat deze controle kan bevestigen). De code controleert of er weer beweging is, zo niet, doe dan de lichten uit. Zoals je kunt zien als er geen beweging is, zal deze functie zichzelf keer op keer herhalen en blijven proberen om de lichten uit te doen, zodat er geen feedback naar de pc is.

We hebben nog een hold-timer voor de interne verlichting van de DeathStar, die puur afhankelijk is van de PhotocellReading < dark_limit.

Hoewel de 2 routines niets van elkaar weten, zullen ze perfect samenwerken, want als het ganglicht aangaat, geeft het zoveel licht dat de LDR denkt dat het weer dag is en de interne verlichting uitschakelt. Er waren echter enkele kanttekeningen bij dit proces dat in de code wordt uitgelegd als je geïnteresseerd bent, zo niet, neem dan het antwoord van Nvidia dat "het gewoon werkt!".

Stap 4: Software Raspberry PI

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

De nieuwste Raspbian werkt voor mij:

Raspbian GNU/Linux 9.4 (uitgerekt)

Linux Phoenix 4.9.35-v7+ #1014 SMP vr 30 juni 14:47:43 BST 2017 armv7l GNU/Linux ii motion 4.0-1 armhf V4L opnameprogramma dat bewegingsdetectie ondersteunt

Hoewel je andere distributies kunt gebruiken, krijg je bij problemen met de camera alleen ondersteuning van het team als je hun officiële besturingssysteem gebruikt. Het verwijderen van ongewenste bloatware zoals system wordt ook sterk aanbevolen.

Motion kan ook eenvoudig vanuit de bron worden opgebouwd:

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

Ik raad iSpy aan als videorecorder/collectorserver. Helaas zijn er op het moment van schrijven geen goede alternatieven voor Linux. De camera kan worden toegevoegd met een MJPEG-url https://CAMERA_IP:8081 als standaardpoort.

De bewegingsverwerking kan handig zijn, u hoeft bijvoorbeeld niet de hele dag naar uw iSpy-server te kijken, u kunt een e-mail ontvangen in geval van beweging. Hoewel iSpy deze functionaliteit heeft om per e-mail te waarschuwen in geval van beweging, schakelt het af en toe de opname in voor diverse gebeurtenissen, zoals wat licht wordt gereflecteerd naar het gebied. Met de PIR bewegingsdetectie heb ik nooit één vals alarm gehad. De waarschuwingen kunnen lokaal worden verwerkt:

Pir-bewegingsgebeurtenis gedetecteerd op sensor> Arduino-waarschuwing> Raspberry pi ontvangt op console> C-verwerkingsprogramma> Externe e-mailtoepassing

Ik geef er echter de voorkeur aan om zowel de logs als de video's op afstand te verwerken, dus in dit geval heb ik een sectie aan het C-besturingsprogramma toegevoegd terwijl het de logs lokaal in een gewoon tekstbestand logt, het ook in syslog logt en dat wordt doorgestuurd naar een SIEM voor verdere verwerking.

void logger (char * tekst) {

BESTAND *f = fopen("phoenix.log", "a"); if (f == NULL) { printf("Fout bij openen van logbestand!\n"); opbrengst; } fprintf(f, "%s => %s\n", cur_time(0), tekst); fsluiten (f); #ifdef SYSLOG char loggy [500]; sprintf(loggy, "%s => %s\n", cur_time(0), tekst); setlogmasker (LOG_UPTO (LOG_NOTICE)); openlog ("DeathStar", LOG_CONS | LOG_PID | LOG_NDELAY, LOG_USER); //syslog (LOG_NOTICE, "Programma gestart door gebruiker %d", getuid ()); syslog (LOG_NOTICE, loggy); afsluiten (); #endif retour; }

Aan de ontvangende kant kan syslog-ng deze gebeurtenissen demuxen uit de hoofdlogstroom:

filter f_phx{

match("DeathStar"); }; bestemming d_phx { bestand("/var/log/phoenix/deathstar.log"); }; log { source(s_net); filter(f_phx); bestemming (d_phx); };

en het kan worden doorgegeven aan een andere tool (motion.php zie bijgevoegd) voor analyse en waarschuwing.

In dit script kunt u eenvoudig de gebruikelijke tijd tijdens de week instellen wanneer u niet thuis bent:

$opt['alert_after']='09:00:00'; // Mornings$opt['alert_before']='17:00:00'; // Avonden

Het php-programma gebruikt het uitstekende logtail-hulpprogramma om de logs te ontleden.

$cmd = "logtail -o".$offsetbestand.' '.$logbestand.'>'.$logbestand2;

Logtail houdt de positie bij in een offset-bestand zodat het hoofdprogramma niet hoeft te weten vanaf welk moment om naar de logs te gaan kijken, het wordt voorzien van de laatste onbewerkte gegevens.

Motion.php kan worden uitgevoerd vanuit crontab met een kleine truc voor de weekenden, wanneer het door de logs gaat, maar geen verdere verwerking.

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

Stap 5: Problemen en takenlijst

Problemen en takenlijst
Problemen en takenlijst
Problemen en takenlijst
Problemen en takenlijst

Als je Raspberry pi 3 of nieuwer gebruikt, kun je deze sectie overslaan, je zult deze problemen waarschijnlijk niet meer tegenkomen.

In de loop der jaren had ik wat problemen met op Raspberry pi 2 gebaseerde boards die dezelfde softwarestack zouden kunnen gebruiken, maar die op verschillende tijdstippen en op verschillende plaatsen werden gekocht. Na een bepaalde periode, die 2 dagen of 20 dagen kan zijn wanneer SSH op het apparaat binnenkomt, zou de SSH gewoon blijven hangen, dus zowel de bewegingsdaemon als de lokale C-code die met de Arduino sprak, werd in de ram geladen en daarom functioneerde het apparaat maar in deze staat was het onmogelijk om er iets anders mee te doen.

Na veel puzzelen ben ik tot een oplossing gekomen:

homesync.sh

#!/bin/sh -e

### BEGIN INIT INFO # Biedt: homesync # Vereist-Start: mountkernfs $local_fs # Vereist-Stop: camera phoenix # Standaard-Start: S # Standaard-Stop: 0 6 # Korte Beschrijving: Thuissynchronisatie # Beschrijving: Thuissynchronisatie door NLD ### END INIT INFO NAME=home DESC="Ramdisk Home Synchronizer" RAM="/home/" DISK="/realhome/" set -e case "$1" in start|forth) echo -n "Starting $ DESC: " rsync -az --numeric-ids --delete $DISK $RAM &> /dev/null echo "$NAME.";; stop|back) echo -n "$DESC stoppen: " rsync -az --numeric-ids --delete $RAM $DISK &> /dev/null echo "$NAME.";; *) echo "Gebruik: $0 {start|stop}" exit 1;; esac uitgang 0

Het script gaat samen met een fstab-modificatie:

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

De thuispartitie is als ramdisk gemount, wat ongeveer 600 MB vrije ruimte op de Raspberry pi 2 zou opleveren, wat meer dan genoeg is om enkele binaire bestanden en kleine logbestanden op te slaan:

tmpfs 690M 8.6M 682M 2% /thuis

Het bleek dat de PI-hang werd toegeschreven aan de schrijfbewerkingen op de SD-kaart, hoewel ik verschillende kaarten heb geprobeerd (Samsung EVO, Sandisk) die voor en na meerdere keren werden gescand op fouten en ze hadden geen probleem op andere laptops, dit was gewoon Binnenkort. Ik had (nog) niet hetzelfde probleem met Raspberry PI 3s en hogere hardware, dus daarom raad ik ze ook aan in deze tutorial.

Hoewel de huidige beweging op een Raspberry PI 3 net goed genoeg is voor mij, zijn hier enkele ideeën die het ontdekken waard zijn:

  1. Gebruik geen beweging, maar gebruik een raspivid stream over het netwerk en laat een krachtige server de bewegingsdetectie en videocodering doen (bijvoorbeeld iSpy). -> Probleem: constante netwerkbandbreedte.
  2. Gebruik beweging en laat ffmpeg de videocodering doen. -> Probleem: CPU kan de hogere resoluties niet aan
  3. Gebruik beweging, neem onbewerkte video op en laat een krachtige server de codering doen. -> CPU-gebruik op RPi is laag en netwerkbandbreedte is beperkt tot wanneer er daadwerkelijk beweging is. Voor dit scenario kunnen we naar een SD-kaart/ramdisk schrijven voor maximale doorvoer en vervolgens crontab en de video kopiëren naar een andere server.

Ik zou ook opmerken dat het bouwen van dit project mogelijk is om te bouwen zonder een Arduino. Alle componenten (relais, LDR, PIR) kunnen op de een of andere manier op de Raspberry Pi worden aangesloten, maar ik geef de voorkeur aan realtime microcontrollers om te communiceren met sensoren en uitvoerapparaten. In de gevallen waarin mijn Raspberry Pi bijvoorbeeld hing of crashte, werkte de lichtregeling van de Arduino prima.

Als je deze instructable leuk vond, bleef je op de hoogte, want ik zal de serie volgend jaar voortzetten met mijn 360 graden outdoor Raspberry pi zero dome-camera.

Aanbevolen: