Промышленное производство
Промышленный Интернет вещей | Промышленные материалы | Техническое обслуживание и ремонт оборудования | Промышленное программирование |
home  MfgRobots >> Промышленное производство >  >> Manufacturing Technology >> Производственный процесс

DIY «Оживлённый портрет» на Raspberry Pi: проект с прыжковым скачком (обновлено)

Обзор проекта

Превратите обычный LCD-монитор в жуткий, активируемый движением «оживлённый портрет». Используя Raspberry Pi 3 B, Python и видео AtmosFX Unliving Portrait, можно создать реалистичный скачок, реагирующий на движение. Это пошаговое руководство охватывает сборку железа, подготовку изображений/видео и Python-скрипты для оживления страха.

Аппаратная часть

Шаг 1: Сборка рамки LCD

После разборки монитора я измерил размеры панели: 17″ × 11″ (портрет). С помощью онлайн-инструмента для рамок выпилил раму 1″ × 2″ с внутренними размерами, соответствующими панели. LCD вставляется плотно, а внешняя рамка остаётся доступной сзади. Раму тонировал, затем закрепил гвоздезабивателем.

Затем закрепил Raspberry Pi на 3D-печатном боковом креплении (Thingiverse). Держатели зеркала фиксируют LCD, и я просверлил отверстие для PIR-датчика для подключения к GPIO Pi (пин 7).

Шаг 2: Подготовка изображений, видео и кода

Я выбрал три видео AtmosFX Unliving Portrait (Мужчина, Женщина, Ребёнок) для разнообразия. Каждое видео стоит $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-скрипты

Проект использует два скрипта: 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-камеру для записи Eindringling. Модульная архитектура сохраняет гибкость для будущих улучшений.

Для визуальной демонстрации смотрите готовый «оживлённый портрет» в действии: YouTube Video.

Полное техническое описание: Possessed Portrait – Updated

Производственный процесс

  1. Периодическая таблица — портретная ориентация
  2. Оправы очков: главный модный аксессуар
  3. Жидкокристаллические дисплеи (LCD): технология, производство и перспективы
  4. CDS представляет ClearVue3DP: высокояркие 3D прозрачные LCD для бесшовной интеграции
  5. Primal Display: создайте монитор температуры на Raspberry Pi с LCD
  6. Создание анимации и игр на LCD 16×2 с Arduino UNO
  7. Создайте ИИ-компаньона на LCD: интерактивный друг на Arduino
  8. Надежная погодная станция на Arduino с датчиками DHT
  9. DIY-проект Arduino LCD: сборка с резисторами, кнопкой и дисплеем 16x2
  10. Надёжные будильник на DS1302 RTC и Arduino UNO — сборка и код