2016-10-07 14 views
0

私は、3つのPIRモーションセンサーのどれが「動きを感知している」かによって、異なるビデオループを表示するRaspberry Piプロジェクトに取り組んでいます。センサーが何も検知していないときは、追加のビデオを表示したい。したがって、すべての中には、左、中、右、非アクティブの4つのビデオがあります。PIRモーションセンサーがラズベリーパイを使用して検知しない場合のelse-like節

Python 3.4.2を使用して、センサがアクティブになったときにビデオを再生することができましたが、センサがアクティブでないときにビデオを再生するのが難しくなりました。私はそれが単純な 'else'のような節であると思ったが、明らかにそうではない。私はいろいろな方法を試みましたが、アイデアがなくなりました。誰かが「動きの検出なし」のコードをコードに戻すのを手助けできますか?コードは以下の通りである:私は単純化のためprint("Motion detected ...")とビデオの部品を交換してきました

''' 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("No motion detected")を追加することができれば、非常に役に立ちます。

答えて

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コマンドは、呼び出したい機能に置き換えることができます。

関連する問題