注釈

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

参加する理由

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

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

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

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

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

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

2.5 タッチスイッチモジュール

はじめに

このプロジェクトでは、タッチスイッチモジュールの使用方法を学びます。このコンポーネントは従来の機械式スイッチの代わりとなるもので、高い操作精度、優れたタッチ感度、そして機械的摩耗がほとんどないという利点があります。タッチスイッチは、信頼性と操作性が求められる現代の家電製品や電子機器で広く使用されています。


必要なもの

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

COMPONENT

PURCHASE LINK

ブレッドボード

購入

ジャンパーワイヤー

購入

抵抗器

購入

LED

購入

タッチスイッチモジュール

購入

Fusion HAT+

-

Raspberry Pi

-


回路図

以下は、タッチスイッチモジュールをRaspberry PiおよびLEDに接続するための回路図です。

../_images/2.1.3_sch.png

配線図

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

  1. タッチスイッチモジュールの出力ピンをGPIO17に接続します。

  2. LED1のアノードを抵抗を介してGPIO22に接続し、LED2のアノードを抵抗を介してGPIO27に接続します。

  3. 2つのLEDのカソードとタッチスイッチのGNDピンをGNDに接続します。

../_images/2.1.3_bb.png

サンプルの実行

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

cd ~/ai-lab-kit/python/
sudo python3 2.5_TouchSwitch.py

このPythonスクリプトは、タッチセンサーを使用してRaspberry Piに接続された2つのLEDを制御します。実行すると、次のように動作します。

  1. タッチセンサーが押されたとき:

    • コンソールに "You touch it!" と表示されます。

    • 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 for delay

# Initialize touch sensor (Button) on GPIO pin 17
touch_sensor = 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 touch sensor and control LEDs accordingly
   while True:
      if touch_sensor.value() == 1:  # Check if the touch sensor is pressed
            print('You touch it!')  # Output message indicating sensor activation
            led1.off()  # Turn off LED1
            led2.on()   # Turn on LED2
      else:  # If the sensor is not pressed
            led1.on()   # Turn on LED1
            led2.off()  # Turn off LED2

      sleep(0.5)  # Pause for 0.5 seconds before rechecking the sensor state

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

コードの解説

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

    fusion_hat ライブラリはGPIO制御を簡単にするために使用され、 sleep 関数は待機時間を設定するために使用されます。

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

    タッチセンサーをGPIO17の入力として設定し、GPIO22とGPIO27に接続された2つのLEDを初期化します。

    # Initialize touch sensor (Button) on GPIO pin 17
    touch_sensor = 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. メインループ

    プログラムはタッチスイッチモジュールの状態を継続的に監視します。タッチされた場合はLED2が点灯しLED1が消灯し、それ以外の場合はLED1が点灯しLED2が消灯します。

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

    try-except ブロックにより、キーボード割り込み(Ctrl+C)が発生した場合でもプログラムを安全に終了できます。

    except KeyboardInterrupt:
        pass
    

トラブルシューティング

  1. タッチセンサーが反応しない

    • 原因: 配線ミスまたはGPIOピン設定の誤り。

    • 対処方法: タッチセンサーがGPIO17とGNDに正しく接続されていることを確認し、 PULL_DOWN 設定がセンサーの動作モードと一致していることを確認してください。

  2. センサーが常に押された状態または未押下状態になる

    • 原因: センサーの故障または配線不良。

    • 対処方法: マルチメーターでセンサーをテストするか、センサーを交換してください。また、接続が緩んでいないか確認してください。

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

    • 原因: 入力信号のチャタリング。

    • 対処方法: ソフトウェアデバウンスを追加して信号を安定させます。

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

拡張アイデア

  1. タッチ時間の検出

    タッチセンサーが押されている時間を測定し、それに応じてLEDの動作を変更できます。

    from time import time
    start_time = None
    
    def handle_touch():
       global start_time
       if touch_sensor.value() == 1:
          start_time = time()
       else:
          duration = time() - start_time
          print(f"Sensor was touched for {duration:.2f} seconds")
    
  2. 可変ディレイ

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

    delay = float(input("Enter delay in seconds: "))
    sleep(delay)
    

まとめ

このプロジェクトでは、Fusion HAT+とタッチスイッチモジュールを使用してLEDを制御する方法を学びました。タッチスイッチは信頼性が高く、直感的な操作を実現できるため、現代の電子機器やユーザーインターフェースで広く利用されています。