Manufactura industrial
Internet industrial de las cosas | Materiales industriales | Mantenimiento y reparación de equipos | Programación industrial |
home  MfgRobots >> Manufactura industrial >  >> Manufacturing Technology >> Proceso de manufactura

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

  1. Monturas de Gafas: El Accesorio de Moda Definitivo
  2. Pantalla de Cristal Líquido (LCD): Tecnología, Fabricación y Perspectivas Futuras
  3. Primal Display: construye monitor temperatura LCD con Raspberry Pi
  4. Crea Animaciones y Juegos en LCD 16×2 con Arduino UNO
  5. Compañero LCD con IA: Tu Amigo Interactivo con Arduino
  6. Construye una Estación Meteorológica Arduino Fiable con Sensores DHT
  7. Construye un Juego Arcade Clásico con Arduino LCD, Zumbador y Joystick
  8. Proyecto Arduino LCD DIY: Ensamblaje con resistencias, pulsador y display 16x2
  9. Construye un reloj despertador fiable con RTC DS1302 y Arduino UNO
  10. Tabla periódica – Vista vertical
  11. CDS presenta ClearVue3DP: LCDs transparentes 3D de alto brillo para integración sin fisuras