脳汁portal

アメリカ在住(だった)新米エンジニアがその日学んだIT知識を書き綴るブログ

焦電人感センサーSB612Aをラズベリーパイで使ってみた

以下の秋月で販売している焦電型赤外線センサーをラズベリーパイで使ってみました(¥600)
f:id:portaltan:20180516092309p:plain
akizukidenshi.com

仕様

  • 電源電圧:3.3V~12V(3.3VのLDOによりモジュール内部で安定化されています)
  • 最大検知距離:8m(気温等の環境条件によります)
  • 検知角度:120度
  • 検知出力保持時間:2秒~80分

ハードウェアサイ

SB612A側

画像のようにメスメスケーブルをさしていきます。
色はあわせなくていいですが、右から赤(VCC), 緑(信号出力). 黒(GND)です
f:id:portaltan:20180515182953j:plain

ラズベリーパイ

それぞれケーブルを以下のようにラズベリーパイに接続します

  • 赤:2番pin(5V)
  • 黒:6番pin(GND)
  • 緑:12番pin(GPIO 18)

f:id:portaltan:20180515183239j:plain
f:id:portaltan:20180515183307p:plain

この状態でラズパイの電源をいれるとSB612Aに5V電源が供給されます

ソフトウェアサイ

確認

まずはちゃんと動いているか確認をします

## GPIO設定
sudo echo 18 > /sys/class/gpio/export
sudo echo in > /sys/class/gpio/gpio18/direction

### 確認
## 検知していない時
cat /sys/class/gpio/gpio18/value
0

## 検知中
cat /sys/class/gpio/gpio18/value
1

LED連携

センサーが動体を検知すると31番ピン(GPIO6)にさしたLEDが光るようにします

#!/usr/bin/env python

import RPi.GPIO as GPIO

### setup
GPIO.setmode(GPIO.BCM)
GPIO.setup(18, GPIO.IN) # GPIO 18 : human detect sensor
GPIO.setup(6, GPIO.OUT) # GPIO 6: LED

# initialize
if GPIO.input(18):
  GPIO.output(6, 1)
else:
  GPIO.output(6, 0)

while True:
  GPIO.wait_for_edge(18, GPIO.BOTH)
  if GPIO.input(18):
    print "detected!"
    GPIO.output(6, 1)
  else:
    GPIO.output(6, 0)

  time.sleep(1)

GPIO.cleanup()

GPIO.wait_for_edgeは電圧がLOWからHIGH、またはその逆を検知します
引数にはピン番号とGPIO.RAISING or GPIO.FALLINGを渡すことで電圧の動きをチェックします
両方取得したいときはGPIO.BOTHでとれます
単純にLoopで毎秒チェックとかにするよりは低負荷になります

その他設定

感度

SENSと書かれたつまみを右に回すほど感度が高くなります

検知出力保持時間

DELAYと書かれたつまみを左にまわすほど保持時間が長くなります
保持時間とは、一度動体を検知した際に何秒間検知状態のままにするかという設定です