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