2015/08/06

PIR on Raspberry Pi

1. Introduction

生活中有個應用是, 大廳、走廊、或是電梯裡
燈是暗的, 感應到有人經過時燈就亮了
我們可以用 PIR 做到同樣的應用

2. Connecting to a PIR

PIR 通常有 3 根pin, 分別是 VDD, GND, 以及 Signal out

我手上這顆 PIR 型號是 Panasonic PIR AMN44122:


然後如下圖這樣接, 其中  PIR 的 OUT 接到 RPi 的某根 GPIO 上來讀取狀態, 這邊選的是板子編號 12 的 pin 腳
另外 LED 接的 GPIO 是板子編號 16 的 pin 腳



3. coding

import RPi.GPIO as GPIO
import time

GPIO.setmode(GPIO.BOARD)
GPIO.setwarnings(False)

pir = 12
led = 16

GPIO.setup(pir, GPIO.IN)
GPIO.setup(led, GPIO.OUT)

prev_pir_state = 0
count_down = 0;

GPIO.output(led, 0)

try:
 while True:
  current_pir_state = GPIO.input(pir)
  if current_pir_state == True:
   if prev_pir_state == False:
    GPIO.output(led, 1)
   count_down = 3
  else:
   if count_down > 0:
    count_down = count_down - 1
    if count_down == 0:
     GPIO.output(led, 0)

  prev_pir_state = current_pir_state

  time.sleep(1)
except KeyboardInterrupt:
 GPIO.cleanup()



程式邏輯是, 如果從 PIR 讀到的值由 0 變 1, 就點亮 LED, 並啟動 count down
當 PIR 變 0, 就等個 3 秒之後再把 LED 關掉
中間如果 PIR 又變回 1 了, 那麼 count down 就重新算
最後如果用Ctrl-C離開程式, 就把 GPIO 全關