注釈

こんにちは、SunFounder Raspberry Pi & Arduino & ESP32 Enthusiast Community on Facebookへようこそ!他の愛好家と一緒に、Raspberry Pi、Arduino、ESP32の世界により深く入り込みましょう。

参加する理由

  • 専門家サポート: 購入後の問題や技術的な課題を、コミュニティと私たちのチームの助けを借りて解決します。

  • 学習と共有: ヒントやチュートリアルを交換して、スキルを向上させましょう。

  • 限定プレビュー: 新製品の発表や先行プレビューに早期アクセスできます。

  • 特別割引: 最新製品を特別割引でお楽しみいただけます。

  • 季節限定キャンペーンとプレゼント: プレゼント企画やホリデーキャンペーンに参加しましょう。

👉 一緒に発見し、創造する準備はできましたか? [こちら] をクリックして、今すぐ参加しましょう!

2.7 PIRセンサー

はじめに

Passive Infrared(PIR)センサーは、人や動物から放射される赤外線を検知するモーション検出デバイスです。このプロジェクトでは、PIRセンサーを使用して動きを検出する方法を学びます。


必要なもの

このプロジェクトに必要なコンポーネントは以下のとおりです。

COMPONENT INTRODUCTION

PURCHASE LINK

PIRモーションセンサーモジュール

購入

ジャンパーワイヤー

購入

Fusion HAT+

-

Raspberry Pi

-


回路図

以下は、このプロジェクトの回路図です。

../_images/2.2.6_sch.png

配線図

以下の図を参考にして回路を組み立ててください。

../_images/2.2.6_bb.png

回路図に従って、RGB LEDとPIRセンサーが正しいGPIOピンに接続されていることを確認してください。

注釈

PIRモジュール上の2つの可変抵抗を調整して、感度と検出距離を最適化してください。最良の結果を得るには、両方を反時計回りに回して最大設定にしてください。

../_images/PIR_TTE.png

サンプルの実行

このチュートリアルで使用するすべてのサンプルコードは ai-lab-kit ディレクトリに含まれています。 以下の手順に従ってサンプルを実行してください。

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コードです。

#!/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. インポート:

    from fusion_hat.pin import Pin, Mode, Pull
    from signal import pause  # Import pause function from signal module
    

    このスクリプトでは、PIRセンサーを制御するために fusion_hat ライブラリを使用し、プログラムの待機と終了処理のために signal モジュールを使用します。

  2. 初期化:

    pir = Pin(17, mode=Mode.IN, pull=Pull.DOWN)
    

    この行では、PIRセンサーをGPIO17に初期化し、内部プルダウン抵抗を有効にしています。

  3. メインループ:

    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. 音によるフィードバック: 動きが検出されたときにブザーを鳴らすようにできます。

    from fusion_hat import Buzzer
    buzzer = Buzzer(Pin(22))
    if pir.value() == 1:
       buzzer.on()
    else:
       buzzer.off()
    
  2. データログ記録: 動きの検出イベントをタイムスタンプ付きでファイルに保存し、あとで分析できるようにします。

    with open("motion_log.txt", "a") as log_file:
       log_file.write(f"Motion detected at {time.time():.3f}\n")
    

まとめ

このプロジェクトでは、PIRセンサーの使い方を学びました。モーション検出制御の基本を理解することで、このプロジェクトをセキュリティシステム、自動照明、インタラクティブデバイスなど、より高度なアプリケーションへ発展させることができます。PIRセンサーは汎用性が高く扱いやすいため、DIYから実務用途まで幅広いプロジェクトで活用できる優れたコンポーネントです。