亿迅智能制造网
工业4.0先进制造技术信息网站!
首页 | 制造技术 | 制造设备 | 工业物联网 | 工业材料 | 设备保养维修 | 工业编程 |
home  MfgRobots >> 亿迅智能制造网 >  >> Manufacturing Technology >> 制造工艺

DIY 鬼屋肖像画:树莓派跳吓项目(更新版)

项目概述

将普通 LCD 显示器改装为运动触发的鬼屋肖像画。使用树莓派 3B、Python 与 AtmosFX Unliving Portrait 视频素材,打造逼真的跳吓效果。本指南涵盖硬件组装、素材准备、Python 脚本编写全流程。

硬件搭建

步骤 1:制作 LCD 画框

拆解 LCD 显示器,测得面板尺寸 17″×11″(竖屏)。使用在线装裱工具定制 1″×2″ 木框,内径匹配面板。面板嵌入框内,外框背部可拆卸。刷木器漆上色,气钉枪固定。

树莓派安装在 3D 打印侧装支架 (Thingiverse) 上。镜架固定 LCD,钻孔引出 PIR 传感器连接树莓派 GPIO 第 7 脚。

步骤 2:准备图片、视频与代码

选用三段 AtmosFX Unliving Portrait 视频(男性、女性、儿童),每段 $7.99,高冲击力跳吓素材。下载 MP4 后重命名为 MaleScare.mp4、FemaleScare.mp4、ChildScare.mp4。

用 VLC 截取各视频首帧作为静态图,保存为 MaleStart.png、FemaleStart.png、ChildStart.png,所有素材置于 ScareMedia 文件夹。

目录结构

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

Python 脚本

两个脚本协作:pirDetect.py 读取 PIR 传感器,scare.py 检测到运动时播放视频。

#!/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")

检测到运动时,scare.py 先用 fbi 显示静态图,再用 omxplayer 播放对应视频。视频结束后静态图保留,等待下一次触发。

整合运行

单参数运行选择角色:

python scare.py Male

后续可扩展为随机选段、接入 Pi Camera 记录入侵者。模块化设计便于后续功能迭代。

成品演示视频:YouTube。
技术详情:Possessed Portrait – Updated

制造工艺

  1. 眼镜框:终极时尚配饰
  2. 液晶显示器(LCD):技术、制造与未来展望
  3. Primal Display:树莓派 LCD 温度监测仪
  4. Arduino UNO 驱动 16x2 LCD 实现动画与小游戏
  5. 自制 AI LCD 陪伴机器人:你的互动小伙伴
  6. 打造可靠的 Arduino 气象站:DHT 传感器 + LCD + RTC
  7. 用蜂鸣器和摇杆制作经典 Arduino LCD 街机游戏
  8. 用 XOD 可视化编程为 Arduino 快速构建 LCD 菜单系统,零代码实现
  9. DIY Arduino LCD 游戏机:16x2 字符屏打造“躲避防守队员”足球小游戏
  10. 用 DS1302 RTC 和 Arduino UNO 制作可靠闹钟
  11. 元素周期表——纵向视图
  12. CDS 推出 ClearVue3DP:高亮度 3D 透明 LCD,无缝集成