Innholdsfortegnelse:

Cat-a-way-Computer Vision Cat Sprinkler: 6 trinn (med bilder)
Cat-a-way-Computer Vision Cat Sprinkler: 6 trinn (med bilder)

Video: Cat-a-way-Computer Vision Cat Sprinkler: 6 trinn (med bilder)

Video: Cat-a-way-Computer Vision Cat Sprinkler: 6 trinn (med bilder)
Video: Teacher vs Student drawing challenge #drawing #art #6 2024, Desember
Anonim
Cat-a-way-Computer Vision Cat Sprinkler
Cat-a-way-Computer Vision Cat Sprinkler

Problem - Katter som bruker hagen din som toalett

Løsning - Bruk for mye tid på å konstruere en kattesprinkler med automatisk opplastingsfunksjon for YouTube

Dette er ikke et trinn for trinn, men en oversikt over konstruksjon og litt kode

#BeforeYouCallPETA - Kattene har det bra, det er et lavtrykkssprinkler akkurat som regn, at de kan løpe ut før det svinger rundt dem. Prosjektet er ikke å suge en katt, men å vise dem bort før de forsøpler hagen min med katteversjonen av Barkers Eggs.

Trinn 1: Hovedelementer påkrevd

Hovedelementer påkrevd
Hovedelementer påkrevd

Raspberry Pi zero & SD -kort

Raspberry Pi kamera

Stafett

555 timer…. (eller en arduino og et annet relé hvis 555 timerne ikke kommer)

Solenoid

Sprinkler

En slags bolig for elektronikken

En vilje til å slå en metaforisk spiker med en 6 tonns slegge

Et kamera med så liten oppløsning at du knapt kan se vannet, men kan fortsatt se kattene løpe etter dekning

Trinn 2: Systemet

Image
Image

1, Pi -kamera oppdager et objekt i kattstørrelse som beveger seg for noen kamerarammer (forklart i neste trinn)

2, Pi setter i gang sprinkler

3, Cat løper etter dekning

4, video lastes automatisk opp til youtube for å se glede

Trinn 3: Kodingstid

Sette det sammen
Sette det sammen

Ved å bruke openCV ved hjelp av rammesubtraksjon kan du finne områder i rammen som endres over tid, ved å bruke noen fiffige funksjoner kan du finne ut hvor store disse endringene er og om de vedvarer over tid, og viktigst av alt finne ut om de er kattestørrede.

Det er ganske mange opplæringsprogrammer om rammesubtraksjon som går i detalj hvis du gjør et raskt google -søk.

Oversikt over hvordan koden fungerer

1, kameraet fortsetter å ta bilder og sammenligne dem med det siste

2, Hvis det oppdages en kattstørrelsesform, blir det notert

3, Hvis endringen i kattstørrelsen vedvarer over rundt 4 bilder, bruker pi -en sin GPIO til å drive reléet for å starte arduino

4, Arduino sender et signal for å drive det andre reléet i 5 sekunder som aktiverer solenoiden

5, solenoiden når den drives, tillater vann til sprinkleren

6, mens sprinkleren er aktiv, slutter kameraet å oppdage og ta opp video

7, blir videoen lastet opp til Youtube

8, Stills lastet opp til dropbox for finjusteringssystem

Merk - Hvorfor jeg endte med å bruke 2 reléer og en arduino for å slå på en solenoid i 5 sekunder…..

1, pi kan ikke starte og stoppe solenoiden mens du spiller inn videoen mens python -scrips pauser til videoen er ferdig, og derfor er det nødvendig med arduino (eller 555 timer) for å la solenoiden åpne og lukke uavhengig av skriptet mens videoen tar fortsatt opp.

2, Det første reléet og arduino kan erstattes med en 555 timer, men det kom ikke i posten i tide for dette prosjektet, ville 555 spare mye tid penger og trinn.

3, Pi kan ikke utløse solenoiden direkte ettersom Pi GPIO fungerer på 3,3v og 51mA maks, og solenoiden vil at 5V og mye mer enn 51mA skal utløses.

4, Hver ramme kan beskjæres for å fjerne bevegelsesdeteksjon i uønskede områder, for eksempel en nabohage. Unnlatelse av å gjøre dette vil resultere i at naboen gir forvirret blikk inn i hagen din fordi sprinkleren går av hver gang han vil gå inn i skuret hans.

5, jeg savnet sannsynligvis noe åpenbart og kastet bort tiden min på å sette det opp slik.

Kode nedenfor

import cv2import numpy as np import argparse #cat import time import RPi. GPIO as GPIO import os import dropbox from picamera.array import PiRGBArray from picamera import PiCamera #------------------ ------------------------------ Last opp til youtube ----------------- ---------------------- def HDtoYoutube (): ctime = time.strftime ("_%H-%M-%S") cdate = time.strftime ("_%d-%m-%Y") vidname = ctime + cdate #Trigger-relé GPIO.output (11, True) time.sleep (.5) GPIO.output (11, False) print ("Ta video") Prøv: #Take Video os.system ('raspivid -w 1640 -h 922 -o vid {0}.h264 -t 15000'.format (vidname)) #Last opp til youtube -utskrift ("Laster opp til 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 (vidnavn)) print ("Video lastet opp og fjernet fra Pi") unntatt: pass #-------------------- ---------------------------- Stillbilder til dropbox ------------------- -------------------- def St. illsToDropbox (): print ("Last opp still til Dropbox -funksjon") access_token = 'Ah ah ah, du sa ikke det magiske ordet … Ah ah ah, du sa ikke det magiske ordet' ctime = time.strftime (" %H:%M:%S ") cdate = time.strftime ("%d-%m-%Y ") prøv: filnavn =" /Motion/{0}/DetectedAt_{1}.jpg".format(cdate, ctime) print (filnavn) client = dropbox.client. DropboxClient (access_token) image = open ("ToDropbox.jpg", 'rb') client.put_file (filnavn, image) image.close () os.remove ("ToDropbox-j.webp

#HowToTriggerRealProgrammersWithBadCode

Trinn 4: Sette det sammen

Sette det sammen
Sette det sammen
Sette det sammen
Sette det sammen
Sette det sammen
Sette det sammen

Kram det elektriske i et vanntett hus, skru ting i vegger og bruk masse tape og varmt lim

Trinn 5: Resultater

Image
Image
Resultater
Resultater

Når det fungerer fungerer det

Trinn 6: Falske positive

Falske positive
Falske positive

Når det ikke gjør det, spruter det katteskygger, kona og datteren din.

Tips - Sett en bryter ved døren som stopper programmet for bevegelsesdeteksjon …. så glem å bruke det og bli gjennomvåt når du setter søppelbøttene ut.

Håper jeg har laget noen eksperter innen programmering, elektronikk og DIY med alle feilene jeg sannsynligvis har gjort, og spesielt håper du likte alle mine stavefeil.

Anbefalt: