Manufaturação industrial
Internet das coisas industrial | Materiais industriais | Manutenção e reparo de equipamentos | Programação industrial |
home  MfgRobots >> Manufaturação industrial >  >> Manufacturing Technology >> Processo de manufatura

Retrato possesso - Atualizado

Retrato de terror DIY do zero usando framboesa Pi 3 B, Python e AtmosFX Vídeos sem vida. É outubro de novo e eu queria fazer um projeto de Halloween usando um Raspberry Pi. Eu vi alguns retratos assombrados espalhados aqui e ali, mas nenhum deles realmente apresentou muito na forma de um susto, apenas um simples movimento.


Decidi expandir essa ideia e comecei a procurar alguns bons vídeos de susto que pudesse usar. Isso me levou ao AtmosFx, eles têm alguns vídeos realmente legais do Unliving Portrait que custam apenas US $ 7,99 cada. Eles eram perfeitos para o que eu tinha em mente e me permitiram ter mais de um vídeo de susto de salto que eu poderia selecionar manualmente ou executar cada um aleatoriamente.

Aqui está um vídeo do projeto concluído.


Eu não queria escrever o código PIR do zero, então pesquiso na web por exemplos de acesso ao PIR com Python. Encontrei um antigo artigo da Arc Software que demonstrou um projeto semelhante.

O código que estou apresentando é principalmente do exemplo deles, mas fiz várias modificações para atender às minhas necessidades.

ETAPA 1:construir a estrutura do LCD

Depois de desmontar o monitor LCD e remover o painel LCD e os componentes eletrônicos, medi o tamanho exato da tela 17 X 11, na orientação retrato.

Usei esta ferramenta online para descobrir como medir os cortes da minha moldura para caber no painel LCD.

Construí uma moldura de madeira usando madeira de 1 ″ x 2 ″ que teria uma dimensão interna de 17 ″ x 11 ″, que acomodaria o LCD. Cortei 4 peças que, quando enquadradas juntas, teriam o tamanho exato do meu LCD e montei o LCD na moldura e alinhei o LCD com a moldura do LCD. O porta-retratos se conecta ao quadro do LCD e deixa todos os componentes eletrônicos acessíveis na parte de trás.

Depois de tingir o porta-retratos e deixá-lo secar, usei um pregador de pregos para prender o porta-retratos ao LCD.


Moldura LCD montada

Em seguida, montei o Raspberry Pi usando um pequeno suporte da Thingiverse.com (montagem lateral Pi) que imprimi com minha impressora 3D.

Usei suportes de espelho para fixar o LCD no lugar para evitar que se mova e mantenha-o alinhado com a frente do porta-retratos contra o porta-retratos.

A etapa final da montagem foi perfurar um todo para o sensor PIR e anexá-lo ao cabeçalho GPIO do Pi. O PIR é bem simples, ele tem um pino de aquecimento, aterramento e sensor.

ETAPA 2:imagens, vídeos e código

Usei três dos vídeos do Unliving Portrait do AtmosFX em meu projeto.

O primeiro obstáculo era fazer com que o vídeo fosse reproduzido quando o movimento fosse detectado, não apenas em loop constante na tela. Eu poderia carregar o vídeo e, em seguida, pausá-lo no primeiro quadro e, em seguida, quando houver movimento, fazer com que ele continue a reprodução e, quando terminar, reinicie e comece tudo de novo.

Seria mais simples exibir uma imagem estática do primeiro quadro e, em seguida, quando o movimento for detectado, acione o OMXPlayer para reproduzir o arquivo de vídeo apropriado. A vantagem disso é que quando o OMXPlayer saiu, o carregado ainda estaria no framebuffer e na tela.

Para exibir a imagem inicial, usei o Linux FBI (framebuffer imageviewer).

O reprodutor usado é o OMXPlayer e, embora suporte a pausa, não há nenhum comando de linha de comando que eu pudesse chamar em Python para pausar e reproduzir sem implementar algo como DBuscontrol, o que complicaria demais o projeto.

Estrutura da pasta:

A estrutura de pastas abaixo corresponde aos caminhos no script para acessar as imagens e vídeos. O caminho pode ser alterado, desde que os caminhos nos scripts sejam atualizados para corresponder.


Estrutura de pasta necessária para corresponder aos caminhos de script

Imagens:

Então, para cada vídeo, carreguei no VLC e fiz uma captura de tela do primeiro quadro na mesma resolução em que o vídeo estava, de modo que eles se sobrepusessem perfeitamente à tela com o vídeo quando fosse reproduzido .

Os três vídeos eram de um homem, uma mulher e uma criança, então peguei uma tampa de tela de cada um e os nomeei MaleStart.png, FemaleStart.png e ChildStart.png. Eu criei uma pasta no meu projeto de Halloween chamada ScareMedia e carreguei as 3 fotos.

Vídeos:

Em seguida, nomeei cada vídeo como MaleScare.mp4, FemaleScare.mp4 e ChildScare.mp4 e carreguei-os para a pasta ScareMedia.

Código:

Existem 2 scripts necessários para automatizar os vídeos de detecção de movimento.

pirDetect.py

#! / usr / bin / python
importar RPi.GPIO como GPIO
importar tempo
importar os
detector de classe (objeto):
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 (“pino GPIO {0} é {1}”. formato (self.sensor, “HIGH” se self. currState else “LOW”))
def subscribe (self, callBack):
self.callBacks.append (callBack)
def callBack (self, state):
para fn em self.callBacks:
fn (estado)
def start (self):
try:
self.read ()
self.printState ()
enquanto True:
self.read ()
if self.currState! =self.prevState:
self.printState ()
self.callBack (self.currState)
time.sleep (.1)
# Uma vez que o fbi não restaura o console corretamente quando Quando o aplicativo é encerrado, fazemos uma pequena limpeza e tratamos do evento KeyboardInterrupt.
exceto (KeyboardInterrupt, SystemExit):
os.system (‘stty sane’)

scare.py

#! / usr / bin / python
import subprocesso como sp
import time
import os
from pirDetect import *
import sys
video =[“ omxplayer ”,“ nome do arquivo ”,“ -o ”,“ ambos ”,“ –win ”,“ 0 0 1280 720 ”,“ modo de aspecto ”,“ preencher ”,“ –no-osd ”,“ –orientação ” , “180”, “- vol”, “-600”]
scareFile =“/home/pi/Projects/Halloween/ScareMedia/{0}ScareV.mp4”.format(sys.argv[1])
imprimir (scareFile)
def onMotion (currState):
if currState:
vídeo [1] =scareFile
subVideo =sp.Popen (vídeo)
enquanto subVideo.poll () é Nenhum:
time.sleep (.1)
def showImage ():
os.system (“sudo fbi -T 1 -d / dev / fb0 -noverbose -once /home/pi/Projects/Halloween/ScareMedia/{0}Start.png ”.format (
sys.argv [1]))
showImage ()
objDetect =detector (7)
objDetect.subscribe (onMotion)
objDetect.start ()
os.system (“sudo killall -9 fbi”)

Juntando tudo:

O script de susto pode receber um único parâmetro com a sequência de vídeo que você deseja reproduzir. Mais tarde, vou automatizar isso para jogar qualquer um dos três aleatoriamente.

Há também uma modificação para adicionar uma câmera Pi e fazer um vídeo de 5 segundos da pessoa ativando o movimento e salvá-lo no Pi cada vez que um movimento for detectado. (Ainda não implementado).







Leia mais detalhes:Retrato possesso - Atualizado

Processo de manufatura

  1. Mesa (visualização em retrato)
  2. Armação de óculos
  3. Tela de cristal líquido (LCD)
  4. CDS:telas LCD transparentes 3D
  5. Exposição:A Tela Primária
  6. Animação de LCD e jogos
  7. Amigo do AI LCD!
  8. Estação meteorológica Arduino
  9. Dodge The Defs!
  10. Despertador simples com DS1302 RTC