Fabrication industrielle
Internet des objets industriel | Matériaux industriels | Entretien et réparation d'équipement | Programmation industrielle |
home  MfgRobots >> Fabrication industrielle >  >> Manufacturing Technology >> Processus de fabrication

Portrait hanté DIY : Projet Raspberry Pi Jump-Scare (Mis à jour)

Présentation du projet

Transformez un moniteur LCD ordinaire en un portrait hanté activé par le mouvement, glaçant et réaliste. En utilisant un Raspberry Pi 3 B, Python et les vidéos Unliving Portrait d'AtmosFX, vous pouvez créer un saut de frayeur réaliste qui réagit au mouvement. Ce guide étape par étape couvre l'assemblage matériel, la préparation des images/vidéos et les scripts Python nécessaires pour donner vie à la frayeur.

Configuration matérielle

Étape 1 : Construire le cadre LCD

Après avoir démonté le moniteur LCD, j'ai mesuré les dimensions du panneau : 17" × 11" (portrait). En utilisant un outil de cadrage en ligne, j'ai découpé un cadre en bois 1" × 2" avec des dimensions intérieures correspondant au panneau. Le LCD s'insère parfaitement à l'intérieur, et le cadre extérieur reste accessible par l'arrière. J'ai fini le cadre avec une teinture pour bois, puis l'ai fixé avec un cloueur à broches.

Ensuite, j'ai monté le Raspberry Pi sur un support latéral Pi imprimé en 3D (Thingiverse). Des supports de miroir maintiennent le LCD stable, et j'ai percé un trou pour le capteur PIR afin de le connecter à l'en-tête GPIO du Pi (broche 7).

Étape 2 : Préparer les images, vidéos et le code

J'ai sélectionné trois vidéos Unliving Portrait d'AtmosFX (Homme, Femme, Enfant) pour un ensemble de frayeurs varié. Chaque vidéo coûte 7,99 $ et offre un contenu de saut de frayeur à fort impact. AtmosFX fournit des MP4 téléchargeables, que j'ai renommés en MaleScare.mp4, FemaleScare.mp4 et ChildScare.mp4.

Pour l'image fixe initiale, j'ai capturé la première image de chaque vidéo avec VLC, les ai enregistrées sous MaleStart.png, FemaleStart.png et ChildStart.png, et stocké tous les médias dans un dossier ScareMedia.

Structure des dossiers

/home/pi/Projects/Halloween/
├─ ScareMedia/
│ ├─ MaleStart.png
│ ├─ FemaleStart.png
│ ├─ ChildStart.png
│ ├─ MaleScare.mp4
│ ├─ FemaleScare.mp4
│ └─ ChildScare.mp4

Scripts Python

Le projet utilise deux scripts Python : pirDetect.py pour lire le capteur PIR et scare.py pour lancer la vidéo lorsque le mouvement est détecté.

#!/usr/bin/python
import RPi.GPIO as GPIO
import time
import os

class detector(object):
    def __init__(self, sensor):
        self.callBacks = []
        self.sensor = sensor
        self.currState = False
        self.prevState = False
        GPIO.setmode(GPIO.BOARD)
        GPIO.setup(self.sensor, GPIO.IN, pull_up_down=GPIO.PUD_DOWN)

    def read(self):
        self.prevState = self.currState
        self.currState = GPIO.input(self.sensor)

    def printState(self):
        print(f"GPIO pin {self.sensor} is {'HIGH' if self.currState else 'LOW'}")

    def subscribe(self, callBack):
        self.callBacks.append(callBack)

    def callBack(self, state):
        for fn in self.callBacks:
            fn(state)

    def start(self):
        try:
            self.read()
            self.printState()
            while True:
                self.read()
                if self.currState != self.prevState:
                    self.printState()
                    self.callBack(self.currState)
                time.sleep(.1)
        except (KeyboardInterrupt, SystemExit):
            os.system('stty sane')
#!/usr/bin/python
import subprocess as sp
import time
import os
from pirDetect import *
import sys

video = ["omxplayer", "filename", "-o", "both", "--win", "0 0 1280 720", "--aspect-mode", "fill", "--no-osd", "--orientation", "180", "--vol", "-600"]
scareFile = "/home/pi/Projects/Halloween/ScareMedia/{0}Scare.mp4".format(sys.argv[1])
print(scareFile)

def onMotion(currState):
    if currState:
        video[1] = scareFile
        subVideo = sp.Popen(video)
        while subVideo.poll() is None:
            time.sleep(.1)

def showImage():
    os.system(f"sudo fbi -T 1 -d /dev/fb0 -noverbose -once /home/pi/Projects/Halloween/ScareMedia/{sys.argv[1]}Start.png")

showImage()
objDetect = detector(7)
objDetect.subscribe(onMotion)
objDetect.start()
os.system("sudo killall -9 fbi")

Lorsqu'un mouvement est détecté, scare.py affiche l'image fixe via fbi et lance la vidéo choisie avec omxplayer. Après la fin de la vidéo, l'image fixe reste à l'écran, prête pour la prochaine rencontre.

Assemblage final

Exécutez le script avec un seul argument pour sélectionner le personnage :

python scare.py Male

Plus tard, vous pouvez étendre le script pour choisir une vidéo au hasard ou incorporer une caméra Pi pour filmer l'intrus. Cette conception modulaire garde le projet flexible pour de futures améliorations.

Pour une démonstration visuelle, regardez le portrait hanté fini en action : Vidéo YouTube.

Lisez l'article technique complet : Portrait Possédé – Mis à jour

Processus de fabrication

  1. Tableau périodique des éléments — Vue portrait
  2. Montures de Lunettes : L'Accessoire de Mode Ultime
  3. Affichage à Cristaux Liquides (LCD) : Technologie, Fabrication et Perspectives Futures
  4. CDS dévoile ClearVue3DP : LCD transparents 3D haute luminosité pour intégration transparente
  5. Primal Display : Construire un moniteur de température LCD avec Raspberry Pi
  6. Créer des animations et jeux sur LCD avec Arduino UNO
  7. Construisez un compagnon LCD IA : votre ami interactif
  8. Projet Arduino LCD DIY : Assemblage avec résistances, bouton poussoir et afficheur 16x2
  9. Construire un Réveil Fiable avec RTC DS1302 et Arduino UNO