Annonse
Lær hvordan du lager en ekstern synlig panne og vipp sikkerhetskamera med en Raspberry Pi. Dette prosjektet kan fullføres om morgenen med bare de enkleste delene. Her er sluttresultatet:
Hva trenger du
- Raspberry Pi 2 eller 3 med Micro SD-kort
- Arduino UNO eller lignende
- 2 x mikro- eller minihobbyservoer
- USB-webkamera
- Tilkoblingsledninger av hann til mann
- Tilkoblingsledninger av hann til kvinne
- Assorterte glidelåsbånd
Bygg sikkerhetskameraet
Fest et servohorn (de små plastformene) til hver servo ved å bruke den medfølgende skruen. Den spesielle formen betyr egentlig ikke noe, selv om jo større, jo bedre. Ikke stram skruen for høyt.
Bruk nå glidelåsbånd for å feste den ene servoen til den andre i rett vinkel. En av disse vil være panorering (venstre mot høyre), mens den andre vil vippe (opp og ned). Det spiller ingen rolle hvilken som gjør hva, den kan justeres i koden.
Til slutt, koble webkameraet ditt til en av servoene. Du kan bruke zip-bånd til dette, selv om webkameraet mitt kom med et klips skrudd i bunnen - jeg fjernet dette og brukte skruen for å holde den til hornet. For stabilitet, kan det være lurt å montere hele riggen i en koffert eller eske. En enkel pappeske gjør susen ganske pent. Du kan klippe et pent kvadratisk hull og montere en servospyling til overflaten, men et glidelås vil være tilstrekkelig.
Et ord om webkameraer
Ikke alle USB-webkameraer er opprettet likt. Koble webkameraet ditt til USB-porten til Pi-enheten din og kjør denne kommandoen:
lsusb
Denne kommandoen viser informasjon om alle USB-enheter koblet til Pi. Hvis webkameraet ditt ikke er oppført her, kan det være lurt å prøve et drevet USB-hub og gjenta kommandoen. Hvis webkameraet fremdeles ikke blir gjenkjent, kan det hende du må kjøpe en kompatibelt webkamera.
Servo Setup
Selv om servoer kan virke skumle og komplekse, er de egentlig ganske enkle å koble til. Servoer opererer med Pulse Width Modulation (PWM), som er en måte for digitale systemer å etterligne analoge signaler. PWM-signaler er egentlig et raskt ON - OFF signal. Et signal som er PÅ eller HØY blir beskrevet ved bruk av driftssyklus. Driftssyklus uttrykkes i prosent, og beskriver hvor lenge signalet er PÅ. Et PWM-signal på 25% driftssyklus vil være PÅ i 25% av tiden, og AV for de resterende 75%. Signalet er ikke PÅ i starten og deretter AV for alltid, det pulseres regelmessig over en veldig kort periode.
Servos lytter etter disse pulsen og handler deretter. Å bruke en driftssyklus på 100% ville være det samme som “vanlig” 5v, og 0% ville være det samme som bakken. Ikke bekymre deg hvis du ikke helt forstår hvordan PWM fungerer, du fremdeles kan kontrollere servoer (Extreme Electronics er et bra sted å lære mer).
Det er to hovedmåter å bruke PWM - maskinvare eller programvare. Maskinvare PWM gir ofte lavere ventetid (hvor lenge mellom servoen som mottar kommandoen og flytter) enn programvare PWM, men Pi har bare en maskinvare PWM-kapabel. Eksterne kretsløp er tilgjengelige for å tilby flere kanaler med maskinvare-PWM, men en enkel Arduino kan også håndtere oppgaven, ettersom de har flere maskinvare-PWM-pinner.
Her er kretsen:
Dobbeltsjekk pinout for din Pi, varierer de litt mellom modeller. Du må finne ut hvordan servoer er kablet. Servoer krever tre ledninger for å kontrollere dem, men fargene varierer litt:
- Rødt er positivt, koble dette til Pi + 5v
- Brun eller svart er negativ, koble dette til GND på Pi
- Oransje eller hvitt er signal, koble dette til Arduino-pinner 9 og 10
Arduino oppsett
Er du ny på Arduino? Kom i gang her Komme i gang med Arduino: En nybegynnerguideArduino er en åpen kildekode-prototypeplattform for elektronikk basert på fleksibel, brukervennlig maskinvare og programvare. Den er beregnet på kunstnere, designere, hobbyister og alle som er interessert i å lage interaktive objekter eller miljøer. Les mer .
Når servoene er koblet til, åpner du Arduino IDE på datamaskinen din og laster opp denne testkoden. Ikke glem å velge riktig brett og port fra Verktøy> Board og Verktøy> Port menyer
#inkludere // Importer biblioteket Servo servoPan, servoTilt; // Lag servoobjekter. int servoMin = 20, servoMax = 160; // Definer grenser for servos void-oppsett () {// Setup-servoer på PWM-stifter som er servoPan.attach (9); servoTilt.attach (10); } void loop () {for (int i = servoMin; i servoMin; --i) {// Flytt servoer fra maksimum til minimum servoPan.write (i); servoTilt.write (i); forsinkelse (100); // Vent 100 ms} }
I det hele tatt skal du se begge servoer sakte bevege seg frem og tilbake. Legg merke til hvordan “servoMin” og servoMax ”er definert som 20 og 160 grader (i stedet for 0 og 180). Dette er delvis fordi disse billige servoer ikke klarer å flytte hele 180 grader, og også på grunn av webkameraets fysiske størrelse som forhindrer at hele rekkevidden brukes. Du må kanskje justere disse for oppsettet ditt.
Hvis de ikke fungerer i det hele tatt, dobbeltsjekk at kretsen er riktig kablet. Brødbrett kan noen ganger også variere i kvalitet, så vurder å investere i et multimeter for å bekrefte.
Servoer er nesten for kraftige for at Arduino skal få strøm, så de vil bli drevet av Pi. 5v-skinnen på Pi er begrenset til 750 mA levert til hele Pi, og Pi trekker omtrent 500 mA, og etterlater 250 mA for servoer. Disse mikroservoer tegner omtrent 80 mA, noe som betyr at Pi skal være i stand til å håndtere to av dem. Hvis du ønsker å bruke flere servoer eller større, høyere drevne modeller, kan det hende du må bruke en ekstern strømforsyning.
Last opp følgende kode til Arduino. Dette vil lytte til innkommende seriedata (seriell som i Universal Serie Buss eller USB). Pi-en vil sende disse dataene over USB til Arduino og fortelle den hvor de skal flytte servoer.
#inkludere // Importer biblioteket Servo servoPan, servoTilt; // Opprett servo-objekt. Strengdata = ""; // Lagre innkommende kommandoer (buffer) ugyldig oppsett () {// Oppsettserver på PWM-stifter som er servoPan.attach (9); servoTilt.attach (10); Serial.begin (9600); // Start serie med 9600 bps (hastighet) } void loop () {while (Serial.available ()> 0) {// Hvis det er data char singleChar = Serial.read (); // Les hvert tegn hvis (singleChar == 'P') {// Flytt pan servo servoPan.write (data.toInt ()); data = ""; // Tøm buffer} annet hvis (singleChar == 'T') {// Flytt tilt servo servoTilt.write (data.toInt ()); data = ""; // Tøm buffer} annet {data + = singleChar; // Legg til nye data}} }
Du kan teste denne koden ved å åpne seriemonitoren (øverst til høyre> Serial Monitor) og sende noen testdata:
- 90p
- 0P
- 20T
- 100T
Legg merke til formatet til kommandoene - en verdi og deretter en bokstav. Verdien er servoens plassering, og bokstaven (i kapsler) spesifiserer pannen eller vippeservoen. Når disse dataene overføres fra Pi-serien, kommer hvert tegn gjennom ett om gangen. Arduinoen må "lagre" disse til hele kommandoen er overført. Den endelige bokstaven spesifiserer ikke bare servoen, den lar også Arduino vite at det ikke er flere data i denne kommandoen.
Til slutt, koble Arduino fra datamaskinen, og koble den til Raspberry Pi via den vanlige USB-portforbindelsen.
Pi-oppsett
Nå er det på tide å sette opp Pi. Først, installer et operativsystem Slik installerer du et operativsystem på en Raspberry PiSlik installerer du et OS på Raspberry Pi og hvordan du kloner det perfekte oppsettet for rask gjenoppretting av katastrofer. Les mer . Koble webkameraet og Arduino til Pi USB.
Oppdater Pi:
sudo apt-get oppdatering. sudo apt-get oppgradering
Installer bevegelse:
sudo apt-get install motion
Motion er et program laget for å håndtere streaming av webkameraer. Den håndterer all tunge løft, og kan til og med utføre opptak og bevegelsesdeteksjon (prøv bygge et bevegelsessikringssystem Bygg et bevegelsessikringssystem ved hjelp av en bringebærpiAv de mange prosjektene du kan bygge med Raspberry Pi, er et av de mest interessante og permanent nyttige sikkerhetssystemene for bevegelsesfangst. Les mer ). Åpne Motion-konfigurasjonsfilen:
sudo nano /etc/motion/motion.conf
Denne filen inneholder mange alternativer for å konfigurere Motion. Konfigurer som følger:
- daemon on - Kjør programmet
- framerate: 100 - Hvor mange bilder eller bilder / sekund å streame
- stream_localhost off - Tillat tilgang over hele nettverket
- bredde 640 - Bredde på video, juster for webkameraet ditt
- høyde 320 - Høyde på video, juster for webkameraet ditt
- stream_port 8081 - Porten du vil sende ut video til
- output_picture off - Ikke lagre noen bilder
Dette er en ganske stor fil, så det kan være lurt å bruke CTRL + W å søke etter linjer. Når du er ferdig, trykk CTRL + X og bekreft deretter for å lagre og avslutte.
Nå rediger en fil til:
sudo nano / etc / default / motion
Angi “start_motion_daemon = ja”. Dette er nødvendig for å sikre at Motion kjører.
Nå finner du ut IP-adressen din:
ifconfig
Denne kommandoen viser nettverkstilkoblingsdetaljene for Pi. Se på den andre linjen, inet addr. Det kan være lurt å angi en statisk IP-adresse (hva er en statisk IP? Hva er en statisk IP-adresse? Her er hvorfor du ikke trenger enEn statisk IP-adresse er en som aldri endres. Dynamiske IP-adresser endres. Vi forklarer hvorfor du ikke trenger en statisk IP-adresse. Les mer ), men noter nå dette tallet.
Nå start Motion:
sudo service motion start
Du kan stoppe eller starte Motion ved å endre “start” til “stop” eller “restart”.
Bytt til datamaskinen din og naviger til Pi fra en nettleser:
http://xxx.xxx.x.xx: 8081
Hvor xxx.xxx.x.xx er Pi IP-adresse. Tykktarmen etterfulgt av et nummer er porten som ble satt opp tidligere. Alt i orden bør du se strømmen fra webkameraet ditt! Prøv å bevege deg rundt og se hvordan ting ser ut. Det kan hende du må justere lysstyrke- og kontrastinnstillingene i konfigurasjonsfilen. Det kan hende du må fokusere webkameraet - noen modeller har en liten fokusring rundt linsen. Snu dette til bildet er skarpest.
Tilbake på Pi, lag en mappe og naviger i den:
mkdir sikkerhetskamera. cd sikkerhet-cam /
Nå installerer Twisted:
sudo apt-get install python-twisted
Twisted er en webserver skrevet i Python, som vil lytte etter kommandoer og deretter handle deretter.
Når det er installert, oppretter du et Python-skript for å utføre kommandoer (flytt servoer).
sudo nano servos.rpy
Legg merke til hvordan filtypen er ".rpy" i stedet for "py". Her er koden:
# Importer nødvendige filer. import seriell. fra twisted.web.resource import Ressurs # Oppsett Arduino med riktig hastighet. prøv: arduino = serie. Seriell ('/ dev / ttyUSB0', 9600) unntatt: arduino = serie. Seriell ('/ dev / ttyUSB1', 9600) klasse MoveServo (ressurs): isLeaf = True def render_GET (egen, forespørsel): prøv: # Send verdi over seriell til Arduino arduino.write (request.args ['value'] [0]) returner 'Success' bortsett fra: return 'Failure' resource = MoveServo ()
Nå starter webserveren:
sudo twistd -n web-p 80 - sti / hjem / pi / sikkerhet-cam /
Lar oss bryte det - “-p 80” spesifiserer porten (80). Dette er standardporten for nettsider. “–Path / home / pi / security-cam /” forteller Twisted å starte serveren i den angitte katalogen. Hvis du gjør endringer i skriptene i “security-cam” -mappen, må du starte serveren på nytt (CTRL + X for å lukke, og kjør deretter kommandoen igjen).
Nå oppretter websiden:
sudo nano index.html
Her er webside-koden:
Benytt deg av DIY sikkerhetskamera
Endre “PI_IP_ADDRESS” (brukt to ganger) til den virkelige IP-adressen til din Pi (raspberrypi.local bør også fungere hvis du kjører den siste Raspian). Start webserveren på nytt, og naviger deretter til Pi-en fra datamaskinen, uten å angi porten. Du skal kunne panorere til venstre og høyre, og se videostrømmen:
Der har du det. Ditt eget Pan og Tilt Network-kamera. Hvis du vil eksponere webkameraet ditt for internett, husk å gjøre det vurdere farene 5 farer du må tenke på når du skal peke på hjemmets sikkerhetskameraerDet er viktig å nøye vurdere hvor du plasserer kameraene dine, og hvilke deler av hjemmet du peker dem på. Å holde ting trygt er viktig, men det er også å opprettholde personvernet ditt. Les mer - så se nærmere på port forwarding Hva er portvideresending og hvordan kan det hjelpe meg? [MakeUseOf Explains]Gråter du litt inne når noen forteller deg at det er et portvideresendingsproblem, og det er grunnen til at den skinnende nye appen din ikke fungerer? Xbox-enheten din lar deg ikke spille spill, torrentnedlastningene dine nekter ... Les mer , så ruteren din vet hvor du skal sende innkommende forespørsler. Du kan legge til en ekstern strømforsyning 3 Raspberry Pi-batteripakker for bærbare prosjekterEt Raspberry Pi-batteri kan gjøre en vanlig Pi til en bærbar datamaskin. Du trenger en av disse batteriløsningene for å komme i gang. Les mer og Wi-Fi-adapter for en virkelig bærbar rigg.
Har du laget noe kult med et webkamera og en Pi? Gi meg beskjed i kommentarene, jeg vil gjerne se!
Joe er utdannet innen informatikk fra University of Lincoln, Storbritannia. Han er en profesjonell programvareutvikler, og når han ikke flyr droner eller skriver musikk, kan han ofte finne bilder og produsere videoer.