DIYホラー肖像画:Raspberry Piジャンプスケアプロジェクト(更新版)
プロジェクト概要
普通のLCDモニターを、モーションアクティブな恐怖の肖像画に変身させます。Raspberry Pi 3 B、Python、AtmosFXの「Unliving Portrait」動画を使用して、動きに反応するリアルなジャンプスケアを作成。このステップバイステップガイドでは、ハードウェア組み立て、画像/動画の準備、必要なPythonスクリプトをカバーします。
ハードウェアセットアップ
ステップ1:LCDフレームの製作
LCDモニターを分解後、パネル寸法を測定:17インチ×11インチ(縦向き)。オンラインフレーミングツールを使用し、内寸がパネルに一致する1インチ×2インチの木製フレームをカット。LCDはフレーム内にフラッシュマウントし、外側の額縁は背面からアクセス可能。木材にステイン塗装後、ブラッドネイラで固定。
次に、3DプリントしたPiサイドマウント(Thingiverse)にRaspberry Piを搭載。ミラーホルダーでLCDを安定させ、PIRセンサー用の穴を開けてPiのGPIOヘッダー(ピン7)に接続。
ステップ2:画像、動画、コードの準備
AtmosFX「Unliving Portrait」動画から3種類(男性、女性、子供)を選択し、バリエーション豊かなスケアセットを作成。各動画は7.99ドルで、高インパクトなジャンプスケアコンテンツを提供。 AtmosFX からダウンロード可能な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スクリプト
プロジェクトは2つの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カメラを組み込んで侵入者を録画したりする拡張も可能。このモジュール設計により、将来的な機能追加に柔軟に対応できます。
完成したホラー肖像画の動作デモ: YouTube動画
完全な技術解説: Possessed Portrait – Updated
製造プロセス
- メガネフレーム:究極のファッションアクセサリー
- 液晶ディスプレイ(LCD):技術、製造、将来展望
- Primal Display:Raspberry Pi LCD温度モニターの構築
- Arduino UNOで作るLCDアニメーション&ゲーム入門
- AI搭載LCDコンパニオンを自作: インタラクティブな相棒
- DHT センサで作る信頼性の高い Arduino 気象ステーション
- Arduino UNOで作るクラシックLCDアーケードゲーム(ブザー・ジョイスティック付き)
- Arduino LCDプロジェクト: 16x2ディスプレイとプッシュボタンで作るサッカーゲーム
- DS1302 RTCとArduino UNOで作る信頼性の高い目覚まし時計
- 周期表 – 縦向きビュー
- CDS、シームレス統合向け高輝度3D透過型LCD「ClearVue3DP」発表