Annuncio pubblicitario

È di nuovo quel periodo dell'anno in cui è considerato socialmente accettabile terrorizzare i bambini piccoli e dar loro caramelle. Oh gioia. Sono qui per semplificare il tuo lavoro, mostrandoti come realizzare una semplice soundbox Raspberry Pi di Halloween con rilevamento del movimento. Ecco una demo:

Ecco cosa ti servirà

Probabilmente l'unica parte che non hai già è il sensore di movimento, una parte piccola ed economica che dovresti essere in grado di trovare nel 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 il line-in).
  • Cavo stereo da 3,5 mm, maschio-maschio.

Una volta terminato, potresti volerne aggiungere un po ' effetti di illuminazione sincronizzati Come sincronizzare luci e musica per la casa per HalloweenChe tu stia organizzando una festa di Halloween o desideri la casa stregata più bella del quartiere, è essenziale far lampeggiare le luci in tempo con la musica e gli effetti sonori.

instagram viewer
Leggi di più anche, ma in questo tutorial copriremo solo un po 'i suoni spaventosi!

Impostare

Stiamo usando Raspbian Jessie Lite e Python 2.7, ma qualsiasi distribuzione Linux che gira sul tuo Pi dovrebbe andare bene. L'ho lasciato sul nome host standard "raspberrypi.local", quindi inizia accedendo in remoto tramite SSH (apri una finestra Terminale se sei su Mac. Ecco come fare lo stesso in Windows 4 semplici modi per utilizzare SSH in WindowsSSH è la soluzione di fatto per l'accesso sicuro a 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 di più ) - o se hai scelto di utilizzare una Raspbian completa con la GUI desktop, sentiti libero 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. Collegare il sensore con il pin di segnale su GPIO4, il VCC collegato a 5V e il GND collegato a GND. Questo può variare in base al modello esatto, quindi conferma con un diagramma di pinout.

Diagramma GPIO di Raspberry Pi
Credito immagine: raspberrypi.org

Per fortuna, il mio caso Pi 2 di Pimoroni ha un diagramma di pinout inciso al laser direttamente su di esso.

Custodia con etichetta Raspberry Pi

Ora facciamo il nostro script di rilevamento del movimento.

nano motion.py. 

Incolla dentro:

da gpiozero import MotionSensor pir = MotionSensor (4) while True: if pir.motion_detected: print ("Motion detect!") 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 soffermerà sul "Rilevamento del movimento!"

Movimento rilevato nel terminale

Se il messaggio non cambia affatto, lo hai cablato in modo errato.

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

Riproduzione del suono

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

sudo apt-get install python-pygame. 

Innanzitutto, abbiamo bisogno di un file audio per giocare. Se lo stai facendo all'interno dell'ambiente desktop, vai avanti e scarica a WAV o OGG file da qualche parte (ho trovato una buona selezione di suoni di Halloween gratis qui) e inseriscilo nella tua home directory. Suggerirei prima di effettuare il downsampling e conversione in un piccolo formato OGG Comunque.

Se ti colleghi in remoto e utilizzi solo la riga di comando, abbiamo alcuni problemi con alcuni siti, dal momento che wget il comando potrebbe non afferrare il file effettivo. Invece, possiamo scaricarlo localmente sul nostro desktop e utilizzare il SCP (copia protetta) per copiare dalla 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]: 

Rinomina 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 home directory 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 dichiarazioni di importazione esistenti, eseguiremo lo stesso suono ripetutamente a scopo di test. Lascia il resto del codice di rilevamento del movimento così com'è per ora: non funzionerà, poiché rimarrà bloccato in questo loop di riproduzione del suono per sempre.

pygame.init () pygame.mixer.init () #load di un file audio, nella home directory dell'utente Pi (no mp3s) thunder = pygame.mixer. Suono ("/ home / pi / thunder.ogg") mentre True: thunder.play () sleep (10) thunder.stop ()

Si noti che quando inizialmente ho provato questo processo, il suono ha rifiutato di essere riprodotto e invece ho fatto clic. La dimensione del file o bit-rate era il colpevole: era di 24 bit e oltre 5 MB per una clip di 15 secondi. Il ridimensionamento a 16 bit usando il convertitore a cui ho collegato sopra ha fatto funzionare tutto bene e le dimensioni sono state ridotte a soli 260 KB!

Se noti un sibilo sordo dai tuoi altoparlanti quando l'app Python è in esecuzione, ma non altrimenti, digita:

sudo nano /boot/config.txt. 

E aggiungi questa riga alla fine:

disable_audio_dither = 1. 

Riavvia per rendere effettive le modifiche. O non preoccuparti, dato che mi è sembrato comunque pioggia.

Infine, modifichiamo il loop di controllo del movimento principale 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 fungeremo da buffer di spam per quando c'è molto movimento non-stop.

while True: se pir.motion_detected: print ("Motion detect!") thunder.play () # assicurati che la riproduzione sia stata completamente completato prima di riprendere il rilevamento del movimento, impedisce lo "spamming" di sospensione del suono (15) thunder.stop () altrimenti: stampa ("No movimento")

Inizia automaticamente

Probabilmente vogliamo configurarlo da qualche parte con una batteria e nessuna connessione a Internet, quindi lo script deve essere eseguito al riavvio senza dover aprire una riga di comando. Per fare ciò, utilizzeremo il metodo più semplice possibile: il crontab Come pianificare le attività in Linux con Cron e CrontabLa capacità di automatizzare le attività è una di quelle tecnologie futuristiche che è già qui. Ogni utente Linux può beneficiare del sistema di pianificazione e delle attività dell'utente, grazie a cron, un servizio in background di facile utilizzo. 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. Si avvierà nell'editor scelto, quindi aggiungi la seguente riga:

@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 oppure potrebbe essere necessario convertire il file in un bitrate inferiore e una dimensione del file inferiore.

Aggiungi altri suoni

Suonare ripetutamente lo stesso effetto è un po 'noioso, quindi aggiungiamo un po' di casualità ad esso. Scarica altri suoni di Halloween, ricordandoti di ridimensionarli a una dimensione e un 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 definirne uno singolo pygame.mixer. Suono variabile, stiamo effettivamente creando un Vettore di suoni. Questo è semplice con Python, basta racchiudere un elenco separato da virgole con parentesi quadre, in questo modo:

sounds = [pygame.mixer. Suono ("/ home / pi / thunder.ogg"), pygame.mixer. Suono ("/ home / pi / scary_scream.ogg"), pygame.mixer. Suono ("/ home / pi / girl_scream.ogg"), pygame.mixer. Suono ("/ home / pi / psycho_scream.ogg")]

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

importazione casuale. 

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

while True: se pir.motion_detected: print ("Rilevato movimento!") playSound = random.choice (suoni) playSound.play () # assicurati che la riproduzione abbia stato completamente completato prima di riprendere il rilevamento del movimento, impedisce lo "spamming" di sospensione del suono (15) playSound.stop () else: print ("No movimento")

Nota la modifica minore: invece di riprodurre la singola variabile Sound, stiamo usando 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 Sound. da gpiozero import MotionSensor. da tempo importazione sonno. import random pygame.init () pygame.mixer.init () #load un file audio, stessa directory dello script (no mp3s) sounds = [pygame.mixer. Suono ("/ home / pi / thunder.ogg"), pygame.mixer. Suono ("/ home / pi / scary_scream.ogg"), pygame.mixer. Suono ("/ home / pi / girl_scream.ogg"), pygame.mixer. Suono ("/ home / pi / psycho_scream.ogg")] pir = MotionSensor (4) while True: se pir.motion_detected: print ("Rilevato movimento!") playSound = random.choice (suoni) playSound.play () # assicurati che la riproduzione abbia stato completamente completato prima di riprendere il rilevamento del movimento, impedisce lo "spamming" di sospensione del suono (15) playSound.stop () else: print ("No movimento")

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

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

Disclaimer: MakeUseOf non è responsabile per eventuali lesioni personali che possono derivare dall'uso di questo progetto!

Costruirai questa soundbox attivata dal movimento per spaventare i dolcetti o scherzetti locali? Hai creato effetti spaventosi con un Raspberry Pi questo Halloween? Fatecelo sapere nei commenti qui sotto!

James ha una laurea in Intelligenza Artificiale ed è certificato CompTIA A + e Network +. È lo sviluppatore principale di MakeUseOf e trascorre il suo tempo libero giocando a paintball e giochi da tavolo VR. Costruisce PC da quando era un bambino.