Spaventa i dolcetti o i dolcetti con un Soundbox attivato da movimento fai-da-te

È di nuovo quel periodo dell'anno quando è considerato socialmente accettabile per terrorizzare i bambini piccoli e dar loro caramelle. Oh gioia

È di nuovo quel periodo dell'anno quando è considerato socialmente accettabile per terrorizzare i bambini piccoli e dar loro caramelle.  Oh gioia
Annuncio pubblicitario

È di nuovo quel periodo dell'anno quando è considerato socialmente accettabile per terrorizzare i bambini piccoli e dar loro caramelle. Oh gioia Sono qui per rendere più facile il tuo lavoro, mostrandoti come creare un semplice soundbox Raspberry Pi Halloween sensibile al movimento. Ecco una demo:

Ecco cosa ti servirà

Probabilmente l'unica parte che non hai ancora è il sensore di movimento, una piccola ed economica parte che dovresti riuscire a trovare presso il tuo Microcenter o Maplin locale.

  • Raspberry Pi (qualsiasi modello lo farà).
  • Sensore di movimento (~ $ 3).
  • Fili di collegamento
  • Altoparlante cablato (la maggior parte degli altoparlanti Bluetooth avrà la possibilità di utilizzare line-in).
  • Cavo stereo da 3, 5 mm, maschio-a-maschio.

Una volta che hai finito, potresti voler aggiungere alcuni effetti di illuminazione sincronizzati Come sincronizzare luci e musica per Halloween Come sincronizzare luci e musica per Halloween Sia che tu stia ospitando una festa di Halloween o desideri la casa dei fantasmi più cool del mondo quartiere, facendo lampeggiare le luci in tempo per la musica e gli effetti sonori è essenziale. Leggi di più, ma in questo tutorial copriremo solo il bit dei suoni spaventosi!

Impostare

Stiamo usando Raspbian Jessie Lite e Python 2.7, ma qualsiasi distro Linux che gira sul tuo Pi dovrebbe andare bene. L'ho lasciato sul nome host standard "raspberrypi.local", quindi inizia accedendo in remoto usando SSH (apri una finestra Terminale se sei su Mac. Ecco come fare lo stesso in Windows 4 Semplici modi per usare SSH In Windows 4 Semplici modi per utilizzare SSH In Windows SSH è la soluzione di fatto per accedere in modo sicuro ai terminali remoti su Linux e altri sistemi simili a UNIX Se si dispone di un server SSH remoto a cui si desidera accedere, è necessario scaricare un client SSH .... Leggi altro) - o se hai scelto di utilizzare un Raspbian completo con la GUI desktop, sentiti libero di saltare all'aggiornamento.

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

Questo installa una semplice libreria per lavorare con i pin GPIO in Python con molti tipi di sensori e pulsanti integrati. Collega il tuo sensore con il pin del segnale su GPIO4, il VCC collegato a 5V e il GND collegato a GND. Questo può variare in base al modello esatto, quindi confermare con un diagramma di pinout.

Diagramma GPIO Raspberry Pi
Credito immagine: raspberrypi.org

Fortunatamente, il mio caso Pi 2 di Pimoroni ha un diagramma di pino-laser inciso direttamente su di esso.

Caso Raspberry Pi etichettato

Ora facciamo il nostro script di rilevamento del movimento.

 nano motion.py 

Incolla in:

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

Premi CTRL-X quindi Y per salvare ed uscire, quindi esegui con:

 python motion.py 

Dovresti vedere il messaggio "nessun movimento" ripetuto sullo schermo finché non agiti la mano davanti al sensore, quando si fermerà sul "Rilevato movimento!"

Movimento rilevato nel terminale

Se il messaggio non cambia, l'hai cablato male.

Se sei interessato a saperne di più su questa semplice libreria GPIOZero, dai un'occhiata a questo fantastico cheatsheet.

Suonare

Collega il tuo altoparlante portatile e assicurati che sia alimentato, se necessario. Useremo la libreria pygame per riprodurre suoni, quindi vai avanti e installalo:

 sudo apt-get install python-pygame 

Per prima cosa, abbiamo bisogno di un file audio da riprodurre. Se lo fai dall'interno dell'ambiente desktop, vai avanti e scarica un file WAV o OGG da qualche parte (ho trovato una buona selezione di suoni gratuiti di Halloween qui) e lo metto nella tua home directory. Suggerirei il downsampling prima e la conversione in un formato OGG piccolo comunque.

Se ci si connette da remoto e si utilizza solo la riga di comando, abbiamo un po 'più di difficoltà con alcuni siti, dal momento che il comando wget potrebbe non afferrare il file vero e proprio. Invece, possiamo scaricarlo localmente sul nostro desktop e usare il comando scp (secure copy) per copiare sulla riga di comando. Puoi saperne di più su scp qui, ma per ora apri una nuova scheda Terminale e digita:

 scp thunder.ogg [email protected].local: 

Rinominare thunder.ogg come appropriato, ma non dimenticare che finale : (il comando verrà completato senza di esso, ma non farà ciò che vogliamo che faccia). Per impostazione predefinita, questo trasferirà il file nella directory home dell'utente Pi.

Ora modifichiamo lo script per riprodurre un suono. Inizia importando alcuni nuovi moduli:

 import pygame.mixer from pygame.mixer import Sound 

Quindi, subito dopo le istruzioni di importazione esistenti, ripeteremo lo stesso suono ripetutamente per scopi di test. Lascia il resto del tuo codice di rilevamento del movimento come è per ora - semplicemente non funzionerà, dal momento che sarà bloccato in questo ciclo di riproduzione del suono per sempre.

 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() 

Nota che quando ho provato questo processo in origine, il suono si è rifiutato di suonare e ho fatto clic su invece. La dimensione del file o della velocità in bit era il colpevole: era a 24 bit e oltre 5 MB per una clip di 15 secondi. Ridimensionando fino a 16 bit usando il convertitore che ho collegato sopra, tutto ha funzionato bene e la dimensione è stata ridotta a solo 260 KB!

Se noti un sibilo sgradevole dai tuoi altoparlanti quando la tua app Python è in esecuzione, ma non altrimenti, digita:

 sudo nano /boot/config.txt 

E aggiungi questa linea alla fine:

 disable_audio_dither=1 

Riavvia per rendere effettive le modifiche. O non preoccuparti, dato che mi sembrava comunque piovere.

Infine, modifichiamo il ciclo principale di controllo del movimento per riprodurre il suono quando viene rilevato un movimento. Useremo un ritardo di 15 secondi in modo che l'intero loop possa essere riprodotto e funga da buffer di spam per quando c'è un sacco di movimento non-stop.

 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") 

Avvia automaticamente

Probabilmente vorremmo installarlo da qualche parte con una batteria e senza connessione a Internet, quindi lo script deve essere eseguito al riavvio senza dover aprire una riga di comando. Per fare questo, useremo il metodo più semplice possibile: il crontab Come pianificare le attività in Linux con Cron e Crontab Come pianificare le attività in Linux con Cron e Crontab La possibilità di automatizzare le attività è una di quelle tecnologie futuristiche che è già qui . Ogni utente Linux può trarre vantaggio dal sistema di pianificazione e dalle attività dell'utente, grazie a cron, un servizio di background facile da usare. Leggi di più . Genere:

 sudo crontab -e 

Se è la prima volta che esegui questo comando, inizierà chiedendoti quale editor utilizzare. Ho scelto l'opzione 2, per nano. Verrà avviato nell'editor scelto, quindi aggiungi la riga seguente:

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

Ciò significa che lo script motion.py verrà eseguito ad ogni avvio e lo farà in modo silenzioso (quindi qualsiasi output dallo script verrà ignorato). Riavvia per provarlo.

Se non viene riprodotto nulla nonostante il movimento, o si sente solo un piccolo clic, è possibile che non si sia utilizzato il percorso completo del file, o che il file possa aver bisogno di convertirsi in un bitrate inferiore e dimensioni del file più piccole.

Aggiungi altri suoni

Giocare sempre lo stesso effetto è un po 'noioso, quindi aggiungiamoci un po' di casualità. Scarica altri suoni di Halloween, ricordandoti di ridimensionarli in base a dimensioni e bitrate ragionevoli, quindi inviarli al tuo Pi usando scp come prima. Ho aggiunto tre diversi tipi di urlo.

Modifica il codice in modo che invece di definire una singola variabile pygame.mixer.Sound, stiamo effettivamente creando una serie di suoni. Questo è semplice con Python, basta circondare un elenco separato da virgole con parentesi quadre, in questo modo:

 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") ] 

Successivamente, importa la libreria casuale nel tuo file, con:

 import random 

Ora modifica il loop principale di rilevamento del movimento come segue:

 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") 

Nota il piccolo cambiamento: invece di suonare la singola variabile Sound, usiamo la funzione random.choice per scegliere un suono casuale dal nostro array di suoni, quindi suonarlo.

Ecco il codice completo in caso di problemi:

 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") 

Con solo quattro campioni, c'è un'alta probabilità di ripetizione ogni volta, ma è possibile aggiungere altri campioni se è fastidioso.

Questo è tutto! Nascondilo tra i cespugli con alcuni spaventosi occhi mostri a LED Come rendere Spooky Halloween Glowing Eyes a meno di $ 5 Come rendere Spooky Halloween Glowing Eyes a meno di $ 5 Vuoi accendere le tue decorazioni di Halloween quest'anno? Scopri come rendere gli occhi a LED per meno di $ 5 in questo progetto di elettronica per principianti. Leggi di più, e dovresti essere in grado di salvarti delle caramelle mentre tutti i bambini scappano urlando prima ancora che raggiungano la porta. O vai a nascondino nell'armadio perché una mamma arrabbiata cerca il sangue dopo aver fatto piangere il piccolo Johnny.

Dichiarazione di non responsabilità: MakeUseOf non è responsabile per eventuali lesioni personali che potrebbero derivare dall'uso di questo progetto!

Farai questo soundbox attivato dal movimento per spaventare i trick-or-treaters locali? Hai creato qualche effetto spaventoso con un Raspberry Pi questo Halloween? Fateci sapere a riguardo nei commenti qui sotto!

In this article