Annons
Lär dig hur du gör en fjärrbar panorering och lutar säkerhetskamera med en Raspberry Pi. Detta projekt kan slutföras på morgonen med bara de enklaste delarna. Här är slutresultatet:
Vad du behöver
- Raspberry Pi 2 eller 3 med Micro SD-kort
- Arduino UNO eller liknande
- 2 x mikro- eller minihobbyservo
- USB-webbkamera
- Kopplingar till hanar till manliga
- Kopplingar till hanar till kvinnor
- Blandade dragkedjor
Bygg säkerhetskameran
Fäst ett servohorn (de lilla plastformerna) till varje servo med den medföljande skruven. Den speciella formen spelar ingen roll, även om desto större desto bättre. Dra inte åt skruven för hårt.
Använd nu dragkedja för att fästa en servo till den andra i rätt vinkel. En av dessa kommer att vara panorering (vänster till höger), medan den andra kommer att luta (upp och ner). Det spelar ingen roll vilken som gör vad, det kan justeras i koden.
Slutligen, koppla din webbkamera till en av servon. Du kan använda zip-slipsar för detta, även om min webbkamera kom med ett klipp skruvat i botten - jag tog bort detta och använde skruven för att hålla den vid hornet. För stabilitet kanske du vill montera hela riggen i ett fodral eller låda. En enkel kartong gör tricket ganska snyggt. Du kan klippa ett snyggt fyrkantigt hål och montera en servospolning på ytan, men ett dragkedja är tillräckligt.
Ett ord om webbkameror
Inte alla USB-webbkameror skapas lika. Anslut din webbkamera till USB-porten på din Pi och kör detta kommando:
lsusb
Detta kommando visar information om alla USB-enheter som är anslutna till Pi. Om din webbkamera inte är listad här, kanske du vill prova ett drivet USB-nav och upprepa kommandot. Om webbkamera fortfarande inte känns igen kanske du måste köpa en kompatibel webbkamera.
Servo Setup
Även om servon kan verka skrämmande och komplexa, är de egentligen ganska enkla att ansluta. Servos fungerar på PWM (Pulse Width Modulation), vilket är ett sätt för digitala system att imitera analoga signaler. PWM-signaler är i huvudsak en snabb ON-OFF-signal. En signal som är ON eller HIGH beskrivs med hjälp av driftcykeln. Driftcykeln uttrycks i procent och beskriver hur länge signalen är PÅ. En PWM-signal på 25% driftcykel kommer att vara PÅ i 25% av tiden och OFF för de återstående 75%. Signalen är inte PÅ i början och sedan AV för alltid, den pulsas regelbundet under en mycket kort tidsperiod.
Servos lyssnar efter dessa pulser och agerar i enlighet därmed. Att använda en arbetscykel på 100% skulle vara samma som "vanliga" 5v, och 0% skulle vara samma som mark. Oroa dig inte om du inte helt förstår hur PWM fungerar, du kan fortfarande kontrollera servon (Extreme Electronics är ett bra ställe att lära sig mer).
Det finns två huvudsakliga sätt att använda PWM - hårdvara eller programvara. Maskinvara PWM ger ofta lägre latens (hur länge mellan servon som tar emot kommandot och flyttar) än PWM-programvara, men Pi har bara en hårdvara PWM-kapabel. Externa kretsar finns tillgängliga för att tillhandahålla flera kanaler för hårdvara PWM, men en enkel Arduino kan också hantera uppgiften, eftersom de har flera hårdvara PWM stift.
Här är kretsen:
Dubbelkontrollera pinout för din Pi, de varierar något mellan modeller. Du måste ta reda på hur dina servon är anslutna. Servos kräver tre ledningar för att kontrollera dem, men färgerna varierar något:
- Rött är positivt, anslut detta till Pi + 5v
- Brunt eller svart är negativt, anslut detta till GND på Pi
- Orange eller vit är signal, anslut detta till Arduino-stift 9 och 10
Arduino Setup
Är du ny på Arduino? Kom igång här Komma igång med Arduino: En nybörjarguideArduino är en open-source elektronikprototypplattform baserad på flexibel, lättanvänd hårdvara och mjukvara. Den är avsedd för konstnärer, designers, hobbyister och alla som är intresserade av att skapa interaktiva objekt eller miljöer. Läs mer .
När servon är anslutna, öppna Arduino IDE på din dator och ladda upp den här testkoden. Glöm inte att välja rätt kort och port från Verktyg> Board och Verktyg> Port menyer
#inkludera // Importera biblioteket Servo servoPan, servoTilt; // Skapa servobjekt. int servoMin = 20, servoMax = 160; // Definiera gränser för inställning av servo void () {// Inställning av servon på PWM-stifta stift servoPan.attach (9); servoTilt.attach (10); } void loop () {för (int i = servoMin; i servoMin; --i) {// Flytta servon från max till minimum servoPan.write (i); servoTilt.write (i); fördröjning (100); // Vänta 100 ms} }
Du måste se båda servon långsamt röra sig fram och tillbaka. Lägg märke till hur “servoMin” och servoMax ”definieras som 20 och 160 grader (istället för 0 och 180). Detta beror delvis på att dessa billiga servon inte kan flytta hela 180 grader exakt, och även på grund av webbkamerans fysiska storlek förhindrar att hela sortimentet används. Du kan behöva justera dessa för din installation.
Om de inte fungerar alls dubbelkontrollerar kretsen korrekt. Brödbrädor kan ibland också variera i kvalitet, så överväg att investera i en multimeter för att verifiera.
Servos är nästan för kraftfulla för att Arduino ska driva, så att de kommer att drivas av Pi. 5V-skenan på Pi är begränsat till 750 mA tillhandahålls till hela Pi, och Pi drar ungefär 500 mA, vilket lämnar 250 mA för servon. Dessa mikroservos drar cirka 80mA, vilket innebär att Pi borde kunna hantera två av dem. Om du vill använda fler servon eller större, högre drevna modeller kan du behöva använda en extern strömförsörjning.
Ladda upp följande kod till Arduino. Detta lyssnar på inkommande seriedata (seriell som i Universal) Serie Buss eller USB). Pi skickar dessa data via USB till Arduino och berättar var de ska flytta servon.
#inkludera // Importera biblioteket Servo servoPan, servoTilt; // Skapa servobjekt. Strängdata = ""; // Spara inkommande kommandon (buffert) ogiltig inställning () {// Inställningsservos på PWM-kapabla stift servoPan.attach (9); servoTilt.attach (10); Serial.begin (9600); // Starta serie med 9600 bps (hastighet) } void loop () {while (Serial.available ()> 0) {// Om det finns data char singleChar = Serial.read (); // Läs varje tecken om (singleChar == 'P') {// Flytta pan servo servoPan.write (data.toInt ()); data = ""; // Rensa buffert} annat om (singleChar == 'T') {// Flytta tilt servo servoTilt.write (data.toInt ()); data = ""; // Rensa buffert} annat {data + = singleChar; // Lägg till nya data}} }
Du kan testa den här koden genom att öppna den seriella bildskärmen (uppe till höger> Seriell bildskärm) och skicka testdata:
- 90P
- 0P
- 20T
- 100T
Lägg märke till formatet för kommandona - ett värde och sedan en bokstav. Värdet är servoens position och bokstaven (i kapsyler) anger panelen eller lutningsservo. När dessa data överförs från Pi-serien kommer varje tecken igenom en åt gången. Arduino måste "lagra" dessa tills hela kommandot har överförts. Den sista bokstaven anger inte bara servon, den låter också Arduino veta att det inte finns fler data i det här kommandot.
Koppla slutligen bort din Arduino från datorn och anslut den till Raspberry Pi via den vanliga USB-portanslutningen.
Pi-installation
Nu är det dags att ställa in Pi. Först, installera ett operativsystem Hur man installerar ett operativsystem på en Raspberry PiSå här installerar du ett operativsystem på din Raspberry Pi och hur du klonerar din perfekta installation för snabb katastrofåterställning. Läs mer . Anslut webbkameran och Arduino till Pi USB.
Uppdatera Pi:
sudo apt-get-uppdatering. sudo apt-get upgrade
Installera rörelse:
sudo apt-get install motion
Motion är ett program för att hantera webbkameraströmning. Den hanterar all tung lyft, och kan även utföra inspelning och rörelsedetektering (prova bygga ett säkerhetssystem för rörelsefångst Bygg ett rörelsefångstsäkerhetssystem med hjälp av en hallonpiAv de många projekten som du kan bygga med Raspberry Pi är ett av de mest intressanta och permanent användbara säkerhetssystemet för rörelsefångst. Läs mer ). Öppna Motion-konfigurationsfilen:
sudo nano /etc/motion/motion.conf
Den här filen innehåller många alternativ för att konfigurera Motion. Konfigurera enligt följande:
- daemon on - Kör programmet
- framerate: 100 - Hur många ramar eller bilder / sekund att strömma
- stream_localhost off - Tillåt åtkomst över hela nätverket
- bredd 640 - Bredd på video, justera för din webbkamera
- höjd 320 - Höjd på video, justera för din webbkamera
- stream_port 8081 - Porten att skicka video till
- output_picture off - Spara inga bilder
Detta är en ganska stor fil, så du kanske vill använda CTRL + W för att söka efter rader. När du är klar trycker du på CTRL + X och bekräfta sedan för att spara och avsluta.
Redigera nu ytterligare en fil:
sudo nano / etc / default / motion
Ställ in “start_motion_daemon = ja”. Detta behövs för att säkerställa att rörelsen körs.
Ta reda på din IP-adress:
ifconfig
Detta kommando visar information om nätverksanslutningen för Pi. Titta på den andra raden, inet addr. Du kanske vill ställa in en statisk IP-adress (vad är en statisk IP? Vad är en statisk IP-adress? Här är varför du inte behöver enEn statisk IP-adress är aldrig en förändring. Dynamiska IP-adresser ändras. Vi förklarar varför du inte behöver en statisk IP-adress. Läs mer ), men för tillfället noterar du detta nummer.
Starta nu Motion:
sudo service motion start
Du kan stoppa eller starta om Rörelse genom att ändra “start” till “stopp” eller “starta om”.
Byt till din dator och navigera till Pi från en webbläsare:
http://xxx.xxx.x.xx: 8081
Där xxx.xxx.x.xx är Pi IP-adress. Kolon följt av ett nummer är porten som inställdes tidigare. Du måste se strömmen från din webbkamera! Försök flytta runt och se hur saker ser ut. Du kan behöva justera inställningarna för ljusstyrka och kontrast i konfigurationsfilen. Du kanske måste fokusera webbkameran - vissa modeller har en liten fokusring runt linsen. Vrid detta tills bilden är den skarpaste.
Tillbaka på Pi, skapa en mapp och navigera i den:
mkdir säkerhets-cam. cd security-cam /
Installera nu Twisted:
sudo apt-get install python-twisted
Twisted är en webbserver skriven i Python, som lyssnar efter kommandon och sedan agerar i enlighet därmed.
När du har installerat skapar du ett Python-skript för att köra kommandon (flytta servon).
sudo nano servos.rpy
Lägg märke till hur filändelsen är ".rpy" istället för "py". Här är koden:
# Importera nödvändiga filer. importera serie. från twisted.web.resource import Resource # Setup Arduino med rätt hastighet. prova: arduino = serie. Seriell ('/ dev / ttyUSB0', 9600) utom: arduino = serie. Seriell ('/ dev / ttyUSB1', 9600) klass MoveServo (Resurs): isLeaf = True def render_GET (själv, begäran): prova: # Skicka värde över serie till Arduino arduino.write (request.args ['value'] [0]) returnera 'Framgång' förutom: return 'Failure' resource = MoveServo ()
Starta nu webbservern:
sudo twistd -n webb-p 80 - väg / hem / pi / security-cam /
Låter bryta ner det - “-p 80” anger porten (80). Detta är standardporten för webbsidor. “–Path / home / pi / security-cam /” berättar för Twisted att starta servern i den angivna katalogen. Om du gör några ändringar i skripten i mappen "säkerhetskam" måste du starta om servern (CTRL + X för att stänga, kör sedan kommandot igen).
Skapa nu webbsidan:
sudo nano index.html
Här är webbsidan:
Använd DIY-säkerhetskamera
Ändra "PI_IP_ADDRESS" (används två gånger) till den verkliga IP-adressen för din Pi (raspberrypi.local bör också fungera om du kör den senaste Raspian). Starta om webbservern och navigera sedan till Pi från din dator, du behöver inte ange porten. Du borde kunna panorera åt vänster och höger och se videoströmmen:
Där har du det. Din helt egen Pan and Tilt Network Camera. Kom ihåg att om du vill utsätta din webbkamera för internet överväga farorna 5 faror att tänka på när du pekar på dina hemskyddskamerorDet är viktigt att noggrant överväga var du placerar dina kameror och vilka delar av ditt hem du pekar dem på. Att hålla saker säkra är viktigt, men det är också att bibehålla din integritet. Läs mer - titta sedan in port vidarebefordran Vad är port vidarebefordran och hur kan det hjälpa mig? [MakeUseOf Explains]Gråter du lite inuti när någon säger att det finns ett problem för port vidarebefordran och det är därför din glänsande nya app inte fungerar? Din Xbox låter dig inte spela spel, dina torrentnedladdningar vägrar ... Läs mer , så din router vet vart du ska skicka inkommande förfrågningar. Du kan lägga till en extern strömförsörjning 3 Raspberry Pi-batteripaket för bärbara projektEtt Raspberry Pi-batteri kan göra en vanlig Pi till en bärbar dator. Du behöver en av dessa batterilösningar för att komma igång. Läs mer och Wi-Fi-adapter för en riktigt bärbar rigg.
Har du gjort något coolt med en webbkamera och en Pi? Låt mig veta i kommentarerna, jag skulle gärna vilja se!
Joe är en examen i datavetenskap från University of Lincoln, Storbritannien. Han är en professionell mjukvaruutvecklare, och när han inte flyger drönare eller skriver musik kan han ofta hitta foton eller producera videor.