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

Trick-or-Treaters mit einer DIY-Motion-Activated-Soundbox / DIY

Es ist wieder die Zeit des Jahres, wenn es als sozial akzeptabel betrachtet wird, kleine Kinder zu erschrecken und ihnen Süßigkeiten zu geben. Oh Freude. Ich bin hier, um Ihnen die Arbeit zu erleichtern, indem ich Ihnen zeige, wie Sie eine einfache Raspberry Pi Halloween-Soundbox mit Bewegungserkennung herstellen. Hier ist eine Demo:

Hier ist was Sie brauchen

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

  • Himbeer-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-Stereokabel, männlich zu männlich.

Wenn Sie fertig sind, möchten Sie vielleicht einige synchronisierte Beleuchtungseffekte hinzufügen. So synchronisieren Sie Home Lights und Musik für Halloween. So synchronisieren Sie Home Lights und Musik für Halloween. Ob Sie eine Halloween-Hausparty veranstalten oder das coolste Geisterhaus in New York besuchen möchten In der Nachbarschaft ist es wichtig, dass Ihre Lichter rechtzeitig zu Musik und Soundeffekten blinken. Lesen Sie auch mehr, aber in diesem Tutorial behandeln wir nur die beängstigenden Klänge!

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 gelassen “raspberrypi.local”, Melden Sie sich daher mit einem Remote-Zugriff über SSH an (öffnen Sie ein Terminalfenster, wenn Sie einen Mac verwenden. So gehen Sie in Windows 4 vor. Einfache Verwendung von SSH in Windows 4 Einfache Verwendung von SSH Unter Windows ist SSH die De-facto-Lösung Für den sicheren Zugriff auf Remote-Terminals unter Linux und anderen UNIX-ähnlichen Systemen Wenn Sie einen Remote-SSH-Server haben, auf den Sie zugreifen möchten, müssen Sie einen SSH-Client herunterladen (Read More) - oder wenn Sie sich für einen vollständigen Raspbian entschieden haben Mit der Desktop-GUI können Sie jederzeit mit der Aktualisierung fortfahren.

ssh [email protected] (geben Sie Himbeer als Kennwort ein) sudo apt-get update Sudo apt-get installieren python-pip sudo pip install gpiozero 

Dadurch wird eine einfache Bibliothek für die Arbeit mit den GPIO-Pins in Python mit vielen integrierten Sensoren und Schaltflächen installiert. Verbinden Sie Ihren Sensor mit dem Signalpin an GPIO4, dem an 5V angeschlossenen VCC und der an GND angeschlossenen Masse. Dies kann je nach Modell variieren. Bestätigen Sie dies mit einem Pinbelegungsdiagramm.

Bildnachweis: raspberrypi.org

Mein Pi 2 Case von Pimoroni hat ein Pinout-Diagramm, das direkt mit dem Laser geätzt wurde.

Jetzt machen wir unser Bewegungserkennungsskript.

nano motion.py 

Einfügen in:

von gpiozero import MotionSensor pir = MotionSensor (4), während True: Wenn pir.motion_detected: print ("Bewegung erkannt!") andernfalls: print ("No motion") 

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

python motion.py 

Sie sollten das sehen “keine Bewegung” Die Meldung wird auf dem Bildschirm wiederholt, bis Sie mit der Hand vor dem Sensor winken, wenn sie auf dem Bildschirm verweilt “Bewegung erkannt!”

Wenn sich die Nachricht nicht ändert, haben Sie sie falsch verkabelt.

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

Ton abspielen

Schließen Sie Ihren tragbaren Lautsprecher an und stellen Sie sicher, dass er mit Strom versorgt wird, wenn dies erforderlich ist. Wir werden die verwenden Pygame Musikbibliothek zum Abspielen von Sounds, also installieren Sie sie:

sudo apt-get install python-pygame 

Zuerst brauchen wir eine Sounddatei, um abzuspielen. Wenn Sie dies von der Desktop-Umgebung aus tun, laden Sie a herunter WAV oder OGG Datei von irgendwo (ich habe hier eine gute Auswahl an kostenlosen Halloween-Sounds gefunden), und lege sie in dein Home-Verzeichnis. Ich würde vorschlagen, zuerst das Downsampling durchzuführen und trotzdem in ein kleines OGG-Format zu konvertieren.

Wenn Sie aus der Ferne eine Verbindung herstellen und nur die Befehlszeile verwenden, haben wir bei einigen Websites etwas mehr Schwierigkeiten, da die wget Befehl kann die tatsächliche Datei nicht packen. Stattdessen können wir es lokal auf unseren Desktop herunterladen und die scp (sichere Kopie) Befehl zum Kopieren über die Befehlszeile. Sie können hier mehr über scp erfahren. Öffnen Sie jedoch zunächst eine neue Registerkarte "Terminal" und geben Sie Folgendes ein:

scp thunder.ogg [email protected]: 

Benennen Sie "thunder.ogg" entsprechend um, aber vergessen Sie das Finale nicht : (Der Befehl wird ohne den Befehl ausgeführt. Er wird jedoch nicht das tun, was wir möchten). Standardmäßig wird die Datei in das Home-Verzeichnis des Pi-Benutzers übertragen.

Lassen Sie uns nun das Skript so ändern, dass ein Sound abgespielt wird. Beginnen Sie mit dem Importieren einiger neuer Module:

importieren Sie pygame.mixer aus pygame.mixer importieren Sie Sound 

Dann, gleich nach den bestehenden Import-Anweisungen, wiederholen wir zu Testzwecken immer wieder denselben Sound. Lassen Sie den Rest Ihres Bewegungssensor-Codes für den Moment wie er ist - er läuft einfach nicht, da er für immer in diesem Sound-Play-Loop stecken bleibt.

pygame.init () pygame.mixer.init () #lädt eine Sounddatei, und zwar im Home-Verzeichnis des Pi-Benutzers (keine mp3s). thunder = pygame.mixer.Sound ("/ home / pi / thunder.ogg"), während der Wert "True" ist : thunder.play () sleep (10) thunder.stop () 

Wenn ich diesen Vorgang ursprünglich ausprobierte, lehnte der Sound die Wiedergabe ab und klickte stattdessen einfach auf. Die Größe der Datei oder der Bitrate war der Schuldige: Es war 24 Bit und über 5 MB für einen 15 Sekunden langen Clip. Durch die Verwendung des Konverters, den ich oben verlinkt habe, auf 16 Bit skaliert, funktionierte alles gut und die Größe wurde auf nur 260 KB reduziert!

Wenn Sie bei der Ausführung Ihrer Python-App ein unangenehmes Rauschen aus Ihren Lautsprechern feststellen, 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 machen Sie sich nicht die Mühe, da es für mich irgendwie nach Regen klang.

Schließlich ändern wir die Hauptbewegungsprüfschleife, um den Ton abzuspielen, wenn eine Bewegung erkannt wird. Wir verwenden eine Verzögerung von 15 Sekunden, damit die gesamte Schleife abgespielt werden kann und als Spam-Puffer für viele Non-Stop-Bewegungen fungiert.

Während wahr: Wenn pir.motion_detected: print ("Bewegung erkannt!") thunder.play () # sicherstellen, dass die Wiedergabe vollständig abgeschlossen ist, bevor die Bewegungserkennung wieder aufgenommen wird, wird das "Spamming" von Sound Sleep (15) thunder.stop () verhindert. drucken ("Keine Bewegung") 

Automatisch starten

Wir möchten dies 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. Um dies zu erreichen, verwenden wir die einfachste Methode: Die Crontab-Task So planen Sie Aufgaben in Linux mit Cron und Crontab So planen Sie Aufgaben in Linux mit Cron und Crontab Die Möglichkeit, Aufgaben zu automatisieren, ist eine dieser futuristischen Technologien, die bereits vorhanden ist . Dank des einfach zu bedienenden Hintergrunddienstes cron kann jeder Linux-Benutzer von Terminplanungssystem- und Benutzeraufgaben profitieren. Weiterlesen . Art:

Sudo Crontab -e 

Wenn Sie diesen Befehl zum ersten Mal ausführen, werden Sie zunächst gefragt, welcher Editor verwendet werden soll. Ich wählte Option 2 für Nano. Es wird in den von Ihnen gewählten Editor gebootet, fügen Sie also die folgende Zeile hinzu:

@regenpython /home/pi/motion.py & 

Das bedeutet, dass Ihr motion.py-Skript bei jedem Start automatisch ausgeführt wird (dh alle Ausgaben des Skripts werden ignoriert). Starten Sie neu, um es auszuprobieren.

Wenn trotz Bewegung nichts gespielt wird oder Sie nur ein kleines Klicken hören, haben Sie möglicherweise nicht den vollständigen Dateipfad verwendet, oder Ihre Datei muss möglicherweise in eine niedrigere Bitrate und eine kleinere Dateigröße konvertiert werden.

Fügen Sie weitere Sounds hinzu

Den gleichen Effekt immer wieder zu spielen, ist ein bisschen langweilig, also fügen wir etwas Zufälligkeit hinzu. Laden Sie weitere Halloween-Sounds herunter, denken Sie daran, sie auf eine sinnvolle Größe und Bitrate zu verkleinern, und senden Sie sie dann mit zu Ihrem Pi scp wie vorher. Ich habe drei verschiedene Arten von Schrei hinzugefügt.

Ändern Sie den Code so, dass kein einzelner Code definiert wird pygame.mixer.Sound Variable, erstellen wir tatsächlich eine Array von Tönen Mit Python ist das ganz einfach. Umgeben Sie eine durch Kommas getrennte Liste mit eckigen Klammern.

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:

zufällig importieren 

Ändern Sie nun die Hauptbewegungserkennungsschleife wie folgt:

while True: Wenn pir.motion_detected: print ("Bewegung erkannt!") playSound = random.choice (sounds) playSound.play () # sorgt dafür, dass die Wiedergabe vollständig abgeschlossen ist, bevor die Bewegungserkennung wieder aufgenommen wird ) playSound.stop () else: print ("No motion") 

Beachten Sie die geringfügige Änderung: Anstatt die einzelne Soundvariable abzuspielen, verwenden wir die zufällig Funktion, um einen zufälligen Sound aus unserem Sound-Array auszuwählen und diesen dann abzuspielen.

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

pygame aus pygame.mixer importieren importieren Sound aus gpiozero importieren MotionSensor aus Zeit importieren Schlaf zufällig importieren pygame.init () pygame.mixer.init () #load eine Sounddatei, gleiches Verzeichnis wie Skript (keine 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 ("Bewegung erkannt!") playSound = random.choice (sounds) playSound .play () # stellt sicher, dass die Wiedergabe vollständig abgeschlossen ist, bevor die Bewegungserkennung wieder aufgenommen wird. Verhindert das "Spamming" des Tonschlafes (15). playSound.stop () 

Mit nur vier Samples gibt es jedes Mal eine hohe Wiederholungswahrscheinlichkeit. Sie können jedoch weitere Samples hinzufügen, wenn dies ärgerlich ist.

Das ist es! Verstecken Sie es in den Büschen mit ein paar gruseligen LED-Monsteraugen. Wie man gruselige Halloween-Augen für weniger als $ 5 macht Wie man gruselige Halloween-Augen für weniger als $ 5 macht Sie möchten Ihre Halloween-Deko dieses Jahr aufpeppen? In diesem Elektronikprojekt für Einsteiger erfahren Sie, wie Sie LED-Augen für weniger als 5 US-Dollar herstellen können. Lesen Sie mehr, und Sie sollten sich einige Süßigkeiten sparen können, da alle Kinder schreiend davonlaufen, bevor sie die Tür erreichen. Oder verstecken Sie sich im Schrank, weil eine wütende Mutter nach Blut gesucht hat, nachdem Sie den kleinen Johnny zum Weinen gebracht haben.

Haftungsausschluss: MakeUseOf haftet nicht für Personenschäden, die durch die Verwendung dieses Projekts entstehen können!

Werdet ihr diese bewegungsaktivierte Soundbox herstellen, um die lokalen Trick-or-Treaters zu erschrecken? Haben Sie dieses Halloween mit einem Raspberry Pi gruselige Effekte aufgebaut? Bitte teilen Sie uns dies in den Kommentaren mit!

.