Spisu treści:
- Krok 1: Wymagane główne przedmioty
- Krok 2: System
- Krok 3: Czas kodowania
- Krok 4: Łączenie w całość
- Krok 5: Wyniki
- Krok 6: Fałszywe pozytywy
Wideo: Cat-a-way - zraszacz dla kota z komputerowym systemem wizyjnym: 6 kroków (ze zdjęciami)
2024 Autor: John Day | [email protected]. Ostatnio zmodyfikowany: 2024-01-30 11:31
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
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
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
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ść
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
Kiedy to działa, to działa
Krok 6: 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:
Kontrola dostępu do karmy dla kota (ESP8266 + serwomotor + drukowanie 3D): 5 kroków (ze zdjęciami)
Kontrola dostępu do karmy dla kota (ESP8266 + serwomotor + druk 3D): Ten projekt obejmuje proces, którego użyłem do stworzenia automatycznej miski na karmę dla mojego starszego kota z cukrzycą Chaz. Widzisz, musi zjeść śniadanie, zanim będzie mógł dostać insulinę, ale często zapominam odebrać jego danie przed pójściem spać, co
Automatyczny dozownik karmy dla kota: 7 kroków (ze zdjęciami)
Automatyczny dozownik karmy dla kota: Jeśli nie kontrolujesz ilości jedzenia, które zjada kot, może to prowadzić do problemów z przejadaniem się i nadwagą. Jest to szczególnie ważne, jeśli jesteś poza domem i zostawiasz kotu dodatkową karmę do spożycia według własnego harmonogramu. Innym razem możesz r
Wzmacniacz DIY 600 W ze starym komputerowym zasilaczem impulsowym: 9 kroków (ze zdjęciami)
Wzmacniacz DIY 600 W ze starym komputerowym zasilaczem impulsowym: Hej! Wszyscy Nazywam się Steve.Dzisiaj pokażę Ci, jak zrobić 600-watowy wzmacniacz z zasilaczem komputerowymKliknij tutaj, aby obejrzeć film Zacznijmy
C4TB0T - Bezprzewodowa konfigurowalna zabawka dla kota: 6 kroków (ze zdjęciami)
C4TB0T - Bezprzewodowa konfigurowalna zabawka dla kota: Ta zabawka to nie tylko bezprzewodowa zabawka laserowa, którą możesz kontrolować za pomocą smartfona, nie jest czymś więcej! Na tym robocie można montować inne zabawki, dzięki czemu jest to doskonała zabawka dla kota, którą można dostosować. Jeśli będziesz postępować zgodnie z instrukcjami, Ty też będziesz mógł
Użyj SSH i XMing do wyświetlania programów X z komputera z systemem Linux na komputerze z systemem Windows: 6 kroków
Używanie SSH i XMing do wyświetlania programów X z komputera z systemem Linux na komputerze z systemem Windows: Jeśli używasz systemu Linux w pracy, a systemu Windows w domu lub odwrotnie, czasami konieczne może być zalogowanie się na komputerze w innej lokalizacji i uruchamiaj programy. Cóż, możesz zainstalować serwer X i włączyć tunelowanie SSH za pomocą klienta SSH, a jeden