подобное предложение, когда датчики движения PIR не распознают с помощью Raspberry Pi

#python #python-3.x #raspberry-pi3

#python #python-3.x #raspberry-pi3

Вопрос:

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

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

 ''' 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 ...") на. Если вы можете добавить a print("No motion detected") , когда датчики не активированы, это было бы очень полезно.

Ответ №1:

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