🐝

ESP32 + 人感センサ(AM312 Mini PIR)

2023/05/22に公開



はじめに

この記事では人感センサ(AM312 Mini PIR)をESP32開発ボードに接続し、Pythonプログラムにより人が動いたことを検知する方法について記述しています。

In English

This article describes how to use passive-infla-red sensor, AM312 mini, connected to ESP32 development board in Japanese.

人感センサ(AM312 Mini PIR)とは

altAM312
人感センサ(AM312mini)の例

  • Passive InfreRed sensor
  • 人が発する赤外線を検出し、ON信号を出力するセンサ。
  • センサの近くに人が居ても、動かなければセンサは反応しない。
  • 今回使用するAM312 miniは感度やディレー時間の調整ができないが、調整できるものも市販されている。
  • 対象物を検出すると出力がhighとなり、一定時間経過するとlowとなる。
  • 検出距離は3mから5m程度(条件により異なる)。
  • 人感センサのSignal(OUT)がHighかLowかを見ればセンサが反応しているかどうかが分かる。
  • 人感センサが接続されたGPIOポートをデジタル入力(Din)にする。
  • GPIOポートの状態を一定時間毎に読み込む。

準備

誤結線による事故からESP32開発ボードを守るため、本体からUSBケーブルを引き抜く。

用意するもの

  • 人感センサ(AM312 Mini PIR)
  • リード線赤、黒、白色各1本

結線

人感センサにはVin、Out、GNDの3つのピンがあります。

  • Vinは3.3Vに赤色リード線で接続して電源を供給します。
  • GNDは開発ボードのGNDに黒色リード線で接続します。
  • Out(信号)は白色のリード線でGPIO14に接続します。

3.3VとGNDを逆に繋ぐとセンサが破損する可能性があるので注意して下さい。
下の写真に接続例を示しますので、結線がよく分からない場合参照して下さい。

alt結線例
結線例

サンプルプログラム1

人感センサのプログラムはスイッチのON/OFFを調べるプログラムと同じです。
1秒毎に人感センサが反応しているかどうかを調べる。
反応していれは1と表示され、反応していなければ0と表示される。

altpri1.py

コピペ用 pir1.py
pir1.py
# PIR sensor (AM312)
# May 21th 2023

from machine import Pin
from time import sleep

# PIR sensor is connected to GPIO14
PIR = 14

# Make instance
pir = Pin(PIR, Pin.IN)

while True:
    print(pir.value())
    sleep(1)



サンプルプログラム2

サンプルプログラム1に追加して、人感センサが反応すると圧電スピーカからPWMでビープ音を出す。
PWMについてはこちらの記事を参照して下さい。

altpri2.py

コピペ用 pir2.py
pir2.py
# PIR sensor (AM312)
# Beep if the sensor is active
# May 21th 2023

from machine import Pin, PWM
from time import sleep

# PIR sensor is connected to GPIO27
PIR = 14

# Speaker is connected to GPIO26 pin
SPEAKER_PIN = 26

# Frequency
F = 440

# Set duty 50%
DUTY = int(70 / 100 * 65535)

# Make instance
pir = Pin(PIR, Pin.IN)
speaker = PWM(Pin(SPEAKER_PIN))

try:
    while True:
        status = pir.value()
        print(status)
        
        if status == 1:
            # Play sound
            speaker.duty_u16(DUTY)
            speaker.freq(F)
            sleep(0.1)
            speaker.duty_u16(0)
            
        sleep(1)


except KeyboardInterrupt:
    speaker.duty_u16(0)



演習問題

  1. 1秒毎に人感センサを調べ、3回以上連続して反応すると、ビープ音を3秒鳴らすプログラムを作成して下さい。(ファイル名 pir-ex1.py)

  2. 上のプログラムに追加して、PIRセンサが3回以上連続して反応すると、ビープ音を鳴らし、LINE Notifyに通知を送るプログラムを作成して下さい。(ファイル名:pir-ex2.py)

Discussion