.. include:: /index.rst :start-after: start_hello_message :end-before: end_hello_message .. _py_pir: 2.7 PIRセンサー ================= **はじめに** Passive Infrared(PIR)センサーは、人や動物から放射される赤外線を検知するモーション検出デバイスです。このプロジェクトでは、PIRセンサーを使用して動きを検出する方法を学びます。 ---------------------------------------------- **必要なもの** このプロジェクトに必要なコンポーネントは以下のとおりです。 .. list-table:: :widths: 30 20 :header-rows: 1 * - COMPONENT INTRODUCTION - PURCHASE LINK * - :ref:`cpn_pir` - |link_pir_buy| * - :ref:`cpn_wires` - |link_wires_buy| * - :ref:`cpn_fusion_hat` - \- * - Raspberry Pi - \- ---------------------------------------------- **回路図** 以下は、このプロジェクトの回路図です。 .. image:: img/fzz/2.2.6_sch.png ---------------------------------------------- **配線図** 以下の図を参考にして回路を組み立ててください。 .. image:: img/fzz/2.2.6_bb.png :width: 80% :align: center 回路図に従って、RGB LEDとPIRセンサーが正しいGPIOピンに接続されていることを確認してください。 .. note:: PIRモジュール上の2つの可変抵抗を調整して、感度と検出距離を最適化してください。最良の結果を得るには、両方を反時計回りに回して最大設定にしてください。 .. image:: ../python/img/PIR_TTE.png :width: 200 :align: center ---------------------------------------------- **サンプルの実行** このチュートリアルで使用するすべてのサンプルコードは ``ai-lab-kit`` ディレクトリに含まれています。 以下の手順に従ってサンプルを実行してください。 .. raw:: html .. code-block:: shell cd ~/ai-lab-kit/python/ sudo python3 2.7_PIR.py このPythonスクリプトは、PIR(Passive Infrared)モーションセンサーを使用して動きを監視します。実行すると、次のように動作します。 1. **動きが検出された場合**: コンソールに ``"Detected Barrier!"`` と表示されます。 2. **動きが検出されない場合**: コンソールに ``"No Barrier"`` と表示されます。 3. プログラムは継続的に動作し、モーションイベントを待機します。``Ctrl+C`` を押すことで終了できます。 ---------------------------------------------- **コード** 以下は、このプロジェクトで使用するPythonコードです。 .. raw:: html .. code-block:: python #!/usr/bin/env python3 from fusion_hat.pin import Pin, Mode, Pull from signal import pause # Import pause function from signal module # Initialize a PIR Module object on GPIO pin 17 pir = Pin(17, mode=Mode.IN, pull=Pull.DOWN) def detect(): if pir.value() == 1: # Check if the PIR Module is triggered print("Detected Barrier!") else: print("No Barrier") try: pir.when_activated = detect # Set up an interrupt to detect changes in the pir sensor state pir.when_deactivated = detect # Run an event loop that waits for button events and keeps the script running print("CTRL + C to exit") pause() except KeyboardInterrupt: # Handle KeyboardInterrupt (Ctrl+C) to exit the loop gracefully pass ---------------------------------------------- **コードの解説** 1. **インポート:** .. code-block:: python from fusion_hat.pin import Pin, Mode, Pull from signal import pause # Import pause function from signal module このスクリプトでは、PIRセンサーを制御するために ``fusion_hat`` ライブラリを使用し、プログラムの待機と終了処理のために ``signal`` モジュールを使用します。 2. **初期化:** .. code-block:: python pir = Pin(17, mode=Mode.IN, pull=Pull.DOWN) この行では、PIRセンサーをGPIO17に初期化し、内部プルダウン抵抗を有効にしています。 3. **メインループ:** .. code-block:: python def detect(): if pir.value() == 1: # Check if the PIR Module is triggered print("Detected Barrier!") else: print("No Barrier") try: pir.when_activated = detect # Set up an interrupt to detect changes in the pir sensor state pir.when_deactivated = detect # Run an event loop that waits for button events and keeps the script running print("CTRL + C to exit") pause() except KeyboardInterrupt: # Handle KeyboardInterrupt (Ctrl+C) to exit the loop gracefully pass * PIRセンサーによって検出される動きを継続的に監視します。 * 動きが検出されると、``"Detected Barrier!"`` というメッセージを表示します。 * 動きが検出されない場合は、``"No Barrier"`` というメッセージを表示します。 ---------------------------------------------- **トラブルシューティング** 1. **動きが検出されない**: - **原因**: PIRセンサーの配線または設定が正しくない可能性があります。 - **対処方法**: - PIRセンサーがGPIO17、電源、GNDに正しく接続されていることを確認してください。 - 必要に応じて、センサーの感度および遅延時間の可変抵抗を調整してください。 ---------------------------------------------- **拡張アイデア** 1. **音によるフィードバック**: 動きが検出されたときにブザーを鳴らすようにできます。 .. code-block:: python from fusion_hat import Buzzer buzzer = Buzzer(Pin(22)) if pir.value() == 1: buzzer.on() else: buzzer.off() 2. **データログ記録**: 動きの検出イベントをタイムスタンプ付きでファイルに保存し、あとで分析できるようにします。 .. code-block:: python with open("motion_log.txt", "a") as log_file: log_file.write(f"Motion detected at {time.time():.3f}\n") ---------------------------------------------- **まとめ** このプロジェクトでは、PIRセンサーの使い方を学びました。モーション検出制御の基本を理解することで、このプロジェクトをセキュリティシステム、自動照明、インタラクティブデバイスなど、より高度なアプリケーションへ発展させることができます。PIRセンサーは汎用性が高く扱いやすいため、DIYから実務用途まで幅広いプロジェクトで活用できる優れたコンポーネントです。