Comment j’ai fait une Jack-o’-lantern automatisée avec un Raspberry Pi

C’est presque Halloween, l’un de mes jours et moments de fête préférés. Cette année, j’ai décidé de (potiron) pimenter certaines de mes décorations avec une détection de mouvement automatisée. Cet article fantasmagorique vous montre comment je les ai créés, étape par étape, de la construction et du câblage au codage. Il ne s’agit pas d’un projet de week-end ordinaire : cela demande beaucoup de fournitures et de temps de construction. Mais c’est une façon amusante de jouer avec Raspberry Pi et de se plonger dans l’esprit de ces vacances obsédantes.
Contents
Ce dont vous avez besoin pour ce projet
- Une grosse citrouille en plastique
- Un Raspberry Pi 4 (avec périphériques)
- Un kit de démarrage Arduino qui fonctionne avec Raspberry Pi
- Un pistolet à colle chaude
- Ruban, idéalement aux couleurs du thème des fêtes
Les éléments dont vous aurez besoin dans le kit de démarrage sont un capteur de mouvement infrarouge, une planche à pain, deux petites lumières LED, un ruban pour connecter la planche à pain au Raspberry Pi et un câblage pour configurer toutes ces pièces ensemble. Vous pouvez trouver chacun de ces articles en ligne, et je suggère le kit de démarrage pour les activités divertissantes que vous pouvez faire au-delà de ce projet.
Installation de l’OS Raspberry Pi et préconfiguration
Après avoir reçu mon Pi, y compris la carte SD, je suis allé en ligne et j’ai suivi l’imageur Raspberry Pi instructions. Cela a permis une installation rapide du système d’exploitation sur la carte SD. Remarque : vous devez pouvoir insérer la carte SD dans un emplacement pour lecteur de carte SD. J’ai un lecteur de carte SD externe connecté, mais certains ordinateurs les ont intégrés. Sur votre ordinateur local, vous avez également besoin d’une visionneuse VNC.
Après avoir installé le système d’exploitation et exécuté les mises à jour, j’ai eu quelques étapes supplémentaires pour que tout fonctionne correctement. Pour ce faire, vous aurez besoin des éléments suivants :
- Python 3
- Python3-devel
- Pépin
- RPi GPIO (pip installer RPi.GPIO)
- Un éditeur de code (Thonny est sur Raspberry Pi OS)
Ensuite, configurez un VNCviewer afin de pouvoir vous connecter lorsque le Pi est caché dans votre citrouille.
Pour ce faire, exécutez la commande ci-dessous, puis suivez les instructions ci-dessous.
sudo raspi-config
Lorsque ce menu apparaît, choisissez Options d’interface :
Ensuite, choisissez VNC et activez-le dans la fenêtre contextuelle :
Vous pouvez également utiliser Secure Shell (SSH) pour cela, mais pendant la phase de dépannage, j’ai utilisé VNC. Une fois connecté à votre Raspberry Pi, rassemblez l’adresse IP et utilisez-la pour SSH et une connexion VNC. Si vous avez changé de pièce, vous pouvez également utiliser votre routeur ou commutateur WiFi pour vous indiquer l’adresse IP du Pi.
Maintenant que tout est installé, vous pouvez passer à la construction de votre maquette avec des lumières.
Tout le monde devrait essayer le pain à la citrouille (planche)
Beaucoup de gens n’ont pas vu ou travaillé avec une maquette, j’ai donc ajouté des photos de mes pièces, en commençant par mes composants de base.
Ces deux pièces sont assemblées avec le bouclier d’extension au centre, comme illustré.
Le ruban se connecte à la fente pour broches du Raspberry Pi, faisant de la carte une nouvelle extension avec laquelle nous pouvons coder et jouer. Le ruban n’est pas nécessaire, il facilite simplement le travail avec les broches GPIO. Si vous ne souhaitez pas acheter de ruban, vous pouvez connecter des câbles de démarrage femelle-mâle directement des broches du Pi à la planche à pain. Voici les composants dont vous avez besoin :
- Raspberry Pi (version 4 ou 3)
- Planche à pain
- Câble plat d’extension GPIO
- Câbles de démarrage (x6 mâle-mâle)
- Résistance 220??
- HC-SR501 ou tout autre capteur de proximité similaire (x1)
- DEL (x2)
Assembler le tableau
Une fois que vous avez toutes les pièces, vous pouvez tout assembler. Tout d’abord, regardez comment les broches sont définies sur la carte. Ceci est ma carte d’extension personnelle; celui que vous avez peut être différent. Les définitions des broches sont importantes lorsque vous commencez à coder, alors gardez une très bonne trace de votre câblage. Ci-dessous le schéma de mon extension.
Comme vous pouvez le voir, le schéma comporte à la fois la numérotation GPIO BCM (Broadcom SOC Channel) définie sur la carte physique et la numérotation physique que vous utilisez dans le code pour créer des routines et des fonctions.
Il est maintenant temps de connecter du câblage. Tout d’abord, commencez par le capteur. On m’a fourni des câbles à brancher dans mon kit, donc j’ajouterai des photos au fur et à mesure. Il s’agit du capteur avec une mise à la terre (+) de mise à la terre (-) et une connexion du capteur à la ou aux cartes d’extension.
Pour les couleurs des câbles : l’alimentation est rouge, la terre est noire et le jaune transporte les données du capteur.
Je branche les câbles avec alimentation/rouge à la broche 5V, terre/noir à la broche GRN et capteur/jaune à la broche GPIO 17, qui sera plus tard défini comme 11 dans le code.
Ensuite, il est temps d’installer les lumières. Chaque lumière LED a deux broches, une plus courte que l’autre. Le côté long (anode) s’aligne toujours avec le câble à broches et le plus court (cathode) avec la masse et la résistance.
Pour la première lumière, j’utilise GPIO18 (broche 12) et GPIO25 pour le signal. Ceci est important car le code communique avec ces broches. Vous pouvez changer la broche que vous utilisez, mais vous devez ensuite changer le code. Voici un schéma du résultat final :
Maintenant que tout est câblé, il est temps de commencer à travailler sur le code.
Comment utiliser un serpent pour monter une citrouille
Si vous avez déjà installé Python 3, vous avez tout ce dont vous avez besoin pour commencer à travailler sur cette ligne par ligne. Dans cet exemple, j’utilise Python 3 avec le package RPI. Commencez avec les packages importés, le RPI et le temps écoulé depuis le sommeil (cela permet de créer l’effet de scintillement décrit plus loin dans le didacticiel). J’ai appelé mon fichier Python senseled.py, mais vous pouvez nommer votre fichier comme vous le souhaitez.
#!/usr/bin/env python3import RPi.GPIO as GPIO
import os
from time import sleep
Ensuite, définissez vos deux broches LED et la broche du capteur. Plus tôt dans cet article, j’ai fourni ces numéros de broche lors du câblage de la carte, vous pouvez donc voir ces numéros exacts ci-dessous.
ledPin1 = 12 # define ledPins
ledPin2 = 22
sensorPin = 11 # define sensorPin
Étant donné que vous avez deux lumières à configurer pour qu’elles clignotent ensemble dans cet exemple, j’ai également créé un tableau défini à utiliser plus tard :
leds = [ledPin1, ledPin2]
Ensuite, définissez la configuration de la carte et des broches à l’aide du package RPi.GPIO. Pour ce faire, définissez le mode sur la carte. J’ai choisi d’utiliser le système de numérotation physique dans ma configuration, mais vous pouvez utiliser le BCM si vous préférez. N’oubliez pas que vous ne pouvez jamais utiliser les deux. Voici un exemple de chacun :
# for GPIO numbering, choose BCM
GPIO.setmode(GPIO.BCM)
# or, for pin numbering, choose BOARD
GPIO.setmode(GPIO.BOARD)
Pour cet exemple, utilisez la numérotation des broches dans ma configuration. Réglez les deux broches sur le mode de sortie, ce qui signifie que toutes les commandes sont envoyées aux lumières. Ensuite, réglez le capteur en mode d’entrée de sorte que lorsque le capteur voit un mouvement, il entre les données sur la carte pour émettre les lumières. Voici à quoi ressemblent ces définitions :
def setup():
GPIO.setmode(GPIO.BOARD) # use PHYSICAL GPIO Numbering
GPIO.setup(ledPin1, GPIO.OUT) # set ledPin to OUTPUT mode
GPIO.setup(ledPin2, GPIO.OUT) # set ledPin to OUTPUT mode
GPIO.setup(sensorPin, GPIO.IN) # set sensorPin to INPUT mode
Maintenant que la carte et les broches sont définies, vous pouvez assembler votre fonction principale. Pour cela, j’utilise le tableau dans un for
boucle, puis une instruction if basée sur l’entrée du capteur. Si vous n’êtes pas familier avec ces fonctions, vous pouvez consulter ceci Guide rapide.
Si le capteur reçoit une entrée, la sortie LED est élevée (sous tension) pendant 0,03 seconde, puis faible (hors tension) lors de l’impression du message led turned on.
Si le capteur ne reçoit aucune entrée, les LED s’éteignent pendant l’impression du message led turned off
.
def main():
while True:
for led in leds:
if GPIO.input(sensorPin)==GPIO.HIGH:
GPIO.output(led, GPIO.HIGH)
sleep(.05)
GPIO.output(led, GPIO.LOW)
print ('led turned on >>>')
else :
GPIO.output(led, GPIO.LOW) # turn off led
print ('led turned off <<<')
Bien que vous puissiez choisir mathématiquement le niveau de luminosité, j’ai trouvé plus facile de régler la minuterie de veille entre la mise sous tension et la mise hors tension. Je l’ai réglé après de nombreux tests sur le temps nécessaire pour créer un effet de bougie vacillante.
Enfin, vous avez besoin d’un nettoyage pour libérer vos ressources une fois le programme terminé :
def destroy():
GPIO.cleanup() # Release GPIO resource
Maintenant que tout a été défini pour s’exécuter, vous pouvez exécuter votre code. Démarrez le programme, exécutez l’installation, essayez votre main, et si un KeyboardInterrupt est reçu, détruisez et nettoyez tout.
if __name__ == '__main__': # Program entrance
print ('Program is starting...')
setup()
try:
main()
except KeyboardInterrupt: # Press ctrl-c to end the program.
destroy()
Maintenant que vous avez créé votre programme, le résultat final devrait ressembler à ceci :
#!/usr/bin/env python3import RPi.GPIO as GPIO
import os
from time import sleepledPin1 = 12 # define ledPins
ledPin2 = 22
sensorPin = 11 # define sensorPin
leds = [ledPin1, ledPin2]def setup():
GPIO.setmode(GPIO.BOARD) # use PHYSICAL GPIO Numbering
GPIO.setup(ledPin1, GPIO.OUT) # set ledPin to OUTPUT mode
GPIO.setup(ledPin2, GPIO.OUT) # set ledPin to OUTPUT mode
GPIO.setup(sensorPin, GPIO.IN) # set sensorPin to INPUT mode
def main():
while True:
for led in leds:
if GPIO.input(sensorPin)==GPIO.HIGH:
GPIO.output(led, GPIO.HIGH)
sleep(.05)
GPIO.output(led, GPIO.LOW)
print ('led turned on >>>')
else :
GPIO.output(led, GPIO.LOW) # turn off led
print ('led turned off <<<')
def destroy():
GPIO.cleanup() # Release GPIO resourceif __name__ == '__main__': # Program entrance
print ('Program is starting...')
setup()
try:
main()
except KeyboardInterrupt: # Press ctrl-c to end the program.
destroy()
Lorsqu’il s’exécute, il devrait ressembler à ceci. (Remarque : j’étais encore en train de tester avec le temps de sommeil pendant cet enregistrement.)
Il est temps de faire cuire cette citrouille
Pour commencer, j’ai eu une très grosse citrouille en plastique offerte par notre famille à mon mari et moi.
À l’origine, il y avait une prise à l’arrière avec une ampoule grillée, ce qui a inspiré cette idée en premier lieu. J’ai réalisé que je devais faire quelques modifications, en commençant par percer un trou dans le fond à l’aide d’une perceuse et d’une scie sauteuse.
Heureusement, la citrouille avait déjà un trou à l’arrière pour le cordon menant à la lumière d’origine. Je pouvais fourrer tout l’équipement à l’intérieur de la citrouille, mais j’avais besoin d’un moyen de cacher le capteur.
Tout d’abord, j’ai dû faire un emplacement pour que le capteur soit câblé à l’extérieur de la citrouille, j’ai donc percé un trou au niveau de la tige :
Ensuite, j’ai mis tout le câblage du capteur dans le trou, ce qui a fini par poser un autre problème : le capteur est gros et bizarre. Je suis allé à la recherche d’un moyen décoratif pour résoudre ce problème.
En fait, j’ai fait la décoration de ruban la plus effrayante (couverte de bouillie de pistolet à colle chaude) de toute l’humanité, mais vous ne remarquerez pas le capteur.
Enfin, j’ai mis le Pi et la carte d’extension dans la citrouille et j’ai câblé l’alimentation par l’arrière.
Avec tout câblé, j’étais prêt à VNC dans mon Pi et à allumer le Python, puis à attendre que quelque chose bouge pour le tester.
Notes post cuisson
C’était une construction vraiment longue et très recherchée. Comme je l’ai dit dans l’introduction, ce n’est pas un projet de week-end. Je ne connaissais rien aux maquettes lorsque j’ai commencé, et il m’a fallu un certain temps pour recoder et déterminer exactement ce que je voulais. Il y a des détails très précis que je n’ai pas inclus ici. Par exemple, le capteur a deux boutons qui définissent jusqu’où il peut capter le mouvement et combien de temps l’entrée du capteur doit continuer. Bien que ce soit une chose fantastique à apprendre, je ferais certainement beaucoup de recherches avant de poursuivre ce voyage.
Je ne suis pas arrivé à une partie du projet que je voulais vraiment : la possibilité de se connecter à un appareil Bluetooth et de faire des bruits effrayants. Cela dit, jouer avec un Raspberry Pi est toujours amusant à faire, que ce soit avec la domotique, le suivi météo ou simplement des décorations idiotes. J’espère que vous avez apprécié cette visite guidée et que vous vous sentez inspiré pour essayer quelque chose de similaire vous-même.