注釈

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

参加する理由

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

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

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

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

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

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

4.5 Welcome

はじめに

コンビニエンスストアの自動ドアが、人が近づくとチャイムとともに開くのを見たことはありませんか? このプロジェクトでは、その仕組みを小規模に再現します。PIR センサー、サーボモーター、LED、ブザーを使って、ミニチュアの「自動ドア」システムを作成します。動きを検出すると、システムは LED を点灯し、サーボでドアを「開け」、さらにブザーで歓迎音を鳴らします。


必要なもの

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

COMPONENT INTRODUCTION

PURCHASE LINK

ブレッドボード

購入

ジャンパーワイヤー

購入

抵抗器

購入

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

購入

サーボ

購入

ブザー

購入

トランジスタ

購入

Fusion HAT+

-

Raspberry Pi

-


回路図

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

../_images/4.1.5_sch.png

配線図

以下の配線図に従って回路を組み立ててください。

../_images/4.1.5_bb.png

注釈

最適な感度と検出範囲を得るために、PIR センサーモジュール上の可変抵抗を調整してください。最適な動作のため、両方の可変抵抗を反時計回りいっぱいまで回してください。

../_images/PIR_TTE.png

サンプルの実行

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

cd ~/ai-lab-kit/python/
sudo python3 4.5_Welcome.py

コード

以下は、このプロジェクトで使用する Python スクリプトです。

from fusion_hat.pin import Pin, Mode, Pull
from fusion_hat.servo import Servo
from fusion_hat.modules import Buzzer
from fusion_hat.pwm import PWM
import time

# GPIO pin setup
ledPin = Pin(17, Pin.OUT)

# Initialize a PIR Module object on GPIO pin 17
pirPin = Pin(22, mode=Mode.IN, pull=Pull.DOWN)

buzPin = Buzzer(PWM('P0'))

# Initialize servo with custom pulse widths
servoPin = Servo('P4')

# Musical tune for buzzer, with notes and durations
tune = [('C#4', 0.2), ('D4', 0.2), (None, 0.2),
      ('Eb4', 0.2), ('E4', 0.2), (None, 0.6),
      ('F#4', 0.2), ('G4', 0.2), (None, 0.6),
      ('Eb4', 0.2), ('E4', 0.2), (None, 0.2),
      ('F#4', 0.2), ('G4', 0.2), (None, 0.2),
      ('C4', 0.2), ('B4', 0.2), (None, 0.2),
      ('F#4', 0.2), ('G4', 0.2), (None, 0.2),
      ('B4', 0.2), ('Bb4', 0.5), (None, 0.6),
      ('A4', 0.2), ('G4', 0.2), ('E4', 0.2),
      ('D4', 0.2), ('E4', 0.2)]

def setAngle(angle):
   """
   Move the servo to a specified angle.
   :param angle: Angle in degrees (0-180).
   """
   servoPin.angle(angle)       # Set servo position
   time.sleep(0.001)           # Short delay for servo movement

def doorbell():
   """
   Play a musical tune using the buzzer.
   """
   for note, duration in tune:
      buzPin.play(note,float(duration))       # Play the note
   buzPin.off()               # Stop buzzer after playing the tune

def closedoor():
   # Turn off LED and move servo to close door
   ledPin.off()
   for i in range(180, -1, -1):
      setAngle(i)             # Move servo from 180 to 0 degrees
      time.sleep(0.001)       # Short delay for smooth movement
   time.sleep(1)               # Wait after closing door

def opendoor():
   # Turn on LED, open door (move servo), play tune, close door
   ledPin.on()
   for i in range(0, 181):
      setAngle(i)             # Move servo from 0 to 180 degrees
      time.sleep(0.001)       # Short delay for smooth movement
   time.sleep(1)               # Wait before playing the tune
   doorbell()                  # Play the doorbell tune
   closedoor()                 # Close the door after the tune

def loop():
   # Main loop to check for motion and operate door
   while True:
      if pirPin.value()==1:
            opendoor()               # Open door if motion detected
      time.sleep(0.1)              # Short delay in loop

try:
   loop()
except KeyboardInterrupt:
   # Clean up GPIO on user interrupt (e.g., Ctrl+C)
   buzPin.off()
   ledPin.off()

この Python スクリプトは、PIR モーションセンサー、サーボモーター、LED、ブザーを組み合わせて、自動歓迎システムを作成します。実行すると、次のように動作します。

  1. 動きの検出: GPIO22 に接続された PIR モーションセンサーが動きを検出します。

  2. ドアの自動動作: 動きが検出されると、次の動作が実行されます。

    • サーボモーター(PWM 4)が 0° から 180° まで動いてドアを開きます。

    • LED(GPIO17)が点灯します。

    • ブザー(PWM 0)で歓迎音が鳴ります。

    • その後、サーボモーターが 180° から 0° に戻ってドアを閉じます。

    • LED が消灯します。

  3. 継続的な監視: システムは常に動きを監視し、動きが検出されるたびに上記の動作を繰り返します。

  4. 安全な終了: Ctrl+C を押すと、ブザーと LED をオフにしてスクリプトを安全に終了します。


コードの解説

  1. 動きの検出: PIR センサーが動きを検出し、システムを動作させます。

  2. サーボ制御: サーボモーターは 0° から 180° まで動いてドアを開き、その後元に戻ってドアを閉じます。

  3. ブザーのメロディ: Buzzer を使って歓迎メロディを再生します。

  4. リセット: チャイム再生後、システムはドアを閉じて LED を消灯し、次の検出に備えます。


トラブルシューティング

  1. 動きが検出されない:

    • 原因: PIR センサーの配線ミス、または周囲環境による干渉。

    • 対処方法:

      • PIR センサーが GPIO22、電源、GND に正しく接続されていることを確認してください。

      • 必要に応じて、センサーの感度や遅延時間の可変抵抗を調整してください。

  2. サーボが動かない:

    • 原因: サーボ設定の誤り、または電源供給の問題。

    • 対処方法:

      • サーボが P4 に接続され、正しく給電されていることを確認してください。

  3. チャイムが鳴らない:

    • 原因: ブザー設定の誤り、またはメロディデータの形式が正しくない。

    • 対処方法:

      • ブザーが P0 に接続されていることを確認してください。

      • tune リストに有効な音階と時間の組が含まれていることを確認してください。

  4. LED が点灯しない:

    • 原因: LED の配線、または GPIO 設定の問題。

    • 対処方法: LED が適切な抵抗を介して GPIO17 に接続されていることを確認してください。


拡張アイデア

  1. チャイムの変更: より多くのメロディを追加したり、イベントごとに異なるチャイムを選べるようにします。

  2. 時間帯による制御: 特定の時間帯(たとえば夜間)にはシステムを無効化します。

    from datetime import datetime
    if 8 <= datetime.now().hour < 22:  # Operate only between 8 AM and 10 PM
        opendoor()
    
  3. データログ記録: 動き検出のイベントと時刻をファイルに保存して分析できるようにします。

    with open("motion_log.txt", "a") as log_file:
        log_file.write(f"{time.strftime('%Y-%m-%d %H:%M:%S')} - Motion detected\n")
    
  4. 音声によるあいさつ: ブザーのチャイムの代わりに、スピーカーを使って録音済みの音声メッセージを再生します。


まとめ

このプロジェクトでは、自動ドアの仕組みを楽しく学べる形で再現しました。動き検出、サーボ制御、音の出力といった基本要素を扱うため、IoT や自動化プロジェクトの入門として最適です。リモート通知やクラウド連携などの機能を追加して、リアルタイム監視システムへ発展させてみてください。