Spisu treści:

Cat-a-way - zraszacz dla kota z komputerowym systemem wizyjnym: 6 kroków (ze zdjęciami)
Cat-a-way - zraszacz dla kota z komputerowym systemem wizyjnym: 6 kroków (ze zdjęciami)

Wideo: Cat-a-way - zraszacz dla kota z komputerowym systemem wizyjnym: 6 kroków (ze zdjęciami)

Wideo: Cat-a-way - zraszacz dla kota z komputerowym systemem wizyjnym: 6 kroków (ze zdjęciami)
Wideo: #policja ❤️ #kia #randka 2024, Listopad
Anonim
Cat-a-way - zraszacz dla kotów z komputerowym widzeniem
Cat-a-way - zraszacz dla kotów z komputerowym widzeniem

Problem - Koty wykorzystują Twój ogród jako toaletę

Rozwiązanie - Poświęć zbyt dużo czasu na projektowanie zraszaczy dla kotów z funkcją automatycznego przesyłania na YouTube

To nie jest krok po kroku, ale przegląd konstrukcji i trochę kodu

#BeforeYouCallPETA - Koty mają się dobrze, to zraszacz niskociśnieniowy, taki jak deszcz, który mogą uciec, zanim jeszcze się do nich obróci. Projekt nie polega na namoczeniu kota, ale na wyeksponowaniu go, zanim zaśmieci mój ogród kocią wersją Barkers Eggs.

Krok 1: Wymagane główne przedmioty

Wymagane główne przedmioty
Wymagane główne przedmioty

Raspberry Pi zero i karta SD

Kamera Raspberry Pi

Przekaźnik

555 minutnik…. (lub arduino i inny przekaźnik, jeśli twoje 555 timery nie dotrą)

Elektrozawór

Tryskacz

Jakiś rodzaj obudowy dla elektroniki

Chęć wbicia w metaforyczny gwóźdź 6-tonowym młotem kowalskim

Aparat o tak małej rozdzielczości, że ledwo widać wodę, ale nadal widać koty biegnące, by się ukryć

Krok 2: System

Image
Image

1, kamera Pi wykrywa poruszający się obiekt wielkości kota przez kilka klatek kamery (opisane w następnym kroku)

2, Pi uruchamia zraszacz

3, kot biegnie na okładkę

4, wideo automatycznie przesyłane na youtube w celu oglądania przyjemności

Krok 3: Czas kodowania

Łączenie w całość
Łączenie w całość

Używając openCV używając odejmowania klatek, możesz znaleźć obszary klatki, które zmieniają się w czasie, używając kilku sprytnych funkcji, możesz dowiedzieć się, jak duże są te zmiany i czy utrzymują się w czasie, a co najważniejsze, dowiedzieć się, czy są wielkości kota.

Istnieje wiele samouczków na temat odejmowania ramek, które są bardzo szczegółowe, jeśli przeprowadzisz szybkie wyszukiwanie w Google.

Omówienie działania kodu

1, aparat nadal robi zdjęcia i porównuje je z ostatnimi;

2, jeśli zostanie wykryty kształt wielkości kota, zostanie to odnotowane;

3, jeśli zmiana wielkości kota utrzymuje się przez około 4 klatki, pi używa swojego GPIO do zasilania przekaźnika, aby uruchomić arduino

4, arduino wysyła sygnał do zasilania drugiego przekaźnika przez 5 sekund, który aktywuje elektrozawór;

5, solenoid po włączeniu umożliwia wodę do tryskacza;

6, gdy zraszacz jest aktywny, kamera przestaje wykrywać i nagrywa wideo;

7, wideo jest przesyłane na Youtube

8, zdjęcia przesłane do Dropbox w celu dostrojenia systemu

Uwaga - Dlaczego skończyłem używać 2 przekaźników i arduino do włączenia elektrozaworu na 5 sekund…..

1, pi nie może uruchomić i zatrzymać solenoidu podczas nagrywania wideo, ponieważ skrypty Pythona wstrzymują się do zakończenia wideo, stąd potrzeba arduino (lub timera 555), aby umożliwić solenoidowi otwieranie i zamykanie niezależnie od skryptu, podczas gdy wideo nadal się nagrywa.

2, pierwszy przekaźnik i arduino można zastąpić zegarem 555, ale to nie pojawiło się w poście na czas dla tego projektu, 555 zaoszczędziłoby dużo czasu i pieniędzy.

3, pi nie może bezpośrednio wyzwolić elektrozaworu, ponieważ Pi GPIO działa na 3,3 V i 51 mA maks., a elektrozawór chce wyzwolić 5 V i znacznie więcej niż 51 mA.

4, Każdą ramkę można przyciąć, aby usunąć wykrywanie ruchu w niechcianych obszarach, takich jak ogród sąsiadów. Niezastosowanie się do tego spowoduje, że wspomniany sąsiad spojrzy zdezorientowany na twój ogród, ponieważ zraszacz wyłączy się za każdym razem, gdy będzie chciał wejść do swojej szopy.

5, prawdopodobnie przegapiłem coś oczywistego i zmarnowałem czas na ustawienie tego w ten sposób.

Kod poniżej

import cv2import numpy jako np import argparse #cat import time import RPi. GPIO jako GPIO import systemu operacyjnego import dropbox z picamera.array import PiRGBArray z picamera import PiCamera #------------------ ------------------------------Prześlij na 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("Taking Video") spróbuj: #Take Video os.system('raspivid -w 1640 -h 922 -o vid{0}.h264 -t 15000'.format(vidname)) #Prześlij na youtube print("Przesyłanie do YouTube") os. system('sudo youtube-upload --title="Kot zmoknął {0}" --client-secrets=client_secret.json vid{0}.h264'.format(vidname)) #Po zakończeniu usuń plik wideo os.remove ('vid{0}.h264'.format(vidname)) print("Wideo przesłane i usunięte z Pi") z wyjątkiem: pass #-------------------- ----------------------------Wciąż do Dropbox------------------- -------------------- def St illsToDropbox(): print("Przesyłanie nadal do funkcji Dropbox") access_token = 'Ach ah ah, nie powiedziałeś magicznego słowa…Ah ah ah, nie powiedziałeś magicznego słowa' ctime = time.strftime(" %H:%M:%S") cdate = time.strftime("%d-%m-%Y") try: filename = "/Ruch/{0}/DetectedAt_{1}.jpg".format(cdate, ctime) print(filename) client = dropbox.client. DropboxClient(access_token) image = open("ToDropbox.jpg", 'rb') client.put_file(filename, image) image.close() os.remove("ToDropbox.jpg”) z wyjątkiem: pass #------------------------------------------ ------Wykryj ruch----------------------------------------- def DetectMotion(): #Define vars min_area = 400 tolarance = 25 #zmiana w pikselach bluramount = 21 timetoforget = 0.5 kernel = np.ones((5, 5), np.uint8) #używane do dialate MotionCounter = 0 MinTargetArea = 600 # najmniejszy rozmiar do wykrycia MaxTargetArea = 5000 #Największy rozmiar do wykrycia teraz = time.time() then = time.time() #zainicjuj kamerę kamera = PiCamera() camera.resolution = (640, 480) camera.framerate = 10 raw Capture = PiRGBArray(camera, size=(640, 480)) #warmup camera time.sleep(1) #Chwyć pierwszą klatkę i przygotuj ją na cv2.acumulate weight camera.capture(rawCapture, format="bgr") avg = rawCapture.array # Wytnij niechciany region PolyCrop = np.array(

#HowToTriggerRealProgrammersWithBadCode

Krok 4: Łączenie w całość

Łączenie w całość
Łączenie w całość
Łączenie w całość
Łączenie w całość
Łączenie w całość
Łączenie w całość

Umieścić elektrykę w wodoodpornej obudowie, przykręcić rzeczy do ścian i użyć dużej ilości taśmy klejącej i gorącego kleju

Krok 5: Wyniki

Image
Image
Wyniki
Wyniki

Kiedy to działa, to działa

Krok 6: Fałszywe pozytywy

Fałszywe pozytywy
Fałszywe pozytywy

Kiedy tak nie jest, spryskuje cieniami kota, twoją żonę i córkę.

Porada od specjalistów - umieść przełącznik przy drzwiach, który wstrzymuje program wykrywania ruchu….. a następnie zapomnij go użyć i zmocz podczas wyjmowania pojemników.

Mam nadzieję, że wszyscy eksperci w programowaniu, elektronice i majsterkowaniu wzdrygali się po wszystkich błędach, które prawdopodobnie popełniłem, a zwłaszcza mam nadzieję, że podobały Ci się wszystkie moje błędy ortograficzne.

Zalecana: