PIR运动传感器无法使用Raspberry Pi进行传感时的其他条款

时间:2016-10-07 14:45:41

标签: python python-3.x raspberry-pi3

我正在开发一个Raspberry Pi项目,该项目根据3个PIR运动传感器中的哪个传感器显示不同的视频循环"感应运动"。当没有传感器感应任何东西时,我想显示一个额外的视频。所以总共有4个视频:左,中,右,不活跃。

使用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"),那将非常有用。

1 个答案:

答案 0 :(得分:0)

我设法解决了这个问题,并且认为我会发布它以防有人想要使用它。请注意,代码已经发生了很大的变化。它仍然使用非常低的CPU。唯一的区别是这个代码在拾取动作时效率更高,但代价是错误的读数更高。可以通过调节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 命令可以替换为您要调用的任何函数。