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

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

È 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 Microcentro 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 da 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 usare 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, sarà necessario scaricare un client SSH ... Ulteriori informazioni) o se si è scelto di utilizzare un Raspbian completo con la GUI desktop, sentitevi liberi di saltare all'aggiornamento.

ssh [email protected] (inserisci raspberry come password) sudo apt-get update sudo apt-get install python-pip sudo pip installa 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.

Credito immagine: raspberrypi.org

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

Ora facciamo il nostro script di rilevamento del movimento.

nano motion.py 

Incolla in:

da gpiozero import MotionSensor pir = MotionSensor (4) mentre True: se pir.motion_detected: print ("Rilevato movimento!") else: print ("No motion") 

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

python motion.py 

Dovresti vedere il “nessuna mozione” messaggio ripetuto sullo schermo finché non si agita la mano davanti al sensore, quando si fermerà sul “Movimento rilevato!”

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 il pygame libreria per riprodurre suoni, quindi andare avanti e installarlo:

sudo apt-get installa 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 a WAV o OGG file 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 wget comando non può afferrare il file attuale. Invece, possiamo scaricarlo localmente sul nostro desktop e usare il SCP (copia protetta) comando 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]: 

Rinominare thunder.ogg come appropriato, ma non dimenticare quella 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 da 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 rimarrà bloccato in questo ciclo di riproduzione del suono per sempre.

pygame.init () pygame.mixer.init () # carica un file audio, nella home directory dell'utente Pi (nessun mp3) thunder = pygame.mixer.Sound ("/ home / pi / thunder.ogg") mentre 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 soli 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. Utilizzeremo un ritardo di 15 secondi in modo che l'intero loop possa essere riprodotto e funga da buffer di spam per quando c'è molto movimento non-stop.

while True: se pir.motion_detected: print ("Rilevato movimento!") thunder.play () # assicura che la riproduzione sia stata completata completamente prima di riprendere il rilevamento del movimento, impedisce lo "spamming" di sleep sonoro (15) thunder.stop () altrimenti: stampa ("Nessun movimento") 

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, potrebbe non essere stato utilizzato il percorso completo del file, o il file potrebbe aver bisogno di convertirlo in un bitrate più basso e una dimensione del file più piccola.

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.

Modificare il codice in modo che invece di definire un singolo pygame.mixer.Sound variabile, in realtà stiamo creando un schieramento 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:

importazione casuale 

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

while True: if pir.motion_detected: print ("Rilevato movimento!") playSound = random.choice (suoni) playSound.play () # assicura che la riproduzione sia stata completata completamente prima di riprendere il rilevamento del movimento, impedisce lo "spamming" del sonno sonoro (15 ) playSound.stop () else: print ("No motion") 

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

Ecco il codice completo in caso di problemi:

import pygame da pygame.mixer import Audio da gpiozero import MotionSensor dal tempo di importazione sleep importazione random pygame.init () pygame.mixer.init () #load un file audio, stessa directory di 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) mentre True: se pir.motion_detected: print ("Rilevato movimento!") playSound = random.choice (suoni) playSound .play () # assicura che la riproduzione sia stata completata completamente prima di riprendere il rilevamento del movimento, impedisce lo "spamming" di sleep sonoro (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 qualsiasi lesione personale che possa 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!

.