.. 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から実務用途まで幅広いプロジェクトで活用できる優れたコンポーネントです。