Erschrecken Sie Trick-or-Treaters mit einer DIY Motion-Activated Soundbox

Es ist wieder die Zeit des Jahres, in der es sozial akzeptabel ist, kleine Kinder zu erschrecken und ihnen Süßigkeiten zu geben. Oh Freude.

Es ist wieder die Zeit des Jahres, in der es sozial akzeptabel ist, kleine Kinder zu erschrecken und ihnen Süßigkeiten zu geben.  Oh Freude.
Werbung

Es ist wieder die Zeit des Jahres, in der es sozial akzeptabel ist, kleine Kinder zu erschrecken und ihnen Süßigkeiten zu geben. Oh Freude. Ich bin hier, um dir die Arbeit zu erleichtern, indem ich dir zeige, wie man eine einfache Raspberry Pi Halloween Soundbox macht. Hier ist eine Demo:

Hier ist, was Sie brauchen

Wahrscheinlich ist der einzige Teil, den Sie noch nicht haben, der Bewegungssensor, ein kleiner und preiswerter Teil, den Sie in Ihrem lokalen Microcenter oder Maplin finden können.

  • Raspberry Pi (jedes Modell wird es tun).
  • Bewegungssensor (~ 3 $).
  • Anschlussdrähte.
  • Kabelgebundener Lautsprecher (die meisten Bluetooth-Lautsprecher haben die Möglichkeit, Line-In zu verwenden).
  • 3, 5-mm-Stereo-Kabel, männlich zu männlich.

Wenn du fertig bist, möchtest du vielleicht einige synchronisierte Lichteffekte hinzufügen. Wie man Home Lights und Musik für Halloween synchronisiert Wie man Home Lights und Musik für Halloween synchronisiert Egal, ob du eine Halloween House Party veranstaltest oder das coolste Spukhaus in der Nachbarschaft, so dass Ihre Lichter rechtzeitig zu Musik und Sound-Effekte blinken ist von wesentlicher Bedeutung. Lies auch mehr, aber in diesem Tutorial werden wir nur die gruseligen Sounds behandeln!

Einrichten

Wir verwenden Raspbian Jessie Lite und Python 2.7, aber jede Linux-Distribution, die auf Ihrem Pi läuft, sollte in Ordnung sein. Ich habe es auf dem Standard-Hostnamen "raspberrypi.local" gelassen, also logge dich zuerst per Fernzugriff mit SSH ein (öffne ein Terminal-Fenster, wenn du auf dem Mac bist. So funktioniert das Gleiche in Windows 4 Einfache Möglichkeiten zur Verwendung von SSH In Windows 4 Einfache Verwendung von SSH in Windows SSH stellt die De-facto-Lösung für den sicheren Zugriff auf Remote-Terminals unter Linux und anderen UNIX-ähnlichen Systemen dar. Wenn Sie auf einen Remote-SSH-Server zugreifen möchten, müssen Sie einen SSH-Client herunterladen .... Lesen Sie mehr) - oder wenn Sie eine vollständige Raspbian mit Desktop-GUI verwendet haben, zögern Sie nicht zu aktualisieren.

ssh [email protected] (enter raspberry as the password) sudo apt-get update sudo apt-get install python-pip sudo pip install gpiozero 

Dies installiert eine einfache Bibliothek für die Arbeit mit den GPIO-Pins in Python mit vielen Arten von integrierten Sensoren und Schaltflächen. Verdrahten Sie Ihren Sensor mit dem Signalpin des GPIO4, dem VCC, der an 5V angeschlossen ist, und dem GND, der an GND angeschlossen ist. Dies kann je nach Modell variieren, bestätigen Sie dies mit einem Pinbelegungsdiagramm.

Raspberry Pi GPIO-Diagramm
Bildquelle: raspberrypi.org

Hilfreicherweise hat mein Pi 2 Fall von Pimoroni ein Pinoutdiagramm, das direkt auf ihn laser-geätzt wird.

Beschrifteter Raspberry Pi-Kasten

Jetzt machen wir unser Bewegungserkennungsskript.

 nano motion.py 

Einfügen in:

 from gpiozero import MotionSensor pir = MotionSensor(4) while True: if pir.motion_detected: print("Motion detected!") else: print ("No motion") 

Drücke STRG-X und dann Y, um zu speichern und zu beenden, und starte dann mit:

 python motion.py 

Sie sollten die Meldung "Keine Bewegung" auf dem Bildschirm sehen, bis Sie Ihre Hand vor den Sensor halten, wenn sie auf der "Bewegung erkannt!"

Bewegung im Terminal erkannt

Wenn sich die Nachricht überhaupt nicht ändert, hast du sie falsch verdrahtet.

Wenn Sie mehr über diese einfache GPIOZero-Bibliothek erfahren möchten, werfen Sie einen Blick auf diesen fantastischen Cheatsheet.

Ton abspielen

Schließen Sie Ihren tragbaren Lautsprecher an und stellen Sie sicher, dass er mit Strom versorgt wird, wenn er benötigt wird. Wir werden die pygame- Bibliothek verwenden, um Sounds abzuspielen, also mach weiter und installiere es:

 sudo apt-get install python-pygame 

Zuerst benötigen wir eine Sounddatei zum Abspielen. Wenn Sie dies aus der Desktop-Umgebung heraus tun, dann gehen Sie los und laden Sie eine WAV- oder OGG- Datei von irgendwo herunter (ich fand hier eine gute Auswahl an kostenlosen Halloween-Sounds), und legen Sie sie in Ihr Home-Verzeichnis. Ich würde vorschlagen, Downsampling zuerst und konvertieren zu einem kleinen OGG-Format sowieso.

Wenn Sie eine Remoteverbindung herstellen und nur die Befehlszeile verwenden, haben wir einige Probleme mit einigen Sites, da der Befehl wget die eigentliche Datei möglicherweise nicht erfasst. Stattdessen können wir es lokal auf unseren Desktop herunterladen und den Befehl scp (secure copy) verwenden, um die Befehlszeile zu kopieren. Sie können hier mehr über scp erfahren, aber öffnen Sie jetzt eine neue Registerkarte "Terminal" und geben Sie Folgendes ein:

 scp thunder.ogg [email protected]: 

Benenne donner.ogg entsprechend um, vergiss aber nicht das letzte : (der Befehl wird ohne ihn abgeschlossen, aber er tut nicht das, was er tun soll). Standardmäßig überträgt dies die Datei in das Home-Verzeichnis des Pi-Benutzers.

Jetzt ändern wir das Skript, um einen Sound zu spielen. Beginnen Sie mit dem Import einiger neuer Module:

 import pygame.mixer from pygame.mixer import Sound 

Dann, gleich nach den bestehenden Importanweisungen, werden wir den gleichen Sound für Testzwecke immer wieder wiederholen. Lassen Sie den Rest Ihres Motion-Sensing-Codes so, wie er jetzt ist - er läuft einfach nicht, da er für immer in dieser Sound-Wiedergabe-Schleife stecken bleibt.

 pygame.init() pygame.mixer.init() #load a sound file, in the home directory of Pi user (no mp3s) thunder = pygame.mixer.Sound("/home/pi/thunder.ogg") while True: thunder.play() sleep(10) thunder.stop() 

Beachten Sie, dass der Sound, als ich diesen Prozess ursprünglich ausprobierte, die Wiedergabe verweigerte und stattdessen nur darauf klickte. Die Größe der Datei oder Bitrate war der Übeltäter: Es war 24-Bit und über 5 MB für einen 15-Sekunden-Clip. Die Skalierung auf 16 Bit mit dem Konverter, mit dem ich oben verlinkt war, hat alles gut funktioniert und die Größe wurde auf nur 260 KB reduziert!

Wenn Sie bei der Ausführung Ihrer Python-App ein unangenehmes Rauschen von Ihren Lautsprechern bemerken, aber nicht anders, geben Sie Folgendes ein:

 sudo nano /boot/config.txt 

Und füge diese Zeile am Ende hinzu:

 disable_audio_dither=1 

Starten Sie neu, damit die Änderungen wirksam werden. Oder mach dir keine Sorgen, da es für mich irgendwie wie Regen klang.

Schließlich können wir die Hauptschleife für die Bewegungsprüfung modifizieren, um den Ton zu spielen, wenn eine Bewegung erkannt wird. Wir verwenden eine Verzögerung von 15 Sekunden, damit die gesamte Schleife abgespielt werden kann, und um als Spam-Puffer für viele Nonstop-Bewegungen zu dienen.

 while True: if pir.motion_detected: print("Motion detected!") thunder.play() # ensure playback has been fully completed before resuming motion detection, prevents "spamming" of sound sleep(15) thunder.stop() else: print ("No motion") 

Automatisch starten

Wir möchten das wahrscheinlich irgendwo mit einer Batterie und ohne Internetverbindung einrichten, daher muss das Skript beim Neustart ausgeführt werden, ohne dass eine Befehlszeile geöffnet werden muss. Dazu verwenden wir die einfachste mögliche Methode: Die Crontab So planen Sie Aufgaben in Linux mit Cron und Crontab So planen Sie Aufgaben in Linux mit Cron und Crontab Die Fähigkeit, Aufgaben zu automatisieren, ist eine dieser futuristischen Technologien, die bereits vorhanden sind . Jeder Linux-Benutzer kann dank cron, einem einfach zu bedienenden Hintergrunddienst, von der Planung von System- und Benutzeraufgaben profitieren. Weiterlesen . Art:

 sudo crontab -e 

Wenn Sie diesen Befehl das erste Mal ausführen, wird zunächst gefragt, welcher Editor verwendet werden soll. Ich wählte Option 2, für Nano. Es wird in den ausgewählten Editor gestartet, fügen Sie die folgende Zeile hinzu:

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

Dies bedeutet, dass Ihr motion.py-Skript bei jedem Start ausgeführt wird, und zwar im unbeaufsichtigten Modus (sodass alle Ausgaben des Skripts ignoriert werden). Starte es neu, um es auszuprobieren.

Wenn trotz laufender Bewegung nichts abgespielt wird oder Sie nur einen kleinen Klick hören, haben Sie möglicherweise nicht den vollständigen Dateipfad verwendet oder Ihre Datei muss möglicherweise auf eine niedrigere Bitrate und kleinere Dateigröße konvertiert werden.

Fügen Sie weitere Sounds hinzu

Den gleichen Effekt immer und immer wieder zu spielen ist ein bisschen langweilig, also fügen wir etwas Zufälligkeit hinzu. Laden Sie weitere Halloween-Sounds herunter und denken Sie daran, sie auf eine vernünftige Größe und Bitrate zu skalieren, und senden Sie sie dann wie zuvor mit scp an Ihr Pi. Ich fügte drei verschiedene Arten von Schreien hinzu.

Modifizieren Sie den Code so, dass wir, anstatt eine einzelne pygame.mixer.Sound- Variable zu definieren, tatsächlich ein Array von Sounds erstellen. Dies ist bei Python einfach, um eine Komma-getrennte Liste mit eckigen Klammern zu umgeben:

 sounds = [ 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") ] 

Als nächstes importieren Sie die zufällige Bibliothek in Ihre Datei mit:

 import random 

Ändern Sie nun die Hauptbewegungssensorschleife wie folgt:

 while True: if pir.motion_detected: print("Motion detected!") playSound = random.choice(sounds) playSound.play() # ensure playback has been fully completed before resuming motion detection, prevents "spamming" of sound sleep(15) playSound.stop() else: print ("No motion") 

Beachten Sie die kleine Änderung: Anstatt die einzelne Sound-Variable zu spielen, verwenden wir die random.choice- Funktion, um einen zufälligen Sound aus unserem Sounds-Array auszuwählen und diesen dann wiederzugeben .

Hier ist der vollständige Code für den Fall, dass Sie Probleme haben:

 import pygame from pygame.mixer import Sound from gpiozero import MotionSensor from time import sleep import random pygame.init() pygame.mixer.init() #load a sound file, same directory as script (no mp3s) sounds = [ 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: if pir.motion_detected: print("Motion detected!") playSound = random.choice(sounds) playSound.play() # ensure playback has been fully completed before resuming motion detection, prevents "spamming" of sound sleep(15) playSound.stop() else: print ("No motion") 

Bei nur vier Samples besteht jedes Mal eine hohe Wiederholungswahrscheinlichkeit, aber Sie können mehr Samples hinzufügen, wenn das nervt.

Das ist es! Verstecken Sie es in den Büschen mit einigen gruseligen LED-Monsteraugen wie man gruselige Halloween glühende Augen für weniger als $ 5 macht wie man gruselige Halloween glühende Augen für weniger als $ 5 Willst du deine Halloween-Dekorationen in diesem Jahr würzen? Erfahren Sie, wie Sie LED-Augen für weniger als $ 5 in diesem Anfänger Elektronik-Projekt machen können. Lesen Sie mehr, und Sie sollten in der Lage sein, etwas Süßigkeiten zu sparen, während alle Kinder schreiend davonlaufen, bevor sie sogar die Tür erreichen. Oder geh dich in den Schrank, weil eine böse Mutter nach Blut sucht, nachdem du den kleinen Johnny zum Weinen gebracht hast.

Haftungsausschluss: MakeUseOf ist nicht verantwortlich für jegliche Personenschäden, die durch Ihre Nutzung dieses Projekts entstehen können!

Machst du diese bewegungsaktivierte Soundbox, um die lokalen Trick-oder-Treater zu erschrecken? Hast du dieses Halloween mit einem Raspberry Pi irgendwelche gruseligen Effekte eingestellt? Bitte teilen Sie uns dies in den Kommentaren unten mit!

In this article