Innehållsförteckning:

Auto-tracking Water Blaster: 9 steg
Auto-tracking Water Blaster: 9 steg

Video: Auto-tracking Water Blaster: 9 steg

Video: Auto-tracking Water Blaster: 9 steg
Video: Штукатурка стен - самое полное видео! Переделка хрущевки от А до Я. #5 2024, November
Anonim
Auto-tracking Water Blaster
Auto-tracking Water Blaster

Rosätande rådjur motiverade mig att bygga en målspårande vattenblåsare för att hjälpa till att avskräcka de glupska gnagarna … Denna vattenblåsare använder videobaserad rörelsedetektering för att rikta en servo och utlösa korta utbrott av vatten mot målet. Den skjuter först efter att ett förvärvat mål är stilla i några sekunder (fördröjningen kan justeras i koden). Jag bryr mig inte om rådjur bara går förbi men om de stannar för ett mellanmål, sploosh!

Här är en video av mig som testar vattenblåsaren:

Water blaster är en fristående låda som kan fjärranslutas till (via wi-fi/VNC) från vilken dator som helst i ditt nätverk för att övervaka vad den gör. Den tar en bild varje gång den utlöses så att du senare kan se vad som sprängdes.

Jag använde en Raspberry Pi, NoIR -kamera, IR -belysning, standard linjär servo och en vattenventil för att skapa denna dag/natt, målspårande vattenblaster. Koden är skriven i Python och lånar mycket från Adrian Rosebrocks cv2 -bildbehandlingskodprover. Du kan se hans skrivning på:

www.pyimagesearch.com/2015/06/01/home-surv…

Eftersom jag går efter relativt stora, markbaserade mål (rådjur) är mitt problem något förenklat. Jag kräver bara horisontell siktning så att jag kan komma undan med att bara använda en servo. Att vänta på att rådjuret ska stå still hjälper mig att eliminera många falska triggers. Detta är mitt rev-0-försök och jag har hittat några saker som jag skulle ändra om jag byggde en till. Jag har noterat dessa saker i den detaljerade skrivningen som följer.

Steg 1: Koden

Vattenblåsaren använder Raspberry Pi 3 för bearbetning. För att spela in video används en NoIR Raspberry Pi -kamera tillsammans med en IR -belysning för nattvideo. OpenCV/cv2 Python -paketet används för att fånga och bearbeta bildinformation och beräkna målkoordinater. Piggbiobiblioteket används för att styra gpio för stabil servodrift. Att använda det vanliga RPi. GPIO -paketet resulterade i en skakig servo. OBS: När du använder pigpio -biblioteket måste du köra pigpio -demonen. Lägg till detta i din Pi: s /etc/rc.local startfil för pigpio lib och Raspberry Pi kameragränssnitt:

/etc.

Se https://pypi.python.org/pypi/pigpi för mer information.

Källkoden heter: water_blaster.py och bifogas nedan.

Friskrivningsklausul: Jag är ny på Python -kodning, så betrakta det inte som någon bra modell av Python -kodningsstil!

Den grundläggande algoritmen är följande:

  • Ta en första videoreferensram. Detta kommer att användas för att jämföra mot för att upptäcka rörelse.
  • Ta en annan ram.
  • Konvertera ramen till gråskala, storleksanpassa, oskärpa den.
  • Beräkna skillnaden från referensramen
  • Filtrera bort små skillnader, få koordinater för största skillnaden.
  • Ställ in en timer. Om målkoordinaten inte ändras på några sekunder, ta sedan en bild av vad vi ska skjuta och trigga vattenventilen för en sprängning av vatten. Svep servon fram och tillbaka några grader för en "hagelgevär".
  • Om vi får tre utlösare för snabbt, inaktivera fotografering, pausa lite, uppdatera sedan referensramen eftersom vi kan skjuta på en skugga eller veranda som just tändes …
  • Varannan minut uppdaterar referensramen för att ta hänsyn till lågfrekventa förändringar (solen går upp/går ner, mulet flyttar in, etc.)

Jag använder bara en horisontell siktmekanism men många pan/tilt servofästen är tillgängliga på EBay och det skulle vara enkelt att lägga till en annan servo för att styra vertikal siktning om du vill ha mer exakt inriktning.

Jag ställde in Raspberry Pi för att köra som en VNC -server och ansluter sedan till den via VNC från min bärbara dator för att starta programmet och övervaka videon och loggarna. cd i katalogen där du lagrar water_blaster.py och kör den genom att skriva:

./python water_blaster.py

Det öppnar ett fönster för bildskärm, startar en loggfil med namnet "./log_phia_date]_time" och skapar en undermir med namnet "trigger_pictures" där jpg-filer (trigger_ [datum] _ [tid]) lagras för varje skott som tas.

Här är några anteckningar om hur du konfigurerar VNC på din Raspberry Pi:

Första gången jag installerade Raspberry Pi använde jag en extern bildskärm/tangentbord/mus för att ställa in saker. Där aktiverade jag VNC -servern vid RasPi -konfigurationen (Raspberry Logo / Preferences / Raspberry Pi Configuration / Interfaces / Check VNC option). Efteråt, när den startar upp, kan du ansluta till dess: 0 -skärm via VNC -klient (med samma referenser som standardanvändaren "pi").

I huvudlöst läge är den som standard en mycket liten upplösning (eftersom den inte detekterar någon bildskärm), för att tvinga den till en större upplösning lägger du till detta i /boot/config.txt och startar om:

# Använd om du har display# hdmi_ignore_edid = 0xa5000080hdmi_group = 2# 1400x1050 w/ 60Hz# hdmi_mode = 42# 1356x768 w/ 60Hzhdmi_mode = 39

Här är lite mer information:

Steg 2: Elektroniken

Kraven på vattenblasterns elektronik är minimala med Raspberry Pi 3 gpio för att driva en servo, vattenventil och IR -belysning via diskreta transistorbuffertar (byggd på ett litet proto -kort). En standard NoIR -kamera ansluts direkt till Raspberry Pi.

Namnet på schemat är: water_blaster_schematic.pdf och bifogas nedan.

Jag använde en 5v/2.5A dedikerad matning för Raspberry Pi och en 12v/1A matning för att driva IR -belysaren och vattenventilen. 12V -matningen driver också en 5v -regulator för att leverera ström till 5v -servon. Detta gjordes för att hålla den "bullriga" motorstyrkraften isolerad från Raspberry Pi 5v -försörjningen. 12v/1A -strömförsörjningen visade sig ligga vid sin gräns (faktiskt något över när jag lade till fläkten). Koden stänger av IR -belysningen innan du sätter på vattenventilreläet för att hålla strömmen inom räckvidd … Det skulle vara bättre om du använde en 1,5A matning. Se till att ansluta jordanslutningarna på alla strömförsörjningar tillsammans.

Kameramodulen är en standard NoIR -version som ansluts direkt till Raspberry Pi. Det är en Raspberry Pi -kamera med IR -filtret redan borttaget så att den kan användas med en IR -belysning för att ta nattvideo.

Servon som används är en standardstor 5v linjär servo med 3-4 kg-cm vridmoment.

IR -belysaren var en lågkostnadsring med 48 led som jag hittade på eBay för cirka 4 dollar. Det är inte super starkt och kan endast lysa upp till cirka 15 fot. Om du har en extra budget är det en bra förbättring att skaffa en starkare belysning.

Jag lade till en "debug-switch" till gpio23. Koden kontrollerar omkopplarens tillstånd och om den trycks in kommer vattenventilreläet att stängas av för torrtestning. Jag trodde att jag skulle göra mer med den växeln men slutade faktiskt inte använda den alls. Jag skulle ta bort den och koden som letar efter den …

Steg 3: Konstruktion: Kamera och IR -belysning

Konstruktion: Kamera och IR -belysning
Konstruktion: Kamera och IR -belysning

Jag använde en Harbour Freight ammunitionslåda i plast som ett hölje. Jag behövde främst något vattentåligt eftersom mycket vattenspray/avrinning är oundvikligt. Det finns massor av hål/utskärningar men de är täckta av markiser, klar plast eller borras under överhäng för att kasta vatten. I bakhåll borde jag ha använt en metalllåda med kylflänsar invändigt fästa på komponenterna med hög effekt. Genom att göra det tror jag att jag kunde ha undvikit att lägga till fläkten. Plastlådan var för isolerande och lät innetemperaturen stiga för mycket.

Ett litet fönster klipptes i slutet för kameran att se ut och IR -belysaren monterades inuti ett gammalt plastlinsfodral som jag hade lagt runt.

Steg 4: Konstruktion: Vattenledningar

Konstruktion: Vattenledningar
Konstruktion: Vattenledningar
Konstruktion: Vattenledningar
Konstruktion: Vattenledningar

Vatteninloppet ledas in i en 12v vattenventil som är ansluten till ett ¼”ID x 3/8” OD vinylrör. Det är i sin tur anslutet till en ¼”taggad slang till ¾ glidpassad PVC -kontakt och limmad på en ¾” PVC -vattenlock med ett 1/16”hål borrat för vattenströmmen. Jag ville hålla vattenventilreläet utanför vädret så att det är monterat inuti lådan. Det finns risk att jag kan få en läcka men jag har borrat dräneringshål i botten av lådan och monterat elektroniken högt upp för att minimera risken för potentiella vattenskador på elektroniken om det händer. En mindre estetiskt tilltalande, men säkrare, plan skulle vara att montera ventilen på utsidan och driva 12v -relätrådarna inuti. Den genomskinliga plastskivan över servon var ett bekvämt sätt att montera slangänden och det hindrar vatten från att droppa ner på servon. Fläkten var en eftertanke då lådan värmde för mycket. Jag byggde en liten markis över den för att hålla vattnet från att droppa in.

Steg 5: Konstruktion: Siktande servo

Konstruktion: Siktande servo
Konstruktion: Siktande servo

Ett hål skärs upp i lådans ovansida och siktserven monteras och förseglas med kisel för att hålla vattnet ute.

Steg 6: Konstruktion: Montering av nätaggregat, fläkt, Raspberry Pi och Proto-board

Konstruktion: Montering av nätaggregat, fläkt, Raspberry Pi och Proto-board
Konstruktion: Montering av nätaggregat, fläkt, Raspberry Pi och Proto-board

De två nätaggregaten (5v och 12v) är anslutna till en enda nätsladd som lämnar lådans sida. Raspberry Pi och en proto board är monterade på sidan av lådan nära toppen. Lägg märke till dräneringshålen som borrats i botten och luftventilationshålen som borrats längs den övre kanten. Fläkten är monterad mittemot Raspberry Pi. Det finns ingen på/av -omkopplare, eftersom jag inte vill uppmuntra att stänga av Raspberry Pi utan ett formellt kommando "sudo shutdown now" (dvs. vill inte att strömmen stängs av för lätt).

Steg 7: Konstruktion: Proto Board

Konstruktion: Proto Board
Konstruktion: Proto Board

Protokortet innehåller en 5v regulator, filterlock, effekttransistorer (som driver servo och vattenventil) och en debug-switch.

Steg 8: Konstruktion: Raspberry Pi -kamera

Konstruktion: Raspberry Pi -kamera
Konstruktion: Raspberry Pi -kamera

Raspberry Pi -kameran ansluts direkt till Raspberry Pi via bandkabeln och monteras på den genomskinliga plastplattan som täcker utsnittet på lådans framsida.

Steg 9: Dellista

Projektet kostade cirka $ 120. Huvuddelen av kostnaden för projektet är Raspberry Pi, kamera, servo och nätaggregat. Jag hittade de flesta delarna på eBay eller Amazon och VVS -delarna på den lokala järnaffären.

  • Raspberry Pi 3 (Amazon) $ 38
  • NoIR -kamera (EBay) $ 30
  • 5v analog servo (vridmoment på 4 kg) (EBay) $ 10
  • 5v/2,4A väggströmförsörjning (EBay) $ 8
  • 12v ½”vattenventil (EBay) $ 5
  • Slangar, rörkopplingar (Osh) $ 5
  • Ammunitionslåda i plast (hamnfrakt) $ 5
  • 12v/1.5A väggströmförsörjning (EBay) $ 5
  • IR -belysning (EBay) $ 4
  • Övrigt Komponenter (motstånd, omkopplare, diod) $ 2
  • CPU -fläkt (EBay) $ 2
  • Proto Board, Standoffs, Screws (EBay) $ 2
  • (2) Strömtransistorer (2n5296) (EBay) $ 1
  • 5v Regulator (LM7805) (EBay) $ 1
  • Klar plast 3/32”(Tap Plast Diverse Bin) $ 1
  • Nätsladd (Osh) $ 1

Butiker/webbplatser där jag köpte varor:

  • Alice1101983 EBay-webbplats:
  • 2bevoque EBay -webbplats:
  • Hamnfrakt
  • Orchard Supply Hardware
  • Amazon
  • Knacka på Plast

Rekommenderad: