注釈

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

参加する理由

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

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

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

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

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

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

2.6 リードスイッチ

はじめに

このプロジェクトでは、リードスイッチを磁場センサーとして使用し、LEDを制御する方法を学びます。リードスイッチは磁場によって動作する電気スイッチであり、セキュリティシステム、ドアや窓のセンサー、位置検出などで広く利用されています。本プロジェクトでは、リードスイッチの状態を検出し、2つのLEDを使って視覚的なフィードバックを行う方法を紹介します。


必要なもの

このプロジェクトを行うには、以下のコンポーネントが必要です。

COMPONENT

PURCHASE LINK

ジャンパーワイヤー

購入

リードスイッチモジュール

購入

LED

購入

抵抗器

購入

Fusion HAT+

-

Raspberry Pi

-


回路図

この回路では、リードスイッチをプルダウン抵抗付きのGPIO入力ピンに接続します。また、2つのLEDをそれぞれ別のGPIO出力ピンに電流制限抵抗を介して接続します。磁石がリードスイッチに近づくとスイッチが閉じ、LEDの状態が切り替わります。

../_images/2.2.4_sch.png

配線図

以下の手順に従って回路を組み立ててください。

  1. リードスイッチのGNDピンとVCCピンを、それぞれGNDと3.3Vに接続します。

  2. リードスイッチのD0ピンをGPIO17に接続します。

  3. LED1のカソードを220Ω抵抗を介してGPIO22に接続します。

  4. LED1のアノードをGNDに接続します。

  5. LED2のカソードを220Ω抵抗を介してGPIO27に接続します。

  6. LED2のアノードをGNDに接続します。

../_images/2.2.4_bb.png

サンプルの実行

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

cd ~/ai-lab-kit/python/
sudo python3 2.6_ReedSwitch.py

このPythonスクリプトは、リードスイッチと2つの状態表示用LEDを使った磁場検出システムを作成します。実行すると、次のように動作します。

  1. プログラムはリードスイッチの状態を継続的に監視します。

  2. 磁石が検出された場合(リードスイッチが閉じる)、LED1が消灯しLED2が点灯します。

  3. 磁石が検出されない場合(リードスイッチが開いている)、LED1が点灯しLED2が消灯します。

  4. これにより、磁場の有無を視覚的に分かりやすく表示できます。

  5. Ctrl+C を押すことでプログラムを安全に終了できます。


コード

以下のPythonコードは、リードスイッチの状態を監視し、それに応じて2つのLEDを制御します。

#!/usr/bin/env python3
from fusion_hat.pin import Pin, Mode, Pull
from time import sleep  # Import sleep for delay

# Initialize reed switch (Button) on GPIO pin 17
reed = Pin(17, mode=Mode.IN, pull=Pull.DOWN)

# Initialize LED1 connected to GPIO pin 22
led1 = Pin(22,mode=Mode.OUT)
# Initialize LED2 connected to GPIO pin 27
led2 = Pin(27,mode=Mode.OUT)

try:
    # Continuously monitor the state of the reed switch and control LEDs accordingly
    while True:
        if reed.value() == 0:  # Check if the reed switch is activated
            led1.off()  # Turn off LED1
            led2.on()   # Turn on LED2
        else:  # If the sensor is not activated
            led1.on()   # Turn on LED1
            led2.off()  # Turn off LED2

except KeyboardInterrupt:
    # Handle a keyboard interrupt (Ctrl+C) for a clean exit from the loop
    pass

コードの解説

  1. ライブラリのインポート

    fusion_hat ライブラリの Pin クラスを使用してGPIOピンを制御し、必要に応じて time.sleep を遅延処理に利用できます。

    from fusion_hat.pin import Pin, Mode, Pull
    from time import sleep  # Import sleep for delay
    
  2. リードスイッチの初期化

    リードスイッチはGPIO17に入力として設定し、スイッチが開いているときでも安定したLOW状態になるようプルダウン抵抗を使用します。

    # Initialize reed switch (Button) on GPIO pin 17
    reed = Pin(17, mode=Mode.IN, pull=Pull.DOWN)
    
  3. LEDの初期化

    2つのLEDをGPIO22とGPIO27に出力として設定し、状態表示用として使用します。

    # Initialize LED1 connected to GPIO pin 22
    led1 = Pin(22,mode=Mode.OUT)
    # Initialize LED2 connected to GPIO pin 27
    led2 = Pin(27,mode=Mode.OUT)
    
  4. メイン監視ループ

    while True ループでリードスイッチの状態を継続的に監視し、それに応じてLEDの状態を切り替えます。これにより、磁場の有無を視覚的に確認できます。

    while True:
        if reed.value() == 0:  # Check if the reed switch is activated
            led1.off()  # Turn off LED1
            led2.on()   # Turn on LED2
        else:  # If the sensor is not activated
            led1.on()   # Turn on LED1
            led2.off()  # Turn off LED2
    
  5. キーボード割り込み処理

    try-except ブロックにより、 Ctrl+C による割り込み時にもプログラムを安全に終了できます。

    except KeyboardInterrupt:
        # Handle a keyboard interrupt (Ctrl+C) for a clean exit from the loop
        pass
    

トラブルシューティング

  1. リードスイッチが磁石を検出しない

    • 原因: 磁石の向き、磁力不足、または配線の問題。

    • 対処方法: 磁石の向きを変えてみる、より強い磁石を使用する、またはすべての配線を確認してください。

  2. LEDが点灯しない

    • 原因: GPIOピンの設定ミス、LEDの極性逆接続、または電流不足。

    • 対処方法: ピン番号が正しいか確認し、LEDの極性(アノードがGPIO側)を確認し、適切な抵抗値を使用してください。

  3. 読み取りが不安定

    • 原因: 電気ノイズや、リードスイッチが開いているときの入力の浮き。

    • 対処方法: 内蔵プルダウン抵抗で通常は安定しますが、確実なGND接続を確認し、近くに電磁ノイズ源がないか確認してください。


拡張アイデア

  1. セキュリティシステム

    磁石がリードスイッチから離れたときに警報を鳴らす簡易ドア/窓セキュリティシステムを作成できます。

    # Add a buzzer for audible alarm
    from fusion_hat import Buzzer, PWM
    buzzer = Buzzer(PWM('P0'))
    
    while True:
        if reed.value() == 1:  # Door opened (magnet moved away)
            buzzer.play('C6', 0.5)  # Sound alarm
            led1.on()  # Red alert LED
        else:
            led2.on()  # Green safe LED
        sleep(0.1)
    
  2. 位置カウンター

    磁石がリードスイッチの前を通過した回数を数えることで、回転速度測定などに利用できます。

    counter = 0
    last_state = 0
    
    while True:
        current_state = reed.value()
        if last_state == 0 and current_state == 1:  # Detect rising edge
            counter += 1
            print(f"Count: {counter}")
        last_state = current_state
        sleep(0.01)  # Short delay for debouncing
    
  3. 2センサー検出

    2つのリードスイッチを使用して移動方向を検出できます。

    reed1 = Pin(17, Pin.IN, pull=Pin.PULL_DOWN)
    reed2 = Pin(18, Pin.IN, pull=Pin.PULL_DOWN)
    
    # Determine direction based on which sensor triggers first
    

まとめ

このプロジェクトでは、リードスイッチを磁場センサーとして使用し、LEDインジケーターを制御する方法を学びました。リードスイッチは信頼性が高くシンプルな部品であり、セキュリティシステム、位置検出、近接検知など多くの用途で広く利用されています。磁気検出と視覚的フィードバックを組み合わせることで、さまざまなアプリケーション向けの直感的な監視システムを構築できます。