Trick-or-Treaters avec une Soundbox activée par le mouvement DIY

C'est encore cette période de l'année où il est socialement acceptable de terrifier les jeunes enfants et de leur donner des bonbons. Oh joie.

C'est encore cette période de l'année où il est socialement acceptable de terrifier les jeunes enfants et de leur donner des bonbons.  Oh joie.
Publicité

C'est encore cette période de l'année où il est socialement acceptable de terrifier les jeunes enfants et de leur donner des bonbons. Oh joie. Je suis ici pour vous faciliter la tâche en vous montrant comment créer une simple boîte à musique Raspberry Pi Halloween à détection de mouvement. Voici une démo:

Voici ce dont vous aurez besoin

Probablement la seule partie que vous n'avez pas déjà est le détecteur de mouvement, une petite partie peu coûteuse que vous devriez pouvoir trouver chez votre Microcenter local ou chez Maplin.

  • Raspberry Pi (tout modèle fera l'affaire).
  • Capteur de mouvement (~ 3 $).
  • Fils de branchement.
  • Haut-parleur câblé (la plupart des haut-parleurs Bluetooth auront la possibilité d'utiliser l'entrée de ligne).
  • Câble stéréo 3, 5 mm, mâle à mâle.

Une fois que vous avez terminé, vous voudrez peut-être ajouter quelques effets de lumière synchronisés Comment synchroniser les lumières et la musique pour Halloween Comment synchroniser les lumières et la musique pour Halloween Que vous organisiez une fête à la maison Halloween ou que vous vouliez la maison hantée la plus cool quartier, faire clignoter vos lumières à temps pour la musique et les effets sonores est essentielle. Lire la suite aussi, mais dans ce tutoriel, nous allons seulement couvrir le peu de sons effrayant!

Mise en place

Nous utilisons Raspbian Jessie Lite et Python 2.7, mais n'importe quelle distribution Linux qui tourne sur votre Pi devrait fonctionner. Je l'ai laissé sur le nom d'hôte standard "raspberrypi.local", donc commencez par vous connecter à distance en utilisant SSH (ouvrez une fenêtre Terminal si vous êtes sur Mac. Voici comment faire de même dans Windows 4 Façons faciles d'utiliser SSH In Windows 4 Façons faciles d'utiliser SSH sous Windows SSH est la solution de facto pour accéder de manière sécurisée à des terminaux distants sous Linux et d'autres systèmes UNIX Si vous avez un serveur SSH distant auquel vous voulez accéder, vous devrez télécharger un client SSH .... Lire la suite) - ou si vous avez opté pour un Raspbian complet avec une interface graphique de bureau, n'hésitez pas à passer à la mise à jour.

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

Cela installe une bibliothèque simple pour travailler avec les broches GPIO en Python avec de nombreux types de capteurs et de boutons intégrés. Câbler votre capteur avec la broche de signal sur GPIO4, le VCC connecté à 5V, et le GND connecté à GND. Cela peut varier en fonction de votre modèle exact, donc confirmez avec un schéma de brochage.

Diagramme Raspberry Pi GPIO
Crédit d'image: raspberrypi.org

Heureusement, mon boîtier Pi 2 de Pimoroni a un diagramme de brochage gravé au laser directement dessus.

Étui Raspberry Pi étiqueté

Maintenant, faisons notre script de détection de mouvement.

 nano motion.py 

Coller dans:

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

Appuyez sur CTRL-X puis sur Y pour sauvegarder et quitter, puis exécutez avec:

 python motion.py 

Vous devriez voir le message "pas de mouvement" répété à l'écran jusqu'à ce que vous passiez votre main devant le capteur, quand il restera sur le "Motion Detected!"

Mouvement détecté dans le terminal

Si le message ne change pas du tout, vous l'avez mal câblé.

Si vous souhaitez en savoir plus sur cette bibliothèque GPIOZero simple, jetez un coup d'œil à cette fantastique machine à sous.

Jouer du son

Connectez votre haut-parleur portable et assurez-vous qu'il est alimenté s'il le faut. Nous allons utiliser la bibliothèque pygame pour jouer des sons, alors allez-y et installez-le:

 sudo apt-get install python-pygame 

Premièrement, nous avons besoin d'un fichier son pour jouer. Si vous le faites à partir de l'environnement de bureau, alors allez-y et téléchargez un fichier WAV ou OGG de quelque part (j'ai trouvé une bonne sélection de sons d'Halloween gratuits ici), et mettez-le dans votre répertoire personnel. Je suggérerais d'effectuer un downsampling d'abord et de convertir en un petit format OGG de toute façon.

Si vous vous connectez à distance et que vous utilisez uniquement la ligne de commande, nous avons un peu plus de difficulté avec certains sites, car la commande wget peut ne pas récupérer le fichier. Au lieu de cela, nous pouvons le télécharger localement sur notre bureau et utiliser la commande scp (copie sécurisée) pour copier sur la ligne de commande. Vous pouvez en apprendre plus sur scp ici, mais pour l'instant, ouvrez un nouvel onglet Terminal et tapez:

 scp thunder.ogg [email protected]: 

Renommez thunder.ogg selon le cas, mais n'oubliez pas que 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.

Maintenant, modifions le script pour jouer un son. Commencez par importer de nouveaux modules:

 import pygame.mixer from pygame.mixer import Sound 

Ensuite, juste après les instructions d'importation existantes, nous bouclerons le même son encore et encore à des fins de test. Laissez le reste de votre code de détection de mouvement comme c'est le cas pour l'instant - il ne fonctionnera tout simplement pas, car il sera bloqué dans cette boucle de lecture sonore pour toujours.

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

Notez que lorsque j'ai essayé ce processus, le son a refusé de jouer et a simplement cliqué à la place. La taille du fichier ou du débit binaire était le coupable: c'était 24 bits et plus de 5 Mo pour un clip de 15 secondes. La mise à l'échelle jusqu'à 16 bits en utilisant le convertisseur que j'ai relié à ci-dessus a tout bien fonctionné, et la taille a été réduite à seulement 260KB!

Si vous remarquez un sifflement désagréable de vos haut-parleurs lorsque votre application Python est en cours d'exécution, mais pas autrement, tapez:

 sudo nano /boot/config.txt 

Et ajoutez cette ligne à la fin:

 disable_audio_dither=1 

Redémarrez pour que les modifications prennent effet. Ou ne vous embêtez pas, car cela ressemblait à de la pluie de toute façon.

Enfin, modifions la boucle principale de contrôle de mouvement pour lire le son lorsqu'un mouvement est détecté. Nous utiliserons un délai de 15 secondes pour que toute la boucle puisse être jouée et pour agir comme un tampon de spam quand il y a beaucoup de mouvements 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") 

Démarrer automatiquement

Nous voulons probablement le configurer quelque part avec une batterie et pas de connexion Internet, donc le script doit être redémarré sans avoir à ouvrir une ligne de commande. Pour ce faire, nous utiliserons la méthode la plus simple possible: crontab Comment planifier des tâches sous Linux avec Cron et Crontab Comment planifier des tâches sous Linux avec Cron et Crontab La possibilité d'automatiser des tâches est une de ces technologies futuristes déjà présentes . Chaque utilisateur de Linux peut bénéficier de la planification du système et des tâches de l'utilisateur, grâce à cron, un service d'arrière-plan facile à utiliser. Lire la suite . Type:

 sudo crontab -e 

Si c'est la première fois que vous exécutez cette commande, vous commencerez par vous demander quel éditeur utiliser. J'ai choisi l'option 2, pour nano. Il va démarrer dans votre éditeur choisi, alors ajoutez la ligne suivante:

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

Cela signifie que votre script motion.py s'exécutera à chaque démarrage, et le fera en silence (donc toute sortie du script sera ignorée). Redémarrez pour l'essayer.

Si rien ne s'affiche malgré un mouvement, ou si vous n'entendez qu'un petit clic, vous n'avez peut-être pas utilisé le chemin complet du fichier, ou votre fichier peut avoir besoin d'un débit inférieur et d'une taille de fichier réduite.

Ajouter plus de sons

Jouer le même effet encore et encore est un peu ennuyeux, alors ajoutons un peu de hasard. Téléchargez d'autres sons d'Halloween, rappelez-vous de les réduire à une taille et à un bitrate raisonnables, puis envoyez-les à votre Pi en utilisant scp comme auparavant. J'ai ajouté trois types différents de cri.

Modifiez le code afin qu'au lieu de définir une seule variable pygame.mixer.Sound, nous créons en fait un tableau de sons. C'est simple avec Python, entourez juste une liste séparée par des virgules avec des crochets, comme ceci:

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

Ensuite, importez la bibliothèque aléatoire dans votre fichier, avec:

 import random 

Modifiez maintenant la boucle principale de détection de mouvement comme suit:

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

Notez le changement mineur: au lieu de jouer la seule variable Sound, nous utilisons la fonction random.choice pour choisir un son aléatoire de notre tableau de sons, puis en jouer.

Voici le code complet au cas où vous rencontrez des problèmes:

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

Avec seulement quatre échantillons, il y a une forte probabilité de répétition à chaque fois, mais vous pouvez ajouter plus d'échantillons si c'est ennuyeux.

C'est tout! Masquer dans les buissons avec des yeux effrayants de monstre LED Comment faire Halloween effrayant Eyes brillant pour moins de 5 $ Comment faire Halloween fantasmagorique Glowing Eyes pour moins de 5 $ Vous voulez pimenter vos décorations d'Halloween cette année? Apprenez à faire des yeux LED pour moins de 5 $ dans le projet électronique de ce débutant. Lire la suite, et vous devriez être en mesure de vous épargner des bonbons que tous les enfants s'enfuient en criant avant même d'atteindre la porte. Ou va te cacher dans le placard parce qu'une mère en colère est dehors pour du sang après avoir fait pleurer le petit Johnny.

Clause de non-responsabilité: MakeUseOf n'est pas responsable des blessures qui pourraient résulter de votre utilisation de ce projet!

Ferez-vous ce soundbox activé par le mouvement afin d'effrayer les trick-or-treaters locaux? Avez-vous mis en place des effets effrayants avec un Raspberry Pi cet Halloween? S'il vous plaît laissez-nous savoir à ce sujet dans les commentaires ci-dessous!

In this article