注釈

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

参加する理由

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

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

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

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

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

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

2.2 マイクロスイッチ

はじめに

このプロジェクトでは、マイクロスイッチを使って2つのLEDを制御する方法を学びます。マイクロスイッチは、わずかな押し込みで動作する高感度な部品です。安全でない状態で機械やドアが動作しないようにするため、安全システムなどでよく使用されます。


必要なもの

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

COMPONENT

PURCHASE LINK

ブレッドボード

購入

ジャンパーワイヤー

購入

抵抗器

購入

LED

購入

マイクロスイッチ

-

コンデンサ

購入

Fusion HAT+

-

Raspberry Pi

-


回路図

マイクロスイッチはGPIO17に接続し、2つのLEDはGPIO22とGPIO27に接続します。マイクロスイッチを押すと赤色LEDが点灯し、離すと黄色LEDが点灯します。

../_images/2.1.2_sch.png

配線図

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

  1. マイクロスイッチの一方の端子をGPIO17に、もう一方をGNDに接続します。

  2. 2つのLEDのアノードを、電流制限用抵抗を介してGPIO22(黄色)およびGPIO27(赤色)に接続します。

  3. 両方のLEDのカソードをGNDに接続します。

../_images/2.1.2_bb.png

サンプルの実行

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

cd ~/ai-lab-kit/python/
sudo python3 2.2_MicroSwitch.py

このPythonスクリプトは、Raspberry Piに接続されたマイクロスイッチの状態に応じて2つのLEDを制御します。実行すると、次のように動作します。

  1. マイクロスイッチが押されたとき:

    • LED1(GPIO22に接続)が点灯します。

    • LED2(GPIO27に接続)が消灯します。

  2. マイクロスイッチが離されたとき:

    • LED1が消灯します。

    • LED2が点灯します。

  3. プログラムは0.5秒ごとにマイクロスイッチの状態を継続的に確認し、それに応じてLEDを切り替えます。

  4. このスクリプトは Ctrl+C で中断されるまで継続して実行されます。


コード

以下のPythonコードは、マイクロスイッチの状態に応じて2つのLEDを切り替えます。

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

# Initialize micro switch on GPIO pin 17
micro_switch = 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 check the state of the micro switch and control LEDs accordingly
   while True:
      if micro_switch.value() == 1:  # If the micro switch is pressed
            led1.high()       # Turn on LED1
            led2.low()      # Turn off LED2
      else:  # If the micro switch is not pressed
            led1.low()      # Turn off LED1
            led2.high()       # Turn on LED2

      sleep(0.5)  # Pause for 0.5 seconds before checking the switch again

except KeyboardInterrupt:
   # Handle KeyboardInterrupt (Ctrl+C) to exit the loop gracefully
   pass

コードの解説

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

    fusion_hat ライブラリはシンプルなGPIO制御機能を提供し、 time ライブラリは待機時間を設定するために使用します。

    from fusion_hat.pin import Pin, Mode, Pull
    from time import sleep  # Import sleep function for delays
    
  2. コンポーネントの初期化

    マイクロスイッチはプルアップを無効にした状態でGPIO17に接続し、LEDはGPIO22とGPIO27に接続します。

    # Initialize micro switch on GPIO pin 17
    micro_switch = 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)
    
  3. スイッチ状態の処理

    プログラムはループ内でマイクロスイッチの状態を確認します。押されるとLED1が点灯しLED2が消灯し、離されるとLED1が消灯しLED2が点灯します。

    while True:
       if micro_switch.value() == 1:
          led1.on()
          led2.off()
       else:
          led1.off()
          led2.on()
       sleep(0.5)
    
  4. 割り込み処理

    try-except ブロックにより、Ctrl+Cで中断した場合でもスクリプトを安全に終了できます。

    except KeyboardInterrupt:
       pass
    

トラブルシューティング

  1. LEDが反応しない

    • 原因: GPIO配線またはピン設定が正しくない可能性があります。

    • 対処方法: LED1がGPIO22、LED2がGPIO27に接続されており、両方のLEDに適切な抵抗が入っていることを確認してください。また、マイクロスイッチがGPIO17に正しく接続されていることも確認してください。

  2. マイクロスイッチが検出されない

    • 原因: マイクロスイッチの設定が適切でない、またはプルアップ/プルダウン抵抗の設定が必要な可能性があります。

    • 対処方法: pull = Pin.PULL_UP がスイッチの構成に合っているか確認してください。プルアップが必要な場合は、初期化時に有効にしてください。

  3. LEDがちらつく、または不安定に動作する

    • 原因: ボタンのチャタリングが発生している可能性があります。

    • 対処方法: 押下を検出した後に短い遅延を追加して、ソフトウェアデバウンスを実装してください。

    if micro_switch.value() == 1:
       sleep(0.05)  # Debounce delay
    

拡張アイデア

  1. 遅延時間の調整

    遅延時間を動的に変更できるようにして、LEDの応答性を細かく調整できます。

    delay = float(input("Enter delay in seconds: "))
    while True:
       sleep(delay)
    
  2. 音によるフィードバック

    スイッチが押されたときや離されたときに、ブザーで音による通知を追加できます。

    from fusion_hat import Buzzer
    buzzer = Buzzer(Pin(22))
    if micro_switch.value() == 1:
       buzzer.on()
    else:
       buzzer.off()
    

まとめ

このプロジェクトでは、Fusion HAT+でマイクロスイッチを使ってLEDを制御する方法を紹介しました。マイクロスイッチは汎用性の高い部品であり、安全システム、ユーザーインターフェース、産業用制御など幅広い分野で使用されています。実際に試してみることで、より高度なプロジェクトへ発展させるためのヒントが得られるでしょう。