Schrik Trick-or-Treaters af met een DIY Motion-Activated Soundbox

Schrik Trick-or-Treaters af met een DIY Motion-Activated Soundbox / DIY

Het is weer die tijd van het jaar wanneer het sociaal aanvaardbaar wordt geacht om jonge kinderen bang te maken en ze snoep te geven. Oh vreugde. Ik ben hier om je werk gemakkelijker te maken, door je te laten zien hoe je een eenvoudige motion-sensing Raspberry Pi Halloween-klankkast maakt. Hier is een demo:

Dit is wat je nodig hebt

Waarschijnlijk is het enige onderdeel dat je nog niet hebt, de bewegingssensor, een klein en goedkoop onderdeel dat je moet kunnen vinden op je lokale Microcenter of Maplin..

  • Raspberry Pi (elk model zal het doen).
  • Bewegingssensor (~ $ 3).
  • Aansluitdraden.
  • Bedrade luidspreker (de meeste Bluetooth-luidsprekers hebben de optie om line-in te gebruiken).
  • 3,5 mm stereokabel, mannelijk naar mannelijk.

Als je klaar bent, wil je misschien wat gesynchroniseerde lichteffecten toevoegen. Hoe Home Lights en Music voor Halloween te synchroniseren Home Lights en muziek voor Halloween synchroniseren Of je nu een Halloween-housefeest organiseert of je wilt het coolste spookhuis in de buurt, waardoor je lichten op tijd knipperen naar muziek en geluidseffecten essentieel zijn. Meer lezen, maar in deze tutorial behandelen we alleen de enge geluiden!

Opzetten

We gebruiken Raspbian Jessie Lite en Python 2.7, maar elke Linux-distro die op je Pi wordt uitgevoerd, zou goed moeten zijn. Ik heb het achtergelaten op de standaard hostnaam “raspberrypi.local”, dus begin met inloggen op afstand met behulp van SSH (open een Terminal-venster als je een Mac gebruikt.) Zo doe je hetzelfde in Windows 4 Eenvoudige manieren om SSH te gebruiken in Windows 4 Eenvoudige manieren om SSH te gebruiken In Windows SSH is de de-facto-oplossing voor veilige toegang tot externe terminals op Linux en andere UNIX-achtige systemen. Als u een externe SSH-server hebt waartoe u toegang wilt, moet u een SSH-client downloaden ... Lees meer) - of als u hebt gekozen voor een volledige Raspbian met een desktop-GUI, kun je doorgaan met updaten.

ssh [email protected] (voer framboos in als het wachtwoord) sudo apt-get update sudo apt-get install python-pip sudo pip install gpiozero 

Dit installeert een eenvoudige bibliotheek voor het werken met de GPIO-pinnen in Python met vele soorten ingebouwde sensoren en knoppen. Sluit uw sensor aan met de signaalpen op GPIO4, de VCC verbonden met 5V en de GND verbonden met GND. Dit kan variëren naargelang uw exacte model, dus bevestig met een pinout-diagram.

Afbeelding: raspberrypi.org

Helemaal handig, mijn Pi 2-hoesje van Pimoroni heeft een pin-outdiagram dat direct op de laser is geëtst.

Laten we nu ons bewegingsdetectiescript maken.

nano motion.py 

Plak in:

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

Raak CTRL-X en vervolgens Y aan om op te slaan en af ​​te sluiten en voer dan uit met:

python motion.py 

Je zou het moeten zien “geen beweging” bericht herhaald op het scherm totdat u uw hand voor de sensor zwaait, wanneer deze blijft hangen op de “Beweging gedetecteerd!”

Als het bericht helemaal niet verandert, heb je het verkeerd ingeplugd.

Als je meer wilt weten over deze eenvoudige GPIOZero-bibliotheek, bekijk dan deze fantastische cheatsheet.

Geluid afspelen

Sluit uw draagbare luidspreker aan en zorg ervoor dat deze wordt aangedreven als dat nodig is. We zullen de gebruiken pygame bibliotheek om geluiden af ​​te spelen, dus ga je gang en installeer het:

sudo apt-get install python-pygame 

Ten eerste hebben we een geluidsbestand nodig om te spelen. Als u dit doet vanuit de desktopomgeving, ga dan gang en download a WAV of OGG bestand ergens vandaan (ik vond hier een goede selectie gratis Halloweengeluiden) en stop het in je thuismap. Ik stel voor om eerst een downsampling te maken en toch naar een klein OGG-formaat te converteren.

Als u op afstand verbinding maakt en alleen de opdrachtregel gebruikt, hebben we wat meer problemen met sommige sites, omdat de wget commando haalt het eigenlijke bestand mogelijk niet. In plaats daarvan kunnen we het lokaal downloaden naar onze desktop en de scp (beveiligde kopie) -opdracht om over de opdrachtregel te kopiëren. U kunt hier meer informatie vinden over scp, maar nu opent u een nieuw tabblad Terminal en typt u:

scp thunder.ogg [email protected]: 

Geef donder.ogg een andere naam, maar vergeet die laatste niet : (het commando zal het zonder voltooien, maar het zal niet doen wat we willen dat het doet). Standaard wordt hiermee het bestand naar de basismap van de Pi-gebruiker overgebracht.

Laten we nu het script aanpassen om een ​​geluid af te spelen. Begin met het importeren van enkele nieuwe modules:

import pygame.mixer van pygame.mixer importeer Geluid 

Vervolgens, net na de bestaande importstatements, herhalen we hetzelfde geluid steeds opnieuw voor testdoeleinden. Laat de rest van je bewegingsdetectiecode liggen zoals het nu is - hij loopt gewoon niet, omdat hij voor altijd in deze sound-playing-lus blijft zitten.

pygame.init () pygame.mixer.init () #load een geluidsbestand, in de home map van Pi-gebruiker (geen mp3's) thunder = pygame.mixer.Sound ("/ home / pi / thunder.ogg") terwijl True : thunder.play () slaap (10) thunder.stop () 

Merk op dat toen ik dit proces oorspronkelijk probeerde, het geluid weigerde te spelen en gewoon in plaats daarvan klikte. De grootte van het bestand of de bitsnelheid was de boosdoener: het was 24-bits en meer dan 5 MB voor een clip van 15 seconden. Door dit te schalen naar 16-bits met behulp van de converter die ik hierboven heb gekoppeld, is alles goed verlopen en is de grootte teruggebracht tot slechts 260 KB!

Als u een smerig gesis uit uw luidsprekers hoort wanneer uw Python-app actief is, maar niet anders, typt u:

sudo nano /boot/config.txt 

En voeg deze regel aan het einde toe:

disable_audio_dither = 1 

Start opnieuw om de wijzigingen door te voeren. Of doe geen moeite, want het klonk sowieso voor mij als regen.

Laten we tot slot de belangrijkste lus voor het controleren van de beweging aanpassen om het geluid af te spelen wanneer beweging wordt gedetecteerd. We gebruiken een vertraging van 15 seconden, zodat de hele lus kan worden afgespeeld en als een spambuffer fungeren voor wanneer er veel non-stop beweging is.

while True: als pir.motion_detected: print ("Motion detected!") thunder.play () # ervoor zorgen dat het afspelen volledig is voltooid voordat de bewegingsdetectie wordt hervat, voorkomt het "spammen" van geluidsslapen (15) thunder.stop () else: print ("Geen beweging") 

Start automatisch

We willen dit waarschijnlijk ergens instellen met een batterij en geen internetverbinding, dus het script moet worden uitgevoerd bij het opnieuw opstarten zonder een opdrachtregel te hoeven openen. Om dit te doen, zullen we de eenvoudigste methode gebruiken: de crontab Hoe taken plannen in Linux met Cron en Crontab Hoe taken plannen in Linux met Cron en Crontab De mogelijkheid om taken te automatiseren is een van die futuristische technologieën die er al is . Elke Linux-gebruiker kan profiteren van planningssysteem- en gebruikerstaken, dankzij cron, een gebruiksvriendelijke achtergrondservice. Lees verder . Type:

sudo crontab -e 

Als dit de eerste keer is dat dit commando wordt uitgevoerd, zal het u eerst vragen welke editor u wilt gebruiken. Ik koos optie 2, voor nano. Het start op in de door u gekozen editor, dus voeg de volgende regel toe:

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

Dit betekent dat uw motion.py-script bij elke start zal worden uitgevoerd en dit stil doet (zodat elke uitvoer van het script wordt genegeerd). Start opnieuw op om het uit te proberen.

Als er niets wordt weergegeven, ondanks dat er beweging is, of als u slechts een kleine klik hoort, hebt u mogelijk niet het volledige pad gebruikt of moet uw bestand mogelijk worden geconverteerd naar een lagere bitsnelheid en een kleinere bestandsgrootte.

Voeg meer geluiden toe

Herhaaldelijk hetzelfde effect herhalen is een beetje saai, dus laten we wat willekeur toevoegen. Download nog meer Halloween-geluiden, onthoud ze te schalen naar een verstandige grootte en bitrate en stuur ze vervolgens naar je Pi via scp zoals eerder. Ik heb drie verschillende soorten schreeuwen toegevoegd.

Wijzig de code zodat in plaats van een enkele te definiëren pygame.mixer.Sound variabele, we creëren eigenlijk een rangschikking van geluiden. Dit is eenvoudig met Python, omring gewoon een door komma's gescheiden lijst met vierkante haken, zoals:

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

Importeer vervolgens de willekeurige bibliotheek in uw bestand, met:

willekeurig importeren 

Wijzig nu de belangrijkste bewegingsdetectielus als volgt:

while True: als pir.motion_detected: print ("Motion detected!") playSound = random.choice (geluiden) playSound.play () # zorgt ervoor dat het afspelen volledig is voltooid voordat bewegingsdetectie wordt hervat, voorkomt "spamming" van gezonde slaap (15 ) playSound.stop () else: print ("Geen beweging") 

Let op de kleine wijziging: in plaats van de enkele variabele Sound af te spelen, gebruiken we de random.choice functie om een ​​willekeurig geluid uit onze array geluiden te kiezen en dat vervolgens af te spelen.

Hier is de volledige code voor het geval u problemen ondervindt:

import pygame van pygame.mixer importeren Geluid van gpiozero importeren MotionSensor van tijd importeren slaap importeren willekeurig pygame.init () pygame.mixer.init () #load een geluidsbestand, zelfde map als script (geen mp3's) geluiden = [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 () # zorgt ervoor dat het afspelen volledig is voltooid voordat de bewegingsdetectie wordt hervat, voorkomt "spamming" van geluidsslapen (15) playSound.stop () else: print ("Geen beweging") 

Met slechts vier voorbeelden is er elke keer een grote kans op herhaling, maar u kunt meer voorbeelden toevoegen als dat vervelend is.

Dat is het! Verberg het in de struiken met een paar enge LED-monsterogen. Spookachtige Halloween-gloeiende ogen maken voor minder dan $ 5. Spooky Halloween-gloeiende ogen maken voor minder dan $ 5 Wilt u uw Halloween-versieringen dit jaar spannender maken? Leer hoe je LED-ogen kunt maken voor minder dan $ 5 in dit elektronica-project voor beginners. Lees meer, en je zou jezelf wat snoep moeten kunnen besparen, want alle kinderen rennen schreeuwend weg voordat ze de deur al bereiken. Of ga je verstoppen in de kast, want een boze moeder is op zoek naar bloed nadat je de kleine Johnny hebt laten huilen.

Disclaimer: MakeUseOf is niet verantwoordelijk voor enig persoonlijk letsel dat kan voortvloeien uit uw gebruik van dit project!

Ga je deze door beweging geactiveerde soundbox maken om de lokale trick-or-treaters bang te maken? Heb je deze enge Halloween-effecten met een Raspberry Pi ingesteld? Laat het ons weten in de comments hieronder!

.