Reklama

To znowu ta pora roku, kiedy uważa się, że społecznie akceptowalne jest przerażanie małych dzieci i dawanie im słodyczy. O radości. Jestem tutaj, aby ułatwić Ci pracę, pokazując, jak zrobić prosty soundbox Raspberry Pi Halloween z funkcją wykrywania ruchu. Oto demo:

Oto, czego będziesz potrzebować

Prawdopodobnie jedyną częścią, której jeszcze nie masz, jest czujnik ruchu, niewielka i niedroga część, którą powinieneś być w stanie znaleźć w lokalnym Microcenter lub Maplin.

  • Raspberry Pi (wystarczy dowolny model).
  • Czujnik ruchu (~ 3 USD).
  • Przewody przyłączeniowe.
  • Głośnik przewodowy (większość głośników Bluetooth będzie mieć możliwość korzystania z wejścia liniowego).
  • Kabel stereo 3,5 mm, męski na męski.

Gdy skończysz, możesz chcieć dodać trochę zsynchronizowane efekty świetlne Jak zsynchronizować oświetlenie domowe i muzykę na HalloweenNiezależnie od tego, czy organizujesz imprezę na Halloween, czy chcesz mieć najfajniejszy nawiedzony dom w okolicy, sprawienie, by światła migały w czasie, gdy usłyszysz muzykę i efekty dźwiękowe. Czytaj więcej

instagram viewer
też, ale w tym samouczku omówimy tylko trochę przerażających dźwięków!

Konfiguracja

Używamy Raspbian Jessie Lite i Python 2.7, ale każda dystrybucja Linuksa działająca na twoim Pi powinna być w porządku. Zostawiłem ją na standardowej nazwie hosta „raspberrypi.local”, więc zacznij od zalogowania się zdalnie za pomocą SSH (otwórz okno terminalu, jeśli korzystasz z komputera Mac. Oto jak zrobić to samo w systemie Windows 4 proste sposoby korzystania z SSH w systemie WindowsSSH to de facto rozwiązanie zapewniające bezpieczny dostęp do zdalnych terminali w systemie Linux i innych systemach typu UNIX. Jeśli masz zdalny serwer SSH, do którego chcesz uzyskać dostęp, musisz pobrać klienta SSH ... Czytaj więcej ) - lub jeśli zdecydowałeś się korzystać z pełnego Raspbian z graficznym graficznym interfejsem użytkownika, możesz przejść do aktualizacji.

ssh [email protected]. (wpisz hasło malina jako hasło) sudo apt-get update. sudo apt-get install python-pip. sudo pip install gpiozero. 

To instaluje prostą bibliotekę do pracy ze stykami GPIO w Pythonie z wieloma typami wbudowanych czujników i przycisków. Połącz czujnik z pinem sygnałowym na GPIO4, VCC podłączonym do 5 V i GND podłączonym do GND. Może się to różnić w zależności od modelu, więc potwierdź za pomocą schematu pinout.

Diagram GPIO Raspberry Pi
Źródło zdjęcia: raspberrypi.org

Pomocnie, moja obudowa Pi 2 od Pimoroni ma wytłoczony laserowo schemat pinouta.

Etykietowane etui Raspberry Pi

Teraz zróbmy nasz skrypt wykrywania ruchu.

nano motion.py. 

Wklej:

z importu gpiozero MotionSensor pir = MotionSensor (4) while True: jeśli pir.motion_detected: print („Motion wykryty!”) else: print („No motion”)

Naciśnij CTRL-X, a następnie Y, aby zapisać i wyjść, a następnie uruchom z:

python motion.py. 

Powinieneś zobaczyć komunikat „brak ruchu” powtarzający się na ekranie, dopóki nie machniesz ręką przed czujnikiem, gdy będzie on pozostawał na „Wykryto ruch!”

Wykryto ruch w terminalu

Jeśli wiadomość w ogóle się nie zmienia, oznacza to, że źle ją podłączyłeś.

Jeśli chcesz dowiedzieć się więcej o tej prostej bibliotece GPIOZero, spójrz na ten fantastyczny ściągawka.

Odtwarzanie dźwięku

Podłącz przenośny głośnik i upewnij się, że jest włączony, jeśli to konieczne. Użyjemy pygame bibliotekę do odtwarzania dźwięków, więc zainstaluj ją:

sudo apt-get install python-pygame. 

Po pierwsze potrzebujemy pliku dźwiękowego do odtworzenia. Jeśli robisz to z poziomu środowiska komputerowego, pobierz plik WAV lub OGG plik gdzieś (znalazłem dobry wybór darmowe dźwięki Halloween tutaj) i umieść go w swoim katalogu domowym. Sugerowałbym najpierw próbkowanie w dół i konwersja do małego formatu OGG tak czy siak.

Jeśli łączysz się zdalnie i tylko za pomocą wiersza polecenia, mamy nieco więcej trudności z niektórymi witrynami, ponieważ wget polecenie może nie pobrać rzeczywistego pliku. Zamiast tego możemy pobrać go lokalnie na nasz pulpit i użyć scp (bezpieczne kopiowanie), aby skopiować za pomocą wiersza polecenia. Możesz dowiedzieć się więcej o scp tutaj, ale na razie otwórz nową kartę Terminal i wpisz:

scp thunder.ogg [email protected]: 

Zmień nazwę thunder.ogg na odpowiednią, ale nie zapomnij o finale : (polecenie zakończy się bez niego, ale nie zrobi tego, co chcemy). Domyślnie plik zostanie przeniesiony do katalogu domowego użytkownika Pi.

Teraz zmodyfikujmy skrypt, aby odtworzył dźwięk. Zacznij od zaimportowania nowych modułów:

import pygame.mixer. z pygame.mixer importuj dźwięk. 

Następnie, tuż po istniejących instrukcjach importu, będziemy powtarzać ten sam dźwięk w kółko do celów testowych. Pozostaw resztę kodu wykrywającego ruch w obecnej postaci - po prostu nie uruchomi się, ponieważ utknie w tej pętli odtwarzania dźwięku na zawsze.

pygame.init () pygame.mixer.init () # załaduj plik dźwiękowy do katalogu domowego użytkownika Pi (bez plików mp3) grzmot = pygame.mixer. Sound („/ home / pi / thunder.ogg”), a True: thunder.play () sleep (10) thunder.stop ()

Zauważ, że kiedy próbowałem tego procesu, dźwięk odmówił odtworzenia i po prostu kliknął. Winowajcą był rozmiar pliku lub szybkość transmisji: było to 24 bity i ponad 5 MB na 15 sekund klipu. Skalowanie tego do 16-bitów za pomocą konwertera, do którego podłączyłem powyżej, sprawiło, że wszystko działało ładnie, a rozmiar został zmniejszony do zaledwie 260 KB!

Jeśli zauważysz nieprzyjemny syk z głośników podczas działania aplikacji Python, ale nie inaczej, wpisz:

sudo nano /boot/config.txt. 

I dodaj tę linię na końcu:

disable_audio_dither = 1. 

Uruchom ponownie, aby zmiany zaczęły obowiązywać. Albo nie przejmuj się, bo i tak dla mnie to brzmiało jak deszcz.

Na koniec zmodyfikujmy główną pętlę sprawdzania ruchu, aby odtwarzać dźwięk po wykryciu ruchu. Wykorzystamy 15-sekundowe opóźnienie, aby można było odtworzyć całą pętlę i działać jako bufor spamu, gdy występuje dużo ruchu non-stop.

while True: jeśli pir.motion_detected: print („Motion wykryty!”) thunder.play () # upewnij się, że odtwarzanie zostało w pełni zakończone przed wznowieniem wykrywania ruchu, zapobiega „spamowaniu” uśpienia dźwięku (15) thunder.stop () else: print („Nie ruch")

Uruchom automatycznie

Prawdopodobnie chcemy to gdzieś ustawić z baterią i bez połączenia z Internetem, więc skrypt musi zostać uruchomiony przy ponownym uruchomieniu bez konieczności otwierania wiersza poleceń. Aby to zrobić, użyjemy najprostszej możliwej metody: crontab Jak planować zadania w systemie Linux za pomocą Cron i CrontabMożliwość automatyzacji zadań jest jedną z tych futurystycznych technologii, które już tu są. Każdy użytkownik systemu Linux może korzystać z harmonogramu zadań systemowych i zadań użytkownika, dzięki cron, łatwej w obsłudze usłudze w tle. Czytaj więcej . Rodzaj:

sudo crontab -e. 

Jeśli uruchamiasz to polecenie po raz pierwszy, zaczniesz od pytania, jakiego edytora użyć. Wybrałem opcję 2 dla nano. Uruchomi się w wybranym edytorze, więc dodaj następujący wiersz:

@reboot python /home/pi/motion.py &

Oznacza to, że skrypt motion.py będzie działał przy każdym uruchomieniu i będzie to robił po cichu (więc wszelkie dane wyjściowe skryptu będą ignorowane). Uruchom ponownie, aby wypróbować.

Jeśli nic nie jest odtwarzane pomimo ruchu lub słychać tylko małe kliknięcie, być może nie wykorzystano pełnej ścieżki pliku lub plik może wymagać konwersji na niższą szybkość transmisji i mniejszy rozmiar pliku.

Dodaj więcej dźwięków

Ciągłe odtwarzanie tego samego efektu jest trochę nudne, więc dodajmy do tego trochę losowości. Pobierz więcej dźwięków Halloween, pamiętając o zmniejszeniu ich do rozsądnego rozmiaru i szybkości transmisji, a następnie prześlij je do swojego Pi za pomocą scp jak wcześniej. Dodałem trzy różne typy krzyku.

Zmodyfikuj kod, aby zamiast definiować pojedynczy pygame.mixer. Dźwięk zmienna, tak naprawdę tworzymy szyk dźwięków. Jest to proste w Pythonie, wystarczy otoczyć ich listę przecinkami nawiasami kwadratowymi, tak jak:

dźwięki = [pygame.mixer. Sound („/ home / pi / thunder.ogg”), pygame.mixer. Sound („/ home / pi / scary_scream.ogg”), pygame.mixer. Sound („/ home / pi / girl_scream.ogg”), pygame.mixer. Dźwięk („/ home / pi / psycho_scream.ogg”)]

Następnie zaimportuj losową bibliotekę do swojego pliku za pomocą:

importuj losowo. 

Teraz zmodyfikuj główną pętlę wykrywania ruchu w następujący sposób:

while True: jeśli pir.motion_detected: print („Wykryto ruch!”) playSound = random.choice (dźwięki) playSound.play () # upewnij się, że odtwarzanie ma został w pełni ukończony przed wznowieniem wykrywania ruchu, zapobiega „spamowaniu” uśpienia dźwięku (15) playSound.stop () else: print („Nie ruch")

Zwróć uwagę na niewielką zmianę: zamiast odtwarzać pojedynczą zmienną Sound, używamy random.choice wybrać losowy dźwięk z naszej tablicy dźwięków, a następnie go odtworzyć.

Oto pełny kod na wypadek problemów:

import pygame. z pygame.mixer importuj dźwięk. z gpiozero importuj MotionSensor. od czasu importu spać. importuj losowo pygame.init () pygame.mixer.init () # załaduj plik dźwiękowy, ten sam katalog co skrypt (bez plików mp3) brzmi = [pygame.mixer. Sound („/ home / pi / thunder.ogg”), pygame.mixer. Sound („/ home / pi / scary_scream.ogg”), pygame.mixer. Sound („/ home / pi / girl_scream.ogg”), pygame.mixer. Sound ("/ home / pi / psycho_scream.ogg")] pir = MotionSensor (4) while True: jeśli pir.motion_detected: print („Wykryto ruch!”) playSound = random.choice (dźwięki) playSound.play () # upewnij się, że odtwarzanie ma został w pełni ukończony przed wznowieniem wykrywania ruchu, zapobiega „spamowaniu” uśpienia dźwięku (15) playSound.stop () else: print („Nie ruch")

Przy tylko czterech próbkach istnieje wysokie prawdopodobieństwo powtórzenia za każdym razem, ale możesz dodać więcej próbek, jeśli jest to denerwujące.

Otóż ​​to! Ukryj to w krzakach przerażające oczy potworów LED Jak zrobić upiorne świecące oczy Halloween za mniej niż 5 USDChcesz urozmaicić dekoracje Halloween w tym roku? Dowiedz się, jak zrobić oczy LED za mniej niż 5 USD w projekcie elektroniki dla początkujących. Czytaj więcej , i powinieneś być w stanie zaoszczędzić sobie trochę słodyczy, ponieważ wszystkie dzieci uciekają krzycząc, zanim jeszcze dojdą do drzwi. Albo chowaj się w szafie, bo wściekła mama wypływa z krwi po tym, jak mały Johnny płacze.

Oświadczenie: MakeUseOf nie ponosi odpowiedzialności za jakiekolwiek obrażenia ciała, które mogą wyniknąć z korzystania z tego projektu!

Czy stworzysz ten aktywowany ruchem soundbox, aby przestraszyć lokalnych oszustów? Czy ustawiłeś jakieś przerażające efekty z Raspberry Pi w Halloween? Daj nam znać o tym w komentarzach poniżej!

James ma licencjat z zakresu sztucznej inteligencji i jest certyfikowany przez CompTIA A + i Network +. Jest głównym programistą MakeUseOf i spędza wolny czas grając w paintball VR i gry planszowe. Buduje komputery od dziecka.