2016-10-07 1 views
0

Я работаю над проектом Raspberry Pi, который отображает другую видео-петлю, в зависимости от того, какой из 3 датчиков движения PIR «воспринимает движение». Когда никакие датчики ничего не чувствуют, я хочу отобразить дополнительное видео. Итак, у всех есть 4 видео: левый, средний, правый, неактивный.else-like clause, когда датчики движения PIR не воспринимают с помощью малины Pi

Использование Python 3.4.2, мне удалось получить видео, воспроизводящееся при активации датчиков, но у меня возникают трудности с воспроизведением видео, когда ни один из датчиков не активен. Я думал, что это будет простая «еще» статья, но, видимо, это не так. Я пробовал много разных методов, но у меня кончились идеи. Может ли кто-нибудь помочь мне интегрировать «не обнаруженное движение» в код? Код, как показано ниже:

''' Import required stuff ''' 
import RPi.GPIO as GPIO  #GPIO 
import time     #for delay 
import subprocess   #for omxplayer 

''' GPIO setup ''' 
GPIO.setmode(GPIO.BCM) #GPIO setmode 
PIR_PIN_L = 23   #define left pin 
PIR_PIN_R = 24   #define right pin 
PIR_PIN_M = 25   #define middle pin 

GPIO.setup(PIR_PIN_L, GPIO.IN) #set left pin 
GPIO.setup(PIR_PIN_R, GPIO.IN) #set right pin 
GPIO.setup(PIR_PIN_M, GPIO.IN) #set middle pin 

'''Definitions ''' 
def MOTIONL(PIR_PIN_L):     #define motion on left 
    print("Motion Detected on Left!") #output if motion detected 

def MOTIONR(PIR_PIN_R):     #define motion on right 
    print("Motion Detected on Right!") #output if motion detected 

def MOTIONM(PIR_PIN_M):     #define motion in middle 
    print("Motion Detected at Middle!") #output if motion detected 

''' Initiation ''' 
print("PIR Module Test (CTRL+C to exit)") 
time.sleep(4) 
print("Ready") 

''' Sensing ''' 
try: 
    GPIO.add_event_detect(PIR_PIN_L, GPIO.RISING, callback=MOTIONL) 
    GPIO.add_event_detect(PIR_PIN_M, GPIO.RISING, callback=MOTIONM) 
    GPIO.add_event_detect(PIR_PIN_R, GPIO.RISING, callback=MOTIONR) 

    while 1: 
     time.sleep(100) 

except KeyboardInterrupt: 
    print("Quit") 
    GPIO.cleanup() 

Я заменил части видео с print("Motion detected ...") для простоты. Если вы можете добавить print("No motion detected"), когда датчики не активированы, это будет очень полезно.

ответ

0

Мне удалось решить проблему, и я подумал, что опубликую ее на случай, если кто-то захочет ее использовать. Обратите внимание, что код был значительно изменен. Он по-прежнему использует очень низкий процессор. Единственное отличие состоит в том, что этот код более эффективен при сборе движений, но за счет более высоких ложных показаний. Это можно устранить, отрегулировав ручки на датчике PIR. Та же концепция может быть применена к приведенному выше коду.

''' Import required stuff ''' 

import RPi.GPIO as GPIO  #GPIO 
import time     #for delay 

''' GPIO setup ''' 

GPIO.setmode(GPIO.BCM) #GPIO setmode 
PIR_PIN_L = 23   #define left pin 
PIR_PIN_R = 24   #define right pin 
PIR_PIN_M = 25   #define middle pin 

GPIO.setup(PIR_PIN_L, GPIO.IN) #set left pin 
GPIO.setup(PIR_PIN_R, GPIO.IN) #set right pin 
GPIO.setup(PIR_PIN_M, GPIO.IN) #set middle pin 

'''Definitions ''' 

def MOTIONL():       #define motion on left 
    if GPIO.input(PIR_PIN_L)==1 :  #trigger condtion left being active 
       print("Motion Detected on Left") #output 
       time.sleep(3)   

def MOTIONR():       #define motion on right 
    if GPIO.input(PIR_PIN_R)==1 :  #trigger condtion right being active 
       print("Motion Detected on Right") #output 
       time.sleep(3)  

def MOTIONM():       #define motion in middle 
    if GPIO.input(PIR_PIN_M)==1 :  #trigger condtion middle being active 
       print("Motion Detected on Middle") #output 
       time.sleep(3)  
def NOMOTION() : 
    if GPIO.input(PIR_PIN_L)==0 and GPIO.input(PIR_PIN_R)==0 and  GPIO.input(PIR_PIN_M)==0 : 
    #above trigger condition is no sensor being active 
       print("No Motion Detected") #output 
       time.sleep(3)  

''' Initiation ''' 

print("PIR Module Test (CTRL+C to exit)") 
time.sleep(4) 
print("Ready") 

''' Sensing ''' 

try: 

       while 1: #calls defined functions simulatanously 
           NOMOTION() 
           MOTIONR() 
           MOTIONL() 
           MOTIONM() 

except KeyboardInterrupt: #CTRL and C will reset shell 
       print("Quit") 
       GPIO.cleanup() 

в print команды могут быть заменены на любые функции вы хотите позвонить.

Смежные вопросы