Advertentie

Het is weer die tijd van het jaar waarin het als sociaal aanvaardbaar wordt beschouwd 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 bewegingsgevoelige Raspberry Pi Halloween-soundbox maakt. Hier is een demo:

Dit is wat je nodig hebt

Waarschijnlijk is het enige onderdeel dat u nog niet heeft de bewegingssensor, een klein en goedkoop onderdeel dat u zou moeten kunnen vinden bij uw plaatselijke microcenter of maplin.

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

Als je klaar bent, wil je misschien wat toevoegen gesynchroniseerde lichteffecten Home Lights en muziek synchroniseren voor HalloweenOf je nu een Halloween-huisfeest organiseert of het coolste spookhuis in de buurt wilt, je lichten op tijd laten knipperen op muziek en geluidseffecten zijn essentieel. Lees verder

instagram viewer
ook, 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 draait, zou in orde moeten zijn. Ik heb het op de standaard hostnaam "raspberrypi.local" gelaten, dus begin met inloggen op afstand met SSH (open een Terminal-venster als je een Mac gebruikt). Hier is hoe hetzelfde te doen in Windows 4 eenvoudige manieren om SSH in Windows te gebruikenSSH is de de facto oplossing voor veilige toegang tot externe terminals op Linux en andere UNIX-achtige systemen. Als u een externe SSH-server wilt hebben, moet u een SSH-client downloaden ... Lees verder ) - of als je ervoor hebt gekozen een volledige Raspbian met desktop-GUI te gebruiken, ga dan gerust verder met updaten.

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

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

Raspberry Pi GPIO-diagram
Afbeelding tegoed: raspberrypi.org

Handig is dat mijn Pi 2-behuizing van Pimoroni een pinout-diagram heeft dat rechtstreeks op de laser is geëtst.

Gelabelde Raspberry Pi-behuizing

Laten we nu ons bewegingsdetectiescript maken.

nano motion.py. 

Plakken in:

van gpiozero import MotionSensor pir = MotionSensor (4) while True: indien pir.motion_detected: print ("Motion gedetecteerd!") else: print ("Geen beweging")

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

python motion.py. 

U zou het bericht "geen beweging" moeten zien op het scherm totdat u met uw hand voor de sensor zwaait, wanneer het blijft hangen bij "Beweging gedetecteerd!"

Beweging gedetecteerd in terminal

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

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

Geluid afspelen

Sluit je draagbare speaker aan en zorg ervoor dat hij wordt gevoed als dat nodig is. We gebruiken de pygame bibliotheek om geluiden af ​​te spelen, dus ga je gang en installeer het:

sudo apt-get installeer python-pygame. 

Ten eerste hebben we een geluidsbestand nodig om af te spelen. Als je dit doet vanuit de desktopomgeving, ga je gang en download een WAV of OGG bestand ergens vandaan (ik vond een goede selectie van gratis Halloween klinkt hier), en zet het in uw homedirectory. Ik stel voor om eerst te downsamplen en converteren naar een klein OGG-formaat in ieder geval.

Als u op afstand verbinding maakt en alleen de opdrachtregel gebruikt, hebben we met sommige sites wat meer moeite, aangezien de wget commando haalt mogelijk niet het daadwerkelijke bestand op. In plaats daarvan kunnen we het lokaal naar onze desktop downloaden en de gebruiken scp (beveiligde kopie) opdracht om over de opdrachtregel te kopiëren. Je kunt meer leren over scp hier, maar voor nu, open een nieuw Terminal-tabblad en typ:

scp thunder.ogg [email protected]: 

Hernoem thunder.ogg zoals van toepassing, maar vergeet die finale niet : (de opdracht wordt zonder deze voltooid, maar doet niet wat we willen dat hij doet). Hiermee wordt het bestand standaard overgebracht naar de homedirectory van Pi-gebruiker.

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

importeer pygame.mixer. van pygame.mixer import Sound. 

Dan, net na de bestaande importinstructies, zullen we hetzelfde geluid keer op keer herhalen voor testdoeleinden. Laat de rest van je bewegingsdetectiecode zoals die nu is - hij loopt gewoon niet, omdat hij voor altijd vastzit in deze geluidsspel.

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

Merk op dat toen ik dit proces oorspronkelijk probeerde, het geluid weigerde te spelen en in plaats daarvan gewoon 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 dat terug te brengen naar 16-bits met de converter die ik hierboven heb gekoppeld, werkte alles goed en werd de grootte teruggebracht tot slechts 260 KB!

Als je een akelig sisgeluid uit je luidsprekers opmerkt wanneer je Python-app wordt uitgevoerd, maar anders niet, typ je:

sudo nano /boot/config.txt. 

En voeg deze regel aan het einde toe:

disable_audio_dither = 1. 

Start opnieuw op om de wijzigingen door te voeren. Of doe geen moeite, want het klonk voor mij toch al een beetje als regen.

Laten we tot slot de hoofdbewegingscontrolelus wijzigen 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 om te fungeren als spambuffer voor als er veel non-stop beweging is.

while True: als pir.motion_detected: print ("Motion gedetecteerd!") thunder.play () # zorg ervoor dat het afspelen volledig is geweest voltooid voordat bewegingsdetectie wordt hervat, voorkomt "spammen" van gezonde slaap (15) thunder.stop () anders: print ("Nee beweging")

Start automatisch

We willen dit waarschijnlijk ergens instellen met een batterij en geen internetverbinding, dus het script moet worden uitgevoerd bij opnieuw opstarten zonder een opdrachtregel te hoeven openen. Om dit te doen, gebruiken we de eenvoudigste methode die mogelijk is: de crontab Taken plannen in Linux met Cron en CrontabDe 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 u deze opdracht uitvoert, begint u met de vraag welke editor u moet gebruiken. Ik koos voor optie 2, voor nano. Het start op in de door jou gekozen editor, dus voeg de volgende regel toe:

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

Dit betekent dat uw motion.py-script bij elke opstart wordt uitgevoerd en dit in stilte doet (dus alle uitvoer van het script wordt genegeerd). Start opnieuw op om het uit te proberen.

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

Voeg meer geluiden toe

Het steeds opnieuw spelen van hetzelfde effect is een beetje saai, dus laten we er wat willekeur aan toevoegen. Download nog wat Halloween-geluiden, denk eraan ze te verkleinen tot een redelijke grootte en bitrate en stuur ze vervolgens naar je Pi met scp zoals eerder. Ik heb drie verschillende soorten schreeuw toegevoegd.

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

geluiden = [pygame.mixer. Geluid ("/ home / pi / thunder.ogg"), pygame.mixer. Geluid ("/ home / pi / scary_scream.ogg"), pygame.mixer. Geluid ("/ home / pi / girl_scream.ogg"), pygame.mixer. Geluid ("/ 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 gedetecteerd!") playSound = random.choice (geluiden) playSound.play () # zorg ervoor dat het afspelen is volledig is voltooid voordat bewegingsdetectie wordt hervat, voorkomt "spammen" van geluidsslaap (15) playSound.stop () anders: print ("Nee beweging")

Let op de kleine verandering: in plaats van de enkele klankvariabele af te spelen, gebruiken we de willekeurige keuze functie om een ​​willekeurig geluid uit onze geluidenreeks te kiezen en dat vervolgens af te spelen.

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

pygame importeren. van pygame.mixer import Sound. van gpiozero importeer MotionSensor. vanaf tijd importeren slaap. import willekeurige pygame.init () pygame.mixer.init () #load een geluidsbestand, dezelfde map als script (geen mp3's) geluiden = [pygame.mixer. Geluid ("/ home / pi / thunder.ogg"), pygame.mixer. Geluid ("/ home / pi / scary_scream.ogg"), pygame.mixer. Geluid ("/ home / pi / girl_scream.ogg"), pygame.mixer. Geluid ("/ home / pi / psycho_scream.ogg")] pir = MotionSensor (4) while True: als pir.motion_detected: print ("Motion gedetecteerd!") playSound = random.choice (geluiden) playSound.play () # zorg ervoor dat het afspelen is volledig is voltooid voordat bewegingsdetectie wordt hervat, voorkomt "spammen" van geluidsslaap (15) playSound.stop () anders: print ("Nee beweging")

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

Dat is het! Verberg het in de struiken met wat enge LED monsterogen Spooky Halloween Glowing Eyes maken voor minder dan $ 5Wil je je Halloween-decoraties dit jaar wat spannender maken? Leer hoe u LED-ogen kunt maken voor minder dan $ 5 in dit elektronicaproject voor beginners. Lees verder , en je zou jezelf wat snoep moeten kunnen besparen terwijl alle kinderen schreeuwend wegrennen voordat ze de deur bereiken. Of verstop je in de kast, want een boze moeder is op zoek naar bloed nadat je 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 bewegingsgestuurde klankkast maken om de lokale trick-or-treaters bang te maken? Heb je deze Halloween enge effecten ingesteld met een Raspberry Pi? Laat het ons weten in de reacties hieronder!

James heeft een BSc in Artificial Intelligence en is CompTIA A + en Network + gecertificeerd. Hij is de hoofdontwikkelaar van MakeUseOf en brengt zijn vrije tijd door met het spelen van VR paintball en bordspellen. Hij bouwt al pc's sinds hij een kind was.