Retrato Embrujado DIY: Proyecto de Susto con Raspberry Pi (Actualizado)
Descripción del Proyecto
Transforma un monitor LCD ordinario en un retrato embrujado activado por movimiento. Usando una Raspberry Pi 3 B, Python y los vídeos Unliving Portrait de AtmosFX, puedes crear un susto realista que reacciona al movimiento. Esta guía paso a paso cubre el montaje de hardware, preparación de imágenes/vídeos y los scripts Python necesarios para dar vida al susto.
Configuración de Hardware
Paso 1: Construir el Marco del LCD
Tras desmontar el monitor LCD, medí las dimensiones del panel: 17" × 11" (vertical). Usando una herramienta online de enmarcado, corté un marco de madera 1" × 2" con dimensiones interiores que coinciden con el panel. El LCD queda encajado, y el marco exterior permanece accesible por la parte trasera. Acabé el marco con tinte para madera y lo fijé con una clavadora de brad.
Luego monté la Raspberry Pi en un soporte lateral impreso en 3D (Thingiverse). Soportes de espejo mantienen el LCD estable, y taladré un agujero para el sensor PIR que conecta al header GPIO de la Pi (pin 7).
Paso 2: Preparar Imágenes, Vídeos y Código
Seleccioné tres vídeos Unliving Portrait de AtmosFX (Hombre, Mujer, Niño) para un set variado de sustos. Cada vídeo cuesta $7.99 y ofrece contenido de alto impacto. AtmosFX provee MP4 descargables, que renombré a MaleScare.mp4, FemaleScare.mp4 y ChildScare.mp4.
Para la imagen inicial estática, capturé el primer fotograma de cada vídeo con VLC, los guardé como MaleStart.png, FemaleStart.png y ChildStart.png, y guardé todos los medios en una carpeta ScareMedia.
Estructura de Carpetas
/home/pi/Projects/Halloween/
├─ ScareMedia/
│ ├─ MaleStart.png
│ ├─ FemaleStart.png
│ ├─ ChildStart.png
│ ├─ MaleScare.mp4
│ ├─ FemaleScare.mp4
│ └─ ChildScare.mp4
Scripts Python
El proyecto usa dos scripts Python: pirDetect.py para leer el sensor PIR y scare.py para lanzar el vídeo cuando se detecta movimiento.
#!/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")
Cuando se detecta movimiento, scare.py muestra la imagen estática vía fbi y lanza el vídeo elegido con omxplayer. Al terminar el vídeo, la imagen estática permanece en pantalla, lista para el siguiente encuentro.
Uniendo Todo
Ejecuta el script con un único argumento para seleccionar el personaje:
python scare.py Male
Más adelante, puedes extender el script para elegir un vídeo al azar o incorporar una cámara Pi para grabar al intruso. Este diseño modular mantiene el proyecto flexible para futuras mejoras.
Para una demostración visual, mira el retrato embrujado en acción: Vídeo en YouTube.
Lee el artículo técnico completo: Retrato Poseído – Actualizado
Proceso de manufactura
- Monturas de Gafas: El Accesorio de Moda Definitivo
- Pantalla de Cristal Líquido (LCD): Tecnología, Fabricación y Perspectivas Futuras
- Primal Display: construye monitor temperatura LCD con Raspberry Pi
- Crea Animaciones y Juegos en LCD 16×2 con Arduino UNO
- Compañero LCD con IA: Tu Amigo Interactivo con Arduino
- Construye una Estación Meteorológica Arduino Fiable con Sensores DHT
- Construye un Juego Arcade Clásico con Arduino LCD, Zumbador y Joystick
- Proyecto Arduino LCD DIY: Ensamblaje con resistencias, pulsador y display 16x2
- Construye un reloj despertador fiable con RTC DS1302 y Arduino UNO
- Tabla periódica – Vista vertical
- CDS presenta ClearVue3DP: LCDs transparentes 3D de alto brillo para integración sin fisuras