Effrayez les trick-or-treaters avec des haut-parleurs activés par le mouvement DIY
C’est encore cette période de l’année où il est considéré comme socialement acceptable de terroriser les jeunes enfants et de leur donner des bonbons. Ah heureux. Je suis ici pour vous faciliter la tâche et vous montrer comment créer un simple haut-parleur Raspberry Pi Halloween à détection de mouvement. Voici une démo :
c’est ce dont vous avez besoin
La seule pièce que vous n’avez probablement pas est le capteur de mouvement, qui est une pièce petite et bon marché que vous devriez pouvoir trouver dans votre Microcenter ou Maplin local.
- Raspberry Pi (n’importe quel modèle fera l’affaire).
- Détecteur de mouvement (~$3).
- ligne de liaison.
- Haut-parleurs filaires (la plupart des haut-parleurs Bluetooth ont la possibilité d’utiliser l’entrée ligne).
- Câble stéréo 3,5 mm, mâle à mâle.
Vous pouvez également ajouter des effets d’éclairage synchronisés lorsque vous avez terminé, mais pour ce didacticiel, nous ne couvrons que les sons effrayants !
configurer
Nous utilisons Raspbian Jessie Lite et Python 2.7, mais toute distribution Linux exécutée sur votre Pi devrait convenir. Je l’ai gardé sur le nom d’hôte complet « raspberrypi.local », alors connectez-vous d’abord à distance en utilisant SSH (si vous êtes sur un Mac, ouvrez une fenêtre de terminal. Voici comment faire la même chose sous Windows) – ou si Après avoir choisi d’utiliser le Raspbian complet avec l’interface graphique de bureau, n’hésitez pas à passer à la mise à jour.
ssh pi@raspberrypi.local
(entrez framboise comme mot de passe)
sudo apt-obtenir la mise à jour
sudo apt-get install python-pip
sudo pip installer gpiozero
Faire une vidéo du jour
Cela installe une bibliothèque simple pour travailler avec des broches GPIO en Python en utilisant de nombreux types de capteurs et de boutons intégrés. Connectez le capteur à la broche de signal sur GPIO4, VCC à 5V et GND à GND. Cela peut varier en fonction de votre modèle exact, utilisez donc le schéma de brochage pour confirmer.
Crédit image : raspberrypi.org
Utile, le boîtier Pi 2 de mon Pimoroni a un diagramme de broches gravé au laser direct dessus.
Créons maintenant notre script de détection de mouvement.
nanomotion.py
Pâte:
Importer MotionSensor depuis gpiozero
pir = capteur de mouvement (4)
Et véritable:
si pir.motion_detected :
print(« Mouvement détecté! »)
autre:
print(« pas de mouvement »)
Appuyez sur CTRL-X puis Y pour enregistrer et quitter, puis exécutez :
mouvement python.py
Vous devriez voir le message « Aucun mouvement » se répéter à l’écran jusqu’à ce que vous agitiez votre main devant le capteur, auquel cas il s’arrête à « Mouvement détecté ! ».
Si le message ne change pas du tout, c’est que vous l’avez mal câblé.
Si vous souhaitez en savoir plus sur cette bibliothèque GPIOZero simple, consultez cet excellent aide-mémoire.
Jouer son
Connectez votre haut-parleur portable et assurez-vous qu’il est alimenté en cas de besoin.nous utiliserons Jeu bibliothèque pour jouer des sons, alors allez-y et installez-la :
sudo apt-get install python-pygame
Tout d’abord, nous avons besoin d’un fichier son à jouer.Si vous effectuez cette opération dans un environnement de bureau, poursuivez le téléchargement WAV ou alors OGG Téléchargez le fichier quelque part (j’ai trouvé beaucoup de sons d’Halloween gratuits ici) et placez-le dans votre répertoire personnel. Je recommande d’abord de sous-échantillonner et de convertir au petit format OGG.
Si vous vous connectez à distance et n’utilisez que la ligne de commande, nous avons rencontré des difficultés avec certains sites car wget La commande peut ne pas être en mesure d’obtenir le fichier réel.Au lieu de cela, nous pouvons le télécharger localement sur notre bureau et utiliser scps (Copie sécurisée) pour copier à partir de la ligne de commande. Vous pouvez en savoir plus sur scp ici, mais pour l’instant, ouvrez un nouvel onglet de terminal et tapez :
scp Thunder.ogg pi@raspberrypi.local :
Renommez tonnerre.ogg de manière appropriée, mais n’oubliez pas final : (La commande se terminera sans elle, mais elle ne fera pas ce que nous voulons qu’elle fasse). Par défaut, cela transférera le fichier dans le répertoire personnel de l’utilisateur Pi.
Modifions maintenant le script pour jouer le son. Importez d’abord quelques nouveaux modules :
importer pygame.mixer
Importer des sons depuis pygame.mixer
Ensuite, juste après l’instruction d’importation existante, nous bouclerons le même son encore et encore pour le tester. Laissez le reste du code de détection de mouvement tel quel – il ne fonctionnera tout simplement pas car il sera bloqué dans cette boucle de lecture sonore pour toujours.
pygame.init()
pygame.mixer.init()
tonnerre = pygame.mixer.Sound(« /home/pi/thunder.ogg »)
Et véritable:
tonnerre.play()
dormir(10)
coup de tonnerre()
Notez que lorsque j’ai initialement essayé ce processus, le son a refusé de jouer et a juste cliqué. La taille ou le débit binaire du fichier est le coupable : il s’agit de 24 bits et un clip de 15 secondes dépasse 5 Mo. Réduit à 16 bits en utilisant le convertisseur que j’ai lié ci-dessus et tout allait bien et la taille a été réduite à seulement 260 Ko !
Si vous remarquez un sifflement gênant provenant du haut-parleur pendant que votre application Python est en cours d’exécution, mais pas autrement, tapez :
sudo nano /boot/config.txt
et ajouter cette ligne à la fin :
disable_audio_dither=1
Redémarrez pour que les modifications prennent effet. Ou ne vous embêtez pas parce que ça ressemble à de la pluie pour moi de toute façon.
Enfin, modifions la boucle de contrôle de mouvement principale pour qu’elle émette un son lorsqu’un mouvement est détecté. Nous utiliserons un délai de 15 secondes pour que la boucle entière puisse jouer et agir comme un tampon anti-spam lorsqu’il y a beaucoup d’action non-stop.
Et véritable:
si pir.motion_detected :
print(« Mouvement détecté! »)
tonnerre.play()
dormir(15)
coup de tonnerre()
autre:
print(« pas de mouvement »)
démarrage automatique
Nous voulons probablement le configurer quelque part avec une batterie et sans connexion Internet, donc le script doit s’exécuter au redémarrage sans ouvrir de ligne de commande. Pour cela, nous allons utiliser la méthode la plus simple : crontab. taper:
sudo crontab -e
Si c’est la première fois que vous exécutez cette commande, elle vous demandera d’abord quel éditeur utiliser. J’ai choisi l’option 2 pour nano. Il se lancera dans l’éditeur de votre choix, ajoutez donc la ligne suivante :
@reboot python /home/pi/motion.py &
Cela signifie que votre script motion.py s’exécutera à chaque démarrage et s’exécutera en mode silencieux (ainsi, toute sortie du script sera ignorée). Redémarrez pour l’essayer.
S’il ne joue pas malgré le mouvement, ou si vous n’entendez qu’un petit clic, vous n’utilisez peut-être pas le chemin d’accès complet au fichier, ou votre fichier doit peut-être être converti en un débit binaire inférieur et une taille de fichier plus petite.
ajouter plus de sons
Jouer le même effet encore et encore est un peu ennuyeux, alors ajoutons-y un peu de hasard. Téléchargez plus de sons d’Halloween, n’oubliez pas de les réduire à une taille et à un débit raisonnables, puis utilisez-les pour les envoyer à votre Pi scps comme avant. J’ai ajouté trois types de cris différents.
Modifier le code au lieu de définir un seul pygame.mixer.Sound variable, nous créons en fait une en grand nombre le son de. C’est facile en Python, il suffit d’en inclure une liste séparée par des virgules entre crochets, comme ceci :
son = [
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 »)
]
Ensuite, importez la bibliothèque aléatoire dans votre fichier, où :
importation aléatoire
Modifiez maintenant la boucle de détection de mouvement principale comme suit :
Et véritable:
si pir.motion_detected :
print(« Mouvement détecté! »)
playSound = random.choice(son)
playSound.play()
dormir(15)
playSound.stop()
autre:
print(« pas de mouvement »)
Notez le léger changement : au lieu de jouer une seule variable Sound, nous utilisons sélection aléatoire La fonction sélectionne un son aléatoire dans notre réseau de sons et le joue.
Voici le code complet si vous rencontrez des problèmes :
importer pygame
Importer des sons depuis pygame.mixer
Importer MotionSensor depuis gpiozero
importer le sommeil à partir du temps
importation aléatoire
pygame.init()
pygame.mixer.init()
son = [
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 = capteur de mouvement (4)
Et véritable:
si pir.motion_detected :
print(« Mouvement détecté! »)
playSound = random.choice(son)
playSound.play()
dormir(15)
playSound.stop()
autre:
print(« pas de mouvement »)
Avec seulement quatre échantillons, il y a de fortes chances que chaque répétition se répète, mais vous pouvez ajouter plus d’échantillons si cela est ennuyeux.
C’est ça! Cachez-le dans les buissons avec des yeux de monstre LED effrayants et vous devriez pouvoir vous épargner des bonbons lorsque tous les enfants s’enfuient en hurlant avant d’arriver à la porte. Ou cachez-vous dans le placard parce qu’une maman en colère cherche du sang après que vous ayez fait pleurer le petit Johnny.
Avis de non-responsabilité : PCPC n’est pas responsable des blessures corporelles pouvant résulter de l’utilisation de cet article !
Fabriqueriez-vous cette enceinte activée par le mouvement pour effrayer les fauteurs de troubles locaux ? Avez-vous mis en place des effets effrayants avec votre Raspberry Pi cet Halloween ? Faites-nous savoir dans les commentaires ci-dessous!
A propos de l’auteur