5.5 人の動きを検出する

受動赤外線センサー(PIRセンサー)は、視野内の物体から放出される赤外線(IR)光を測定する一般的なセンサーです。 簡単に言えば、体から放出される赤外線を受け取り、人やその他の動物の動きを検出します。 より具体的には、誰かがあなたの部屋に入ったことをメインコントロールボードに伝えます。

必要な部品

このプロジェクトには、以下のコンポーネントが必要です。

キット全体を購入することは非常に便利です。こちらがリンクです:

名前

このキットのアイテム

リンク

ESP32 Starter Kit

320+

ESP32 Starter Kit

以下のリンクから個別に購入することもできます。

コンポーネントの紹介

購入リンク

ESP32 WROOM 32E

BUY

ESP32カメラ拡張ボード

-

ブレッドボード

BUY

ジャンパーワイヤ

BUY

抵抗器

BUY

LED

BUY

PIR動きセンサーモジュール

BUY

利用可能なピン

  • 利用可能なピン

    このプロジェクトのESP32ボードに利用可能なピンのリストです。

    入力用

    IO13, IO14, IO27, IO26, IO25, IO33, I35, I34, I39, I36, IO4, IO18, IO19, IO21, IO22, IO23

    出力用

    IO13, IO12, IO14, IO27, IO26, IO25, IO33, IO32, IO15, IO2, IO0, IO4, IO5, IO18, IO19, IO21, IO22, IO23

注釈

このプロジェクトでは、内部で1Kのプルダウン抵抗器に接続されているため、IO32は 入力ピンとして使用できません。デフォルトの値は0に設定されています。

  • ストラッピングピン(入力)

    ストラッピングピンは、デバイスの起動時に特定のブートモードを決定するために使用される特別なセットのピンです (つまり、電源オンリセット)。

    ストラッピングピン

    IO5, IO0, IO2, IO12, IO15

    一般的に、 入力ピンとして使用することは推奨されません。これらのピンを使用したい場合は、ブートプロセスへの潜在的な影響を考慮してください。詳細については、 ストラッピングピン セクションを参照してください。

回路図

../../_images/circuit_5.5_pir.png

PIRモジュールが動きを検出すると、IO14がハイになり、LEDが点灯します。動きが検出されない場合、IO14はローになり、LEDは消灯します。

注釈

PIRモジュールには感度を調整するポテンショメーターと検出距離を調整するポテンショメーターが2つあります。PIRモジュールをより良く動作させるためには、両方を反時計回りに最後まで回す必要があります。

../../_images/PIR_TTE.png

配線図

../../_images/5.5_pir_bb.png

コード

注釈

  • esp32-starter-kit-main\micropython\codes パスにある 5.5_detect_human_movement.py ファイルを開くか、コードをThonnyにコピー&ペーストしてください。次に、「現在のスクリプトを実行」をクリックするか、F5キーを押して実行します。

  • 右下のコーナーで「MicroPython (ESP32).COMxx」インタープリタを選択してください。

import machine
import time

# Define pins
PIR_PIN = 14    # PIR sensor
LED_PIN = 26    # LED

# Initialize the PIR sensor pin as an input pin
pir_sensor = machine.Pin(PIR_PIN, machine.Pin.IN, machine.Pin.PULL_DOWN)
# Initialize the LED pin as an output pin
led = machine.Pin(LED_PIN, machine.Pin.OUT)

# Global flag to indicate motion detected
motion_detected_flag = False

# Function to handle the interrupt
def motion_detected(pin):
    global motion_detected_flag
    print("Motion detected!")
    motion_detected_flag = True

# Attach the interrupt to the PIR sensor pin
pir_sensor.irq(trigger=machine.Pin.IRQ_RISING, handler=motion_detected)

# Main loop
while True:
    if motion_detected_flag:
        led.value(1)  # Turn on the LED
        time.sleep(5)  # Keep the LED on for 5 seconds
        led.value(0)  # Turn off the LED
        motion_detected_flag = False

スクリプトが実行されると、PIRモジュールが誰かを検出するとLEDが5秒間点灯し、その後消灯します。

注釈

PIRモジュールには2つのポテンショメータがあります:1つは感度を、もう1つは検出距離を調整します。PIRモジュールをより良く機能させるためには、両方を反時計回りに最後まで回す必要があります。

../../_images/PIR_TTE.png

どのように動作するのか?

このコードはPIRセンサーとLEDを使用したシンプルな動作検出システムを設定します。動作が検出されると、LEDが5秒間点灯します。

コードの詳細は以下の通りです:

  1. 動きが検出されたときに実行される割り込みハンドラ関数を定義します:

    def motion_detected(pin):
        global motion_detected_flag
        print("Motion detected!")
        motion_detected_flag = True
    
  2. PIRセンサーピンに割り込みをアタッチし、トリガーを"rising"(つまり、ピンが低電圧から高電圧に変わるとき)に設定します:

    pir_sensor.irq(trigger=machine.Pin.IRQ_RISING, handler=motion_detected)
    

    これにより、PIRモーションセンサーに接続された pir_sensor ピンに割り込みが設定されます。

    パラメータの詳細な説明は以下の通りです:

    • trigger=machine.Pin.IRQ_RISING: このパラメータは割り込みのトリガー条件を設定します。この場合、割り込みは立ち上がりエッジでトリガーされます。立ち上がりエッジとは、ピンの電圧が低状態(0V)から高状態(ハードウェアによって異なりますが、通常は3.3Vまたは5V)に変わるときです。PIRモーションセンサーの場合、動作が検出されると、出力ピンは通常低から高になるため、立ち上がりエッジは適切なトリガー条件です。

    • handler=motion_detected: このパラメータは割り込みがトリガーされたときに実行される関数を指定します。この場合は、motion_detected 関数が割り込みハンドラとして提供されています。この関数は pir_sensor ピンで割り込み条件(立ち上がりエッジ)が検出されたときに自動的に呼び出されます。

    したがって、このコード行は、センサーによって動作が検出されるたびに、出力ピンが低状態から高状態に変わるため、motion_detected 関数を呼び出すようPIRセンサーを設定します。

  3. メインループでは、 motion_detected_flagTrue に設定されている場合、LEDが5秒間点灯してから消灯します。次の動作イベントを待つためにフラグは再び False にリセットされます。

    while True:
        if motion_detected_flag:
            led.value(1)  # Turn on the LED
            time.sleep(5)  # Keep the LED on for 5 seconds
            led.value(0)  # Turn off the LED
            motion_detected_flag = False