注釈
こんにちは、SunFounder Raspberry Pi & Arduino & ESP32 Enthusiast Community on Facebookへようこそ!他の愛好家と一緒に、Raspberry Pi、Arduino、ESP32の世界により深く入り込みましょう。
参加する理由
専門家サポート: 購入後の問題や技術的な課題を、コミュニティと私たちのチームの助けを借りて解決します。
学習と共有: ヒントやチュートリアルを交換して、スキルを向上させましょう。
限定プレビュー: 新製品の発表や先行プレビューに早期アクセスできます。
特別割引: 最新製品を特別割引でお楽しみいただけます。
季節限定キャンペーンとプレゼント: プレゼント企画やホリデーキャンペーンに参加しましょう。
👉 一緒に発見し、創造する準備はできましたか? [こちら] をクリックして、今すぐ参加しましょう!
2.6 リードスイッチ
はじめに
このプロジェクトでは、リードスイッチを磁場センサーとして使用し、LEDを制御する方法を学びます。リードスイッチは磁場によって動作する電気スイッチであり、セキュリティシステム、ドアや窓のセンサー、位置検出などで広く利用されています。本プロジェクトでは、リードスイッチの状態を検出し、2つのLEDを使って視覚的なフィードバックを行う方法を紹介します。
必要なもの
このプロジェクトを行うには、以下のコンポーネントが必要です。
COMPONENT |
PURCHASE LINK |
|---|---|
- |
|
Raspberry Pi |
- |
回路図
この回路では、リードスイッチをプルダウン抵抗付きのGPIO入力ピンに接続します。また、2つのLEDをそれぞれ別のGPIO出力ピンに電流制限抵抗を介して接続します。磁石がリードスイッチに近づくとスイッチが閉じ、LEDの状態が切り替わります。
配線図
以下の手順に従って回路を組み立ててください。
リードスイッチのGNDピンとVCCピンを、それぞれGNDと3.3Vに接続します。
リードスイッチのD0ピンをGPIO17に接続します。
LED1のカソードを220Ω抵抗を介してGPIO22に接続します。
LED1のアノードをGNDに接続します。
LED2のカソードを220Ω抵抗を介してGPIO27に接続します。
LED2のアノードをGNDに接続します。
サンプルの実行
このチュートリアルで使用するすべてのサンプルコードは ai-lab-kit ディレクトリに含まれています。
以下の手順に従ってサンプルを実行してください。
cd ~/ai-lab-kit/python/
sudo python3 2.6_ReedSwitch.py
このPythonスクリプトは、リードスイッチと2つの状態表示用LEDを使った磁場検出システムを作成します。実行すると、次のように動作します。
プログラムはリードスイッチの状態を継続的に監視します。
磁石が検出された場合(リードスイッチが閉じる)、LED1が消灯しLED2が点灯します。
磁石が検出されない場合(リードスイッチが開いている)、LED1が点灯しLED2が消灯します。
これにより、磁場の有無を視覚的に分かりやすく表示できます。
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
コードの解説
ライブラリのインポート
fusion_hatライブラリのPinクラスを使用してGPIOピンを制御し、必要に応じてtime.sleepを遅延処理に利用できます。from fusion_hat.pin import Pin, Mode, Pull from time import sleep # Import sleep for delay
リードスイッチの初期化
リードスイッチはGPIO17に入力として設定し、スイッチが開いているときでも安定したLOW状態になるようプルダウン抵抗を使用します。
# Initialize reed switch (Button) on GPIO pin 17 reed = Pin(17, mode=Mode.IN, pull=Pull.DOWN)
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)
メイン監視ループ
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
キーボード割り込み処理
try-exceptブロックにより、Ctrl+Cによる割り込み時にもプログラムを安全に終了できます。except KeyboardInterrupt: # Handle a keyboard interrupt (Ctrl+C) for a clean exit from the loop pass
トラブルシューティング
リードスイッチが磁石を検出しない
原因: 磁石の向き、磁力不足、または配線の問題。
対処方法: 磁石の向きを変えてみる、より強い磁石を使用する、またはすべての配線を確認してください。
LEDが点灯しない
原因: GPIOピンの設定ミス、LEDの極性逆接続、または電流不足。
対処方法: ピン番号が正しいか確認し、LEDの極性(アノードがGPIO側)を確認し、適切な抵抗値を使用してください。
読み取りが不安定
原因: 電気ノイズや、リードスイッチが開いているときの入力の浮き。
対処方法: 内蔵プルダウン抵抗で通常は安定しますが、確実なGND接続を確認し、近くに電磁ノイズ源がないか確認してください。
拡張アイデア
セキュリティシステム
磁石がリードスイッチから離れたときに警報を鳴らす簡易ドア/窓セキュリティシステムを作成できます。
# 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)
位置カウンター
磁石がリードスイッチの前を通過した回数を数えることで、回転速度測定などに利用できます。
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
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インジケーターを制御する方法を学びました。リードスイッチは信頼性が高くシンプルな部品であり、セキュリティシステム、位置検出、近接検知など多くの用途で広く利用されています。磁気検出と視覚的フィードバックを組み合わせることで、さまざまなアプリケーション向けの直感的な監視システムを構築できます。