注釈
こんにちは、SunFounder Raspberry Pi & Arduino & ESP32 Enthusiast Community on Facebookへようこそ!他の愛好家と一緒に、Raspberry Pi、Arduino、ESP32の世界により深く入り込みましょう。
参加する理由
専門家サポート: 購入後の問題や技術的な課題を、コミュニティと私たちのチームの助けを借りて解決します。
学習と共有: ヒントやチュートリアルを交換して、スキルを向上させましょう。
限定プレビュー: 新製品の発表や先行プレビューに早期アクセスできます。
特別割引: 最新製品を特別割引でお楽しみいただけます。
季節限定キャンペーンとプレゼント: プレゼント企画やホリデーキャンペーンに参加しましょう。
👉 一緒に発見し、創造する準備はできましたか? [こちら] をクリックして、今すぐ参加しましょう!
2.7 PIRセンサー
はじめに
Passive Infrared(PIR)センサーは、人や動物から放射される赤外線を検知するモーション検出デバイスです。このプロジェクトでは、PIRセンサーを使用して動きを検出する方法を学びます。
必要なもの
このプロジェクトに必要なコンポーネントは以下のとおりです。
COMPONENT INTRODUCTION |
PURCHASE LINK |
|---|---|
- |
|
Raspberry Pi |
- |
回路図
以下は、このプロジェクトの回路図です。
配線図
以下の図を参考にして回路を組み立ててください。
回路図に従って、RGB LEDとPIRセンサーが正しいGPIOピンに接続されていることを確認してください。
注釈
PIRモジュール上の2つの可変抵抗を調整して、感度と検出距離を最適化してください。最良の結果を得るには、両方を反時計回りに回して最大設定にしてください。
サンプルの実行
このチュートリアルで使用するすべてのサンプルコードは ai-lab-kit ディレクトリに含まれています。
以下の手順に従ってサンプルを実行してください。
cd ~/ai-lab-kit/python/
sudo python3 2.7_PIR.py
このPythonスクリプトは、PIR(Passive Infrared)モーションセンサーを使用して動きを監視します。実行すると、次のように動作します。
動きが検出された場合: コンソールに
"Detected Barrier!"と表示されます。動きが検出されない場合: コンソールに
"No Barrier"と表示されます。プログラムは継続的に動作し、モーションイベントを待機します。
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
コードの解説
インポート:
from fusion_hat.pin import Pin, Mode, Pull from signal import pause # Import pause function from signal module
このスクリプトでは、PIRセンサーを制御するために
fusion_hatライブラリを使用し、プログラムの待機と終了処理のためにsignalモジュールを使用します。初期化:
pir = Pin(17, mode=Mode.IN, pull=Pull.DOWN)
この行では、PIRセンサーをGPIO17に初期化し、内部プルダウン抵抗を有効にしています。
メインループ:
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"というメッセージを表示します。
トラブルシューティング
動きが検出されない:
原因: PIRセンサーの配線または設定が正しくない可能性があります。
対処方法:
PIRセンサーがGPIO17、電源、GNDに正しく接続されていることを確認してください。
必要に応じて、センサーの感度および遅延時間の可変抵抗を調整してください。
拡張アイデア
音によるフィードバック: 動きが検出されたときにブザーを鳴らすようにできます。
from fusion_hat import Buzzer buzzer = Buzzer(Pin(22)) if pir.value() == 1: buzzer.on() else: buzzer.off()
データログ記録: 動きの検出イベントをタイムスタンプ付きでファイルに保存し、あとで分析できるようにします。
with open("motion_log.txt", "a") as log_file: log_file.write(f"Motion detected at {time.time():.3f}\n")
まとめ
このプロジェクトでは、PIRセンサーの使い方を学びました。モーション検出制御の基本を理解することで、このプロジェクトをセキュリティシステム、自動照明、インタラクティブデバイスなど、より高度なアプリケーションへ発展させることができます。PIRセンサーは汎用性が高く扱いやすいため、DIYから実務用途まで幅広いプロジェクトで活用できる優れたコンポーネントです。