Publicité
C'est encore cette période de l'année où il est considéré comme socialement acceptable de terrifier les jeunes enfants et de leur donner des bonbons. Oh joie. Je suis là pour vous faciliter la tâche, en vous montrant comment créer une caisse de résonance Raspberry Pi Halloween à détection de mouvement simple. Voici une démo:
Voici ce dont vous aurez besoin
La seule partie que vous ne possédez pas déjà est probablement le capteur de mouvement, une petite pièce peu coûteuse que vous devriez pouvoir trouver dans votre microcentre ou Maplin local.
- Raspberry Pi (n'importe quel modèle fera l'affaire).
- Détecteur de mouvement (~ 3 $).
- Fils de raccordement.
- Haut-parleur filaire (la plupart des haut-parleurs Bluetooth auront la possibilité d'utiliser l'entrée ligne).
- Câble stéréo 3,5 mm, mâle à mâle.
Une fois que vous avez terminé, vous voudrez peut-être ajouter effets d'éclairage synchronisés Comment synchroniser les lumières de la maison et la musique pour HalloweenQue vous organisiez une fête à la maison d'Halloween ou que vous souhaitiez la maison hantée la plus cool du quartier, il est essentiel de faire clignoter vos lumières à temps pour la musique et les effets sonores. Lire la suite aussi, mais dans ce tutoriel, nous ne couvrirons que les sons effrayants!
Configuration
Nous utilisons Raspbian Jessie Lite et Python 2.7, mais toute distribution Linux qui s'exécute sur votre Pi devrait convenir. Je l'ai laissé sur le nom d'hôte standard "raspberrypi.local", alors commencez par vous connecter à distance en utilisant SSH (ouvrez une fenêtre Terminal si vous êtes sur Mac. Voici comment faire la même chose sous Windows 4 façons simples d'utiliser SSH sous WindowsSSH est la solution de facto pour accéder en toute sécurité aux terminaux distants sur Linux et autres systèmes de type UNIX. Si vous avez un serveur SSH distant auquel vous souhaitez accéder, vous devrez télécharger un client SSH ... Lire la suite ) - ou si vous avez choisi d'utiliser une Raspbian complète avec une interface graphique de bureau, n'hésitez pas à passer à la mise à jour.
ssh [email protected]. (entrez framboise comme mot de passe) sudo apt-get update. sudo apt-get installe python-pip. sudo pip installe 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âblez votre capteur avec la broche de signal sur GPIO4, le VCC connecté à 5V et le GND connecté à GND. Cela peut varier selon votre modèle exact, alors confirmez avec un schéma de brochage.
Utilement, mon boîtier Pi 2 de Pimoroni a un diagramme de brochage gravé au laser directement dessus.
Faisons maintenant notre script de détection de mouvement.
nano motion.py.
Coller:
de gpiozero import MotionSensor pir = MotionSensor (4) tandis que True: si pir.motion_detected: print ("Mouvement détecté!") else: print ("Aucun mouvement")
Appuyez sur CTRL-X puis sur Y pour enregistrer 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 agitez la main devant le capteur, quand il s'attardera sur le "Mouvement détecté!"
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 œil à cette cheatsheet fantastique.
Jouer du son
Connectez votre enceinte portable et assurez-vous qu'elle est sous tension si nécessaire. Nous utiliserons le pygame bibliothèque pour jouer des sons, alors allez-y et installez-la:
sudo apt-get installe python-pygame.
Tout d'abord, nous avons besoin d'un fichier son pour jouer. Si vous le faites à partir de l'environnement de bureau, allez-y et téléchargez un WAV ou OGG fichier quelque part (j'ai trouvé une bonne sélection de des sons d'Halloween gratuits ici) et placez-le dans votre répertoire personnel. Je suggère d'abord de sous-échantillonner et conversion en petit format OGG en tous cas.
Si vous vous connectez à distance et utilisez uniquement la ligne de commande, nous avons un peu plus de difficulté avec certains sites, car le wget La commande peut ne pas récupérer le fichier réel. Au lieu de cela, nous pouvons le télécharger localement sur notre bureau et utiliser le scp (copie sécurisée) pour copier sur la ligne de commande. Vous pouvez en savoir plus à propos de 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 la finale : (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 vers le répertoire personnel de l'utilisateur Pi.
Modifions maintenant le script pour jouer un son. Commencez par importer de nouveaux modules:
importer pygame.mixer. de pygame.mixer import Sound.
Ensuite, juste après les instructions d'importation existantes, nous bouclons le même son encore et encore à des fins de test. Laissez le reste de votre code de détection de mouvement tel qu'il est pour l'instant - il ne fonctionnera tout simplement pas, car il sera coincé dans cette boucle de lecture sonore pour toujours.
pygame.init () pygame.mixer.init () # charger un fichier son, dans le répertoire personnel de l'utilisateur Pi (pas de mp3) tonnerre = pygame.mixer. Sound ("/ home / pi / thunder.ogg") tandis que True: thunder.play () sleep (10) thunder.stop ()
Notez que lorsque j'ai essayé ce processus à l'origine, le son a refusé de jouer et a simplement cliqué à la place. La taille du fichier ou du débit était le coupable: il était de 24 bits et plus de 5 Mo pour un clip de 15 secondes. La réduction à 16 bits en utilisant le convertisseur que j'ai lié à ci-dessus a tout fait bien fonctionner, et la taille a été réduite à seulement 260 Ko!
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 pour moi de toute façon.
Enfin, modifions la boucle principale de détection de mouvement pour jouer le son lorsqu'un mouvement est détecté. Nous utiliserons un délai de 15 secondes pour que toute la boucle puisse être lue et pour agir comme un tampon de spam lorsqu'il y a beaucoup de mouvement non-stop.
tandis que True: si pir.motion_detected: print ("Motion detect!") thunder.play () # s'assure que la lecture a été entièrement terminé avant de reprendre la détection de mouvement, empêche le "spam" du sommeil sonore (15) thunder.stop () else: print ("No mouvement")
Démarrer automatiquement
Nous voulons probablement configurer cela quelque part avec une batterie et aucune connexion Internet, donc le script doit s'exécuter au redémarrage sans avoir à ouvrir une ligne de commande. Pour ce faire, nous utiliserons la méthode la plus simple possible: le crontab Comment planifier des tâches sous Linux avec Cron et CrontabLa capacité d'automatiser des tâches est l'une de ces technologies futuristes qui est déjà là. Chaque utilisateur Linux peut bénéficier du système de planification et des tâches 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, elle commencera par vous demander quel éditeur utiliser. J'ai choisi l'option 2, pour nano. Il démarrera dans l'éditeur que vous avez 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 (de sorte que toute sortie du script sera ignorée). Redémarrez pour l'essayer.
Si rien n'est lu malgré le mouvement, ou si vous entendez juste un petit clic, vous n'avez peut-être pas utilisé le chemin d'accès complet au fichier, ou votre fichier peut avoir besoin d'ê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 du hasard. Téléchargez d'autres sons d'Halloween, en vous rappelant de les réduire à une taille et à un débit raisonnables, puis envoyez-les sur votre Pi en utilisant scp comme avant. J'ai ajouté trois types de cris différents.
Modifiez le code de sorte qu'au lieu de définir un seul pygame.mixer. Du son variable, nous créons en fait un tableau des sons. C'est simple avec Python, entourez simplement une liste séparée par des virgules avec des crochets, comme ceci:
sons = [pygame.mixer. Son ("/ home / pi / thunder.ogg"), pygame.mixer. Son ("/ home / pi / scary_scream.ogg"), pygame.mixer. Son ("/ home / pi / girl_scream.ogg"), pygame.mixer. Son ("/ home / pi / psycho_scream.ogg")]
Ensuite, importez la bibliothèque aléatoire dans votre fichier, avec:
importation aléatoire.
Modifiez maintenant la boucle principale de détection de mouvement comme suit:
tandis que True: si pir.motion_detected: print ("Mouvement détecté!") playSound = random.choice (sons) playSound.play () # assurez-vous que la lecture a complètement terminé avant de reprendre la détection de mouvement, empêche le "spam" du sommeil sonore (15) playSound.stop () else: print ("No mouvement")
Notez le changement mineur: au lieu de jouer la seule variable Sound, nous utilisons le random.choice pour choisir un son aléatoire dans notre tableau de sons, puis le jouer.
Voici le code complet en cas de problème:
importer pygame. de pygame.mixer import Sound. à partir de gpiozero, importez MotionSensor. depuis le temps d'importer le sommeil. importer pygame.init () aléatoire pygame.mixer.init () # charger un fichier son, même répertoire que le script (pas de mp3) sons = [pygame.mixer. Son ("/ home / pi / thunder.ogg"), pygame.mixer. Son ("/ home / pi / scary_scream.ogg"), pygame.mixer. Son ("/ home / pi / girl_scream.ogg"), pygame.mixer. Son ("/ home / pi / psycho_scream.ogg")] pir = MotionSensor (4) tandis que True: si pir.motion_detected: print ("Mouvement détecté!") playSound = random.choice (sons) playSound.play () # assurez-vous que la lecture a complètement terminé avant de reprendre la détection de mouvement, empêche le "spam" du sommeil sonore (15) playSound.stop () else: print ("No mouvement")
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! Cachez-le dans les buissons avec un peu yeux de monstre effrayants à LED Comment faire des yeux brillants Spooky Halloween pour moins de 5 $Vous voulez pimenter vos décorations d'Halloween cette année? Apprenez à fabriquer des yeux LED pour moins de 5 $ dans ce projet d'électronique pour débutants. Lire la suite et vous devriez pouvoir vous épargner des bonbons alors que tous les enfants s'enfuient en hurlant avant même d'atteindre la porte. Ou allez vous cacher dans le placard parce qu'une maman en colère est à la recherche de sang après avoir fait pleurer le petit Johnny.
Avis de non-responsabilité: MakeUseOf n'est pas responsable de toute blessure corporelle pouvant résulter de votre utilisation de ce projet!
Serez-vous en train de créer cette caisse de résonance activée par le mouvement afin d'effrayer les tricheurs ou les traiteurs locaux? Avez-vous mis en place des effets effrayants avec un Raspberry Pi cet Halloween? Merci de nous en faire part dans les commentaires ci-dessous!
James est titulaire d'un BSc en intelligence artificielle et est certifié CompTIA A + et Network +. Il est le développeur principal de MakeUseOf et passe son temps libre à jouer au paintball VR et aux jeux de société. Il construit des PC depuis qu'il est enfant.