Spisu treści:

Automatyczne śledzenie Water Blaster: 9 kroków
Automatyczne śledzenie Water Blaster: 9 kroków

Wideo: Automatyczne śledzenie Water Blaster: 9 kroków

Wideo: Automatyczne śledzenie Water Blaster: 9 kroków
Wideo: YouTuberzy +50kg PART.2 😂 #shorts 2024, Lipiec
Anonim
Automatyczne śledzenie Water Blaster
Automatyczne śledzenie Water Blaster

Jeleń jedzący róże zmotywował mnie do zbudowania miotacza wodnego śledzącego cele, aby pomóc odstraszyć żarłoczne stworzenia… Ten miotacz wodny wykorzystuje wykrywanie ruchu oparte na wideo, aby wycelować serwomechanizm i wywołać krótkie strumienie wody w celu. Strzela dopiero po kilku sekundach unieruchomienia pozyskanego celu (opóźnienie można regulować w kodzie). Nie obchodzi mnie, czy jelenie po prostu przechodzą, ale jeśli zatrzymają się na przekąskę, plusk!

Oto film, na którym testuję miotacz wody:

Water Blaster to samodzielna skrzynka, którą można zdalnie podłączyć (przez Wi-Fi/VNC) z dowolnego komputera w sieci, aby monitorować, co robi. Po każdym uruchomieniu robi zdjęcie, dzięki czemu możesz później zobaczyć, co zostało wysadzone.

Użyłem Raspberry Pi, kamery NoIR, iluminatora IR, standardowego serwomechanizmów liniowych i zaworu wodnego, aby stworzyć ten dzień/noc, śledzący cel miotacz wody. Kod jest napisany w Pythonie i mocno zapożycza się z przykładów kodu cv2 do przetwarzania obrazu Adriana Rosebrocka. Możesz zobaczyć jego zapis pod adresem:

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

Ponieważ kieruję się na stosunkowo duże, naziemne cele (jelenie), mój problem jest nieco uproszczony. Potrzebuję tylko celowania w poziomie, więc mogę uciec z użyciem tylko jednego serwomechanizmu. Czekanie, aż jeleń zatrzyma się, pomaga mi wyeliminować wiele fałszywych wyzwalaczy. To jest moja próba rev-0 i znalazłem kilka rzeczy, które zmodyfikowałbym, gdybym zbudował kolejną. Zanotowałem te rzeczy w szczegółowym opisie poniżej.

Krok 1: Kodeks

Blaster wody wykorzystuje Raspberry Pi 3 do przetwarzania. Do przechwytywania wideo używana jest kamera NoIR Raspberry Pi wraz z oświetlaczem IR do nocnego wideo. Pakiet Python OpenCV/cv2 służy do przechwytywania i przetwarzania informacji o obrazie oraz obliczania współrzędnych docelowych. Biblioteka pigpio służy do sterowania gpio w celu zapewnienia stabilnej pracy serwa. Użycie zwykłego pakietu RPi. GPIO spowodowało chwiejne serwo. UWAGA: Korzystając z biblioteki pigpio, musisz uruchomić demona pigpio. Dodaj to do pliku startowego /etc/rc.local twojego Pi dla biblioteki pigpio i interfejsu kamery Raspberry Pi:

/etc/rc.local# Skonfiguruj /dev/video0, aby połączyć się z Raspberry Pi wbudowaną kamerą interfacemodprobe bcm2835-v4l2# Uruchom demona pigpio dla biblioteki sterującej Raspberry Pi IOpigpiod

Zobacz https://pypi.python.org/pypi/pigpi, aby uzyskać więcej informacji.

Kod źródłowy nosi nazwę: water_blaster.py i jest załączony poniżej.

Zastrzeżenie: Jestem nowy w kodowaniu w Pythonie, więc nie traktuj tego jako żadnego świetnego modelu stylu kodowania w Pythonie!

Podstawowy algorytm wygląda następująco:

  • Chwyć początkową klatkę odniesienia wideo. Będzie to używane do porównania z wykrywaniem ruchu.
  • Chwyć kolejną ramkę.
  • Przekształć ramkę w skalę szarości, zmień jej rozmiar, rozmyj.
  • Oblicz różnicę od ramki odniesienia
  • Odfiltruj małe różnice, uzyskaj współrzędne największej różnicy.
  • Ustaw minutnik. Jeśli współrzędna celu nie zmieni się przez kilka sekund, zrób zdjęcie tego, co zamierzamy strzelić i uruchom zawór wody, aby wystrzelić wodę. Przesuń serwo w przód i w tył o kilka stopni, aby wystrzelić „z dubeltówki”.
  • Jeśli zbyt szybko uzyskamy trzy wyzwalacze, wyłączmy strzelanie, zatrzymajmy się trochę, a następnie zaktualizuj ramkę odniesienia, ponieważ możemy strzelać do cienia lub światła na ganku, które właśnie zostało włączone…
  • Co kilka minut aktualizuj ramkę odniesienia, aby uwzględnić zmiany niskich częstotliwości (wschód/zachód słońca, poruszające się zachmurzenie itp.)

Używam tylko poziomego mechanizmu celowania, ale w serwisie eBay dostępnych jest wiele mocowań serwomechanizmu obrotu/pochylenia i łatwo byłoby dodać kolejny serwomechanizm do kontrolowania celowania w pionie, jeśli chcesz bardziej precyzyjne celowanie.

Skonfigurowałem Raspberry Pi do działania jako serwer VNC, a następnie połączyłem się z nim przez VNC z mojego laptopa, aby uruchomić program i monitorować wideo i logi. cd do katalogu, w którym przechowujesz water_blaster.py i uruchom go wpisując:

./python water_blaster.py

Otworzy się okno monitora wideo, uruchomi plik dziennika o nazwie "./log_[data]_[godzina] i utworzy podkatalog o nazwie "zdjęcia_wyzwalania", w którym przechowywane są pliki-j.webp

Oto kilka uwag na temat konfigurowania VNC na twoim Raspberry Pi:

Kiedy po raz pierwszy konfigurowałem Raspberry Pi, użyłem zewnętrznego monitora/klawiatury/myszy do konfiguracji. Tam włączyłem serwer VNC w konfiguracji RasPi (Raspberry Logo / Preferencje / Konfiguracja Raspberry Pi / Interfejsy / opcja Sprawdź VNC). Następnie, po uruchomieniu, umożliwia połączenie się z wyświetlaczem:0 za pośrednictwem klienta VNC (z tymi samymi danymi uwierzytelniającymi, co domyślny użytkownik „pi”).

W trybie bezgłowym domyślnie wyświetla bardzo małą rozdzielczość (ponieważ nie wykrywa żadnego wyświetlacza), aby wymusić większą rozdzielczość, dodaj to do /boot/config.txt i uruchom ponownie:

# Użyj, jeśli masz wyświetlacz# hdmi_ignore_edid=0xa5000080hdmi_group=2# 1400x1050 z 60Hz#hdmi_mode=42# 1356x768 z 60Hzhdmi_mode=39

Oto więcej informacji:

Krok 2: Elektronika

Wymagania dotyczące elektroniki blastera wodnego są minimalne przy użyciu gpio Raspberry Pi 3 do sterowania serwomechanizmem, zaworem wodnym i iluminatorem podczerwieni przez dyskretne bufory tranzystorowe (zbudowane na małej płytce prototypowej). Standardową kamerę NoIR podłącza się bezpośrednio do Raspberry Pi.

Nazwa schematu to: water_blaster_schematic.pdf i jest załączona poniżej.

Użyłem dedykowanego zasilacza 5v/2,5A dla Raspberry Pi i zasilacza 12v/1A do sterowania oświetlaczem IR i zaworem wodnym. Zasilanie 12 V napędza również regulator 5 V, który zasila serwo 5 V. Zrobiono to, aby utrzymać „zaszumioną” moc sterowania silnikiem odizolowaną od zasilania Raspberry Pi 5v. Zasilanie 12v/1A okazało się prawie na granicy (właściwie nieco ponad po dodaniu wentylatora). Kod wyłącza oświetlacz IR przed zasileniem przekaźnika zaworu wody, aby utrzymać pobór prądu w zakresie… Byłoby lepiej, gdybyś użył zasilacza 1,5A. Pamiętaj, aby połączyć razem zaciski uziemiające wszystkich zasilaczy.

Moduł kamery to standardowa wersja NoIR, którą podłącza się bezpośrednio do Raspberry Pi. Jest to kamera Raspberry Pi z usuniętym filtrem IR, co umożliwia jej używanie z oświetlaczem IR do nagrywania nocnego wideo.

Zastosowane serwo to standardowe serwo liniowe 5V o momencie obrotowym 3-4 kg-cm.

Oświetlacz IR był tanim pierścieniem 48 led, który znalazłem na EBay za około 4 USD. Nie jest super mocny i może świecić tylko do około 15 stóp. Jeśli masz dodatkowy budżet, dobrą poprawą byłoby uzyskanie mocniejszego oświetlacza.

Dodałem „przełącznik debugowania” do gpio23. Kod sprawdza stan przełącznika i jeśli zostanie naciśnięty, wyłączy przekaźnik zaworu wodnego w celu przeprowadzenia testu suchego ognia. Pomyślałem, że zrobię więcej z tym przełącznikiem, ale w ogóle go nie używałem. Usunąłbym go i kod, który go szuka…

Krok 3: Konstrukcja: kamera i oświetlacz IR

Konstrukcja: kamera i oświetlacz IR
Konstrukcja: kamera i oświetlacz IR

Jako obudowy użyłem plastikowej skrzynki po amunicji Harbor Freight. Głównie potrzebowałem czegoś wodoodpornego, ponieważ dużo rozprysków/spływania wody jest nieuniknione. Jest wiele dziur/wycięć, ale są one zakryte markizami, przezroczystym plastikiem lub są wywiercone pod nawisami, aby zrzucić wodę. Z perspektywy czasu powinienem był użyć metalowego pudełka z radiatorami wewnętrznie przymocowanymi do komponentów o dużej mocy. Myślę, że dzięki temu mogłem uniknąć dodania wentylatora. Plastikowe pudełko było zbyt izolujące i pozwalało na zbyt duży wzrost temperatury we wnętrzu.

Na końcu wycięto małe okienko, aby kamera mogła widzieć na zewnątrz, a oświetlacz podczerwieni został zamontowany w starym plastikowym futerale na obiektyw, który leżałem.

Krok 4: Budowa: Rurociągi wodne

Konstrukcja: Rurociągi wodne
Konstrukcja: Rurociągi wodne
Konstrukcja: Rurociągi wodne
Konstrukcja: Rurociągi wodne

Wlot wody jest podłączony rurą do zaworu wody 12 V, który jest podłączony do rury winylowej o średnicy wewnętrznej ¼” i średnicy zewnętrznej 3/8”. Ten z kolei jest podłączony do węża z zadziorami ¼” do złącza wsuwanego PVC ¾ i przyklejony do korka wodnego PVC ¾” z otworem 1/16” wywierconym na strumień wody. Chciałem, aby przekaźnik zaworu wodnego był chroniony przed warunkami pogodowymi, więc jest zamontowany w pudełku. Istnieje niebezpieczeństwo, że mogę uzyskać przeciek, ale wywierciłem otwory spustowe w dnie pudełka i zamontowałem elektronikę wysoko, aby zminimalizować ryzyko potencjalnego uszkodzenia elektroniki przez wodę, jeśli tak się stanie. Mniej estetycznym, ale bezpieczniejszym planem byłoby zamontowanie zaworu na zewnątrz i poprowadzenie przewodów przekaźnika 12 V wewnątrz. Przezroczysty plastikowy dysk nad serwomechanizmem był wygodnym sposobem na zamontowanie końcówki węża i zapobiegał kapaniu wody na serwomechanizm. Wentylator był refleksją, ponieważ pudełko za bardzo się nagrzewało. Zbudowałem nad nim małą markizę, aby woda nie kapała.

Krok 5: Konstrukcja: Celowanie Servo

Konstrukcja: Serwo celownicze
Konstrukcja: Serwo celownicze

W górnej części pudełka wycięty jest otwór, a serwo celownicze jest montowane i uszczelniane silikonem, aby zapobiec przedostawaniu się wody.

Krok 6: Konstrukcja: Montaż zasilaczy, wentylatora, Raspberry Pi i płyty Proto

Konstrukcja: Montaż zasilaczy, wentylatora, Raspberry Pi i płyty Proto
Konstrukcja: Montaż zasilaczy, wentylatora, Raspberry Pi i płyty Proto

Dwa zasilacze (5 V i 12 V) są podłączone do jednego przewodu zasilającego wychodzącego z boku pudełka. Raspberry Pi i płytka proto są zamontowane z boku obudowy u góry. Zwróć uwagę na otwory odpływowe wywiercone w dolnej części i otwory wentylacyjne wywiercone wzdłuż górnej krawędzi. Wentylator montowany jest naprzeciwko Raspberry Pi. Nie ma przełącznika włączania / wyłączania, ponieważ nie chcę zachęcać do wyłączania Raspberry Pi bez formalnego polecenia „sudo shutdown now” (tj. Nie chcę zbyt łatwo wyłączać zasilania).

Krok 7: Budowa: Proto Board

Konstrukcja: Proto Board
Konstrukcja: Proto Board

Płytka proto zawiera regulator 5V, nasadkę filtra, tranzystory mocy (które napędzają serwo i zawór wody) oraz przełącznik debugowania.

Krok 8: Konstrukcja: kamera Raspberry Pi

Konstrukcja: Kamera Raspberry Pi
Konstrukcja: Kamera Raspberry Pi

Kamera Raspberry Pi łączy się bezpośrednio z Raspberry Pi za pomocą kabla taśmowego i jest zamontowana na przezroczystej plastikowej płytce zakrywającej wycięcie z przodu obudowy.

Krok 9: Lista części

Projekt kosztował około 120 dolarów. Większość kosztów projektu to Raspberry Pi, kamera, serwo i zasilacze. Większość części znalazłem w serwisie eBay lub Amazon, a części hydrauliczne w lokalnym sklepie z narzędziami.

  • Raspberry Pi 3 (Amazonka) $38
  • Kamera NoIR (EBBay) 30 USD
  • 5v analogowe serwo (moment obrotowy 4 kg-cm) (EBBay) 10 USD
  • Zasilacz ścienny 5V/2,4A (EBBay) 8 USD
  • Zawór wodny 12v ½” (EBBay) 5
  • Rury, złączki do rur (Osh) 5 USD
  • Plastikowa skrzynka na amunicję (fracht portowy) 5 $
  • Zasilacz ścienny 12 V / 1,5 A (EBBay) 5 USD
  • Oświetlacz IR (EBBay) 4 USD
  • Różne Komponenty (rezystory, przełączniki, dioda) $2
  • Wentylator procesora (EBBay) $2
  • Płytka Proto, wsporniki, śruby (EBBay) $2
  • (2) Tranzystory mocy (2n5296) (EBBay) $1
  • Regulator 5v (LM7805) (eBay) $1
  • Przezroczysty plastik 3/32” (pojemnik na różne tworzywa sztuczne) 1
  • Przewód zasilający (Osh) $1

Sklepy/witryny, w których kupiłem przedmioty:

  • Alice1101983 Witryna eBay:
  • Witryna 2bevoque w serwisie eBay:
  • Fracht portowy
  • Sprzęt do zaopatrzenia sadu
  • Amazonka
  • Dotknij tworzyw sztucznych

Zalecana: