Innehållsförteckning:
- Steg 1: Huvudartiklar som krävs
- Steg 2: Systemet
- Steg 3: Kodningstid
- Steg 4: Sätta ihop det
- Steg 5: Resultat
- Steg 6: Falska positiva
Video: Cat-a-way-Computer Vision Cat Sprinkler: 6 steg (med bilder)
2024 Författare: John Day | [email protected]. Senast ändrad: 2024-01-30 12:45
Problem - Katter som använder din trädgård som toalett
Lösning - Spendera för mycket tid på att konstruera en kattsprinkler med automatisk YouTube -uppladdningsfunktion
Detta är inte ett steg för steg, utan en översikt över konstruktion och lite kod
#BeforeYouCallPETA - Katterna mår bra, det är ett lågtryckssprinkler precis som regn, så att de kan springa ut innan det ens svänger runt dem. Projektet är inte att blötlägga en katt, utan att visa dem bort innan de fyller min trädgård med kattversionen av Barkers Eggs.
Steg 1: Huvudartiklar som krävs
Raspberry Pi zero & SD -kort
Raspberry Pi -kamera
Relä
555 timer … (eller en arduino och ett annat relä om dina 555 timers inte kommer)
Solenoid
Sprinkler
Något slags hus för elektroniken
En vilja att slå en metaforisk spik med en 6 ton lång slägga
En kamera med så liten upplösning att du knappt kan se vattnet, men kan fortfarande se katterna springa efter skydd
Steg 2: Systemet
1, Pi -kamera upptäcker ett kattstort objekt som rör sig för några kameraramar (beskrivs i nästa steg)
2, Pi sätter igång sprinkler
3, Cat springer för lock
4, Video laddas upp automatiskt till youtube för att se nöje
Steg 3: Kodningstid
Med hjälp av openCV med hjälp av ramsubtraktion kan du hitta områden i ramen som förändras över tiden, med några fiffiga funktioner kan du ta reda på hur stora dessa förändringar är och om de kvarstår över tiden, och viktigast av allt ta reda på om de är kattstorlekar.
Det finns en hel del självstudier om ramsubtraktion som går in i detalj om du gör en snabb Google -sökning.
Översikt över hur koden fungerar
1, kameran fortsätter att ta ramar och jämföra dem med den senaste
2, Om en kattstorleksform detekteras noteras den
3, Om kattstorleksändringen kvarstår över cirka 4 ramar använder pi: n sitt GPIO för att driva relä för att starta arduino
4, Arduino sänder en signal för att driva det andra reläet i 5 sekunder som aktiverar solenoiden
5, solenoiden när den drivs tillåter vatten till sprinklern
6, medan sprinklern är aktiv slutar kameran att upptäcka och spela in video
7, Video laddas upp till Youtube
8, stillbilder laddas upp till dropbox för finjusteringssystem
Obs - Varför jag slutade använda 2 reläer och en arduino för att slå på en solenoid i 5 sekunder …..
1, pi kan inte starta och stoppa solenoiden medan du spelar in videon när python -scrips pausar tills videon är klar, därav behovet av arduino (eller 555 timer) för att låta solenoiden öppna och stänga oberoende av skriptet medan videon spelar fortfarande in.
2, Det första reläet och arduino kan ersättas med en 555 timer men det kom inte i posten i tid för detta projekt, 555 skulle spara mycket tid och steg.
3, Pi kan inte utlösa solenoiden direkt eftersom Pi GPIO fungerar på 3,3v och 51mA max, och solenoiden vill att 5V och mycket mer än 51mA ska utlösas.
4, varje ram kan beskäras för att ta bort rörelsedetektering i oönskade områden, till exempel en grannträdgård. Underlåtenhet att göra detta kommer att resultera i att grannen ger förvirrade blickar in i din trädgård eftersom sprinklern slocknar varje gång han vill gå in i hans skjul.
5, jag har nog missat något uppenbart och slösat bort min tid på att sätta upp det så här.
Kod nedan
import cv2import numpy som np import argparse #cat importtid import RPi. GPIO som GPIO import os import dropbox från picamera.array import PiRGBArray från picamera import PiCamera #------------------ ------------------------------ Ladda upp till youtube ----------------- ---------------------- def HDtoYoutube (): ctime = time.strftime ("_%H-%M-%S") cdate = time.strftime ("_%d-%m-%Y") vidname = ctime + cdate #Trigger relay GPIO.output (11, True) time.sleep (.5) GPIO.output (11, False) print ("Ta video") försök: #Take Video os.system ('raspivid -w 1640 -h 922 -o vid {0}.h264 -t 15000'.format (vidname)) #Upload to youtube print ("Upload to YouTube") os. system ('sudo youtube-upload --title = "Cat Got Wet {0}" --client-secrets = client_secret.json vid {0}.h264'.format (vidname)) #Remove video file when done os.remove ('vid {0}.h264'.format (vidnamn)) print ("Video uppladdad och borttagen från Pi") utom: skicka #-------------------- ---------------------------- Stillbilder till dropbox ------------------- -------------------- def St. illsToDropbox (): print ("Överför fortfarande till Dropbox -funktion") access_token = 'Ah ah ah, du sa inte det magiska ordet … Ah ah ah, du sa inte det magiska ordet' ctime = time.strftime (" %H:%M:%S ") cdate = time.strftime ("%d-%m-%Y ") försök: filnamn =" /Motion/{0}/DetectedAt_{1}.jpg".format(cdate, ctime) print (filnamn) klient = dropbox.client. DropboxClient (access_token) image = open ("ToDropbox.jpg", 'rb') client.put_file (filnamn, bild) image.close () os.remove ("ToDropbox.jpg ") utom: passera #------------------------------------------ ------ Upptäck rörelse ----------------------------------------- def DetectMotion (): #Define vars min_area = 400 tolarance = 25 #change in pixel bluramount = 21 timetoforget = 0.5 kernel = np.ones ((5, 5), np.uint8) #used for dialate MotionCounter = 0 MinTargetArea = 600 # minsta storlek för att upptäcka MaxTargetArea = 5000 #Största storlek att upptäcka nu = time.time () then = time.time () #initialize camera camera = PiCamera () camera.resolution = (640, 480) camera.framerate = 10 raw Capture = PiRGBArray (kamera, storlek = (640, 480)) #uppvärmningstid för kamera.sömn (1) #Ta tag i den första bilden och förbered den för att gå in i cv2.acumulate weight camera.capture (rawCapture, format = "bgr") snitt = rawCapture.array #Skär ut oönskad region PolyCrop = np.array (
#HowToTriggerRealProgrammersWithBadCode
Steg 4: Sätta ihop det
Krama in elen i ett vattentätt hölje, skruva fast saker i väggar och använd massor av tejp och varmt lim
Steg 5: Resultat
När det fungerar fungerar det
Steg 6: Falska positiva
När det inte gör det sprutar kattskuggor, din fru och din dotter.
Tips - Sätt en strömbrytare vid dörren som pausar rörelsedetekteringsprogrammet ….. glöm sedan att använda den och bli blöt när du lägger ut papperskorgarna.
Hoppas att jag gjorde några experter på programmering, elektronik och DIY krymper med alla misstag jag förmodligen gjort, och hoppas särskilt att du tyckte om alla mina stavfel.
Rekommenderad:
Persistens av Vision LED -personal: 11 steg (med bilder)
Persistens hos Vision LED -personal: Det är välkänt att även efter att ett ljus har släckts håller det mänskliga ögat " se " det för en bråkdel av sekunden. Detta kallas Persistence of Vision, eller POV, och det tillåter en att " måla " bilder genom att snabbt flytta en remsa
Sad Cat Fixer, Catch -Me Cat Toy - Skolprojekt: 3 steg
Sad Cat Fixer, Catch-Me Cat Toy-Skolprojekt: Här är vår produkt, Det är en interaktiv leksaksmus: Catch-Me Cat Toy. Här är en lista över problem som många katter i vårt samhälle står inför: Katter blir i dag inaktiva och deprimerade utan att göra något De flesta ägare är upptagna med arbete eller skola och dina barn
Bygg en fjärraktiverad sprinkler med PiFace och Ubidots: 13 steg
Bygg en fjärraktiverad sprinkler med PiFace och Ubidots: Detta är ett coolt exempel som lär dig hur du använder en Raspberry Pi, en PiFace och Ubidots för att vattna din trädgård långt ifrån. Du kan fjärrstyra en elektroventil för att vattna dina växter från valfri plats, bara med din telefon
The Making Of: Een Mini Sprinkler Meting (grupp 12): 8 steg
The Making Of: Een Mini Sprinkler Meting (grupp 12): Groep 12Noortje Romeijn 4651464Milton Fox 4652622Deze Instructable är skriven av Milton Fox (student Maritieme Techniek, TU Delft) och Noortje Romeijn (studenter Civiele Techniek, TU Delft). Allabei volgen we de civiele minor 'De delta denker, wa
Universal Timer - Sprinkler Controller: 5 Steg
Universal Timer-Sprinkler Controller: Uni-timer är en Arduino hårdvarubaserad universal timer-enhet med 4 reläer, som kan programmeras för att slå på och av individuellt eller i grupp vid 24 olika tidsperioder. Syftet med projektet var att bygga en ultra cheep programmerbar timer