注釈
こんにちは、SunFounder Raspberry Pi & Arduino & ESP32 Enthusiast Community on Facebookへようこそ!他の愛好家と一緒に、Raspberry Pi、Arduino、ESP32の世界により深く入り込みましょう。
参加する理由
専門家サポート: 購入後の問題や技術的な課題を、コミュニティと私たちのチームの助けを借りて解決します。
学習と共有: ヒントやチュートリアルを交換して、スキルを向上させましょう。
限定プレビュー: 新製品の発表や先行プレビューに早期アクセスできます。
特別割引: 最新製品を特別割引でお楽しみいただけます。
季節限定キャンペーンとプレゼント: プレゼント企画やホリデーキャンペーンに参加しましょう。
👉 一緒に発見し、創造する準備はできましたか? [こちら] をクリックして、今すぐ参加しましょう!
2.5 タッチスイッチモジュール
はじめに
このプロジェクトでは、タッチスイッチモジュールの使用方法を学びます。このコンポーネントは従来の機械式スイッチの代わりとなるもので、高い操作精度、優れたタッチ感度、そして機械的摩耗がほとんどないという利点があります。タッチスイッチは、信頼性と操作性が求められる現代の家電製品や電子機器で広く使用されています。
必要なもの
このプロジェクトを行うには、以下のコンポーネントが必要です。
COMPONENT |
PURCHASE LINK |
|---|---|
- |
|
Raspberry Pi |
- |
回路図
以下は、タッチスイッチモジュールをRaspberry PiおよびLEDに接続するための回路図です。
配線図
以下の手順に従って回路を組み立ててください。
タッチスイッチモジュールの出力ピンをGPIO17に接続します。
LED1のアノードを抵抗を介してGPIO22に接続し、LED2のアノードを抵抗を介してGPIO27に接続します。
2つのLEDのカソードとタッチスイッチのGNDピンをGNDに接続します。
サンプルの実行
このチュートリアルで使用するすべてのサンプルコードは ai-lab-kit ディレクトリに含まれています。
以下の手順に従ってサンプルを実行してください。
cd ~/ai-lab-kit/python/
sudo python3 2.5_TouchSwitch.py
このPythonスクリプトは、タッチセンサーを使用してRaspberry Piに接続された2つのLEDを制御します。実行すると、次のように動作します。
タッチセンサーが押されたとき:
コンソールに "You touch it!" と表示されます。
LED1(GPIO22に接続)が消灯します。
LED2(GPIO27に接続)が点灯します。
タッチセンサーが押されていないとき:
LED1が点灯します。
LED2が消灯します。
プログラムは0.5秒ごとにタッチセンサーの状態を継続的に監視し、それに応じてLEDの状態を更新します。
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
コードの解説
ライブラリのインポート
fusion_hatライブラリはGPIO制御を簡単にするために使用され、sleep関数は待機時間を設定するために使用されます。from fusion_hat.pin import Pin, Mode, Pull from time import sleep # Import sleep for delay
コンポーネントの初期化
タッチセンサーを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)
メインループ
プログラムはタッチスイッチモジュールの状態を継続的に監視します。タッチされた場合はLED2が点灯しLED1が消灯し、それ以外の場合はLED1が点灯しLED2が消灯します。
while True: if touch_sensor.value() == 1: led1.off() led2.on() else: led1.on() led2.off() sleep(0.5)
割り込み処理
try-exceptブロックにより、キーボード割り込み(Ctrl+C)が発生した場合でもプログラムを安全に終了できます。except KeyboardInterrupt: pass
トラブルシューティング
タッチセンサーが反応しない
原因: 配線ミスまたはGPIOピン設定の誤り。
対処方法: タッチセンサーがGPIO17とGNDに正しく接続されていることを確認し、
PULL_DOWN設定がセンサーの動作モードと一致していることを確認してください。
センサーが常に押された状態または未押下状態になる
原因: センサーの故障または配線不良。
対処方法: マルチメーターでセンサーをテストするか、センサーを交換してください。また、接続が緩んでいないか確認してください。
LEDがちらつく、または不安定に動作する
原因: 入力信号のチャタリング。
対処方法: ソフトウェアデバウンスを追加して信号を安定させます。
if touch_sensor.value() == 1: sleep(0.05) # Debounce delay
拡張アイデア
タッチ時間の検出
タッチセンサーが押されている時間を測定し、それに応じて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")
可変ディレイ
遅延時間を動的に変更できるようにして、応答性を細かく調整します。
delay = float(input("Enter delay in seconds: ")) sleep(delay)
まとめ
このプロジェクトでは、Fusion HAT+とタッチスイッチモジュールを使用してLEDを制御する方法を学びました。タッチスイッチは信頼性が高く、直感的な操作を実現できるため、現代の電子機器やユーザーインターフェースで広く利用されています。