注釈
こんにちは、SunFounder Raspberry Pi & Arduino & ESP32 Enthusiast Community on Facebookへようこそ!他の愛好家と一緒に、Raspberry Pi、Arduino、ESP32の世界により深く入り込みましょう。
参加する理由
専門家サポート: 購入後の問題や技術的な課題を、コミュニティと私たちのチームの助けを借りて解決します。
学習と共有: ヒントやチュートリアルを交換して、スキルを向上させましょう。
限定プレビュー: 新製品の発表や先行プレビューに早期アクセスできます。
特別割引: 最新製品を特別割引でお楽しみいただけます。
季節限定キャンペーンとプレゼント: プレゼント企画やホリデーキャンペーンに参加しましょう。
👉 一緒に発見し、創造する準備はできましたか? [こちら] をクリックして、今すぐ参加しましょう!
2.4 チルトスイッチ
はじめに
このプロジェクトでは、チルトスイッチモジュールを使用します。チルトスイッチは内部に小さな金属ボールを含むボール型スイッチで、わずかな傾きを検出することができます。このスイッチは、動作検知、角度検出、バランス監視など、さまざまな用途に利用できます。
必要なもの
このプロジェクトを行うには、以下のコンポーネントを準備してください。
COMPONENT INTRODUCTION |
PURCHASE LINK |
|---|---|
- |
|
- |
|
Raspberry Pi |
- |
回路図
チルトスイッチの接続方法については、以下の図を参照してください。
配線図
以下の手順に従って回路を接続してください。
チルトスイッチをRaspberry PiのGPIO17に接続します。
緑色LEDを抵抗を介してGPIO27に接続します。
赤色LEDを抵抗を介してGPIO22に接続します。
両方のLEDのカソードをGNDに接続します。
サンプルの実行
このチュートリアルで使用するすべてのサンプルコードは ai-lab-kit ディレクトリに含まれています。
以下の手順でサンプルを実行してください。
cd ~/ai-lab-kit/python/
sudo python3 2.4_Tilt.py
このPythonスクリプトは、チルトセンサーを使用して2つのLEDを制御し、状態メッセージをコンソールに表示します。実行すると、次のように動作します。
チルトセンサー(GPIO17に接続)が傾きを検出した場合:
コンソールにメッセージを表示します。
赤色LED(GPIO22に接続)が点灯します。
緑色LED(GPIO27に接続)が消灯します。
チルトセンサーが直立状態(通常の垂直位置)の場合:
赤色LEDが消灯します。
緑色LEDが点灯します。
プログラムはチルトセンサーの状態を継続的に監視し、それに応じてLEDを制御します。
Ctrl+Cを押して中断するまで、スクリプトは継続して実行されます。
コード
以下は、チルトスイッチとLEDを制御するPythonスクリプトです。
#!/usr/bin/env python3
from fusion_hat.pin import Pin, Mode, Pull
from signal import pause # Import pause function from signal module
TiltPin = Pin(17, mode=Mode.IN, pull=Pull.DOWN) # Tilt sensor connected to GPIO pin 17
green_led = Pin(27,mode=Mode.OUT) # Green LED connected to GPIO pin 27
red_led = Pin(22,mode=Mode.OUT) # Red LED connected to GPIO pin 22
def detect():
"""
Detect the tilt sensor state and control the LEDs.
Turns on the red LED and turns off the green LED when tilted.
Turns off the red LED and turns on the green LED when not tilted.
"""
if TiltPin.value() == 0: # Check if the sensor is tilted
print(' *************')
print(' * Tilt! *')
print(' *************')
red_led.high() # Turn on red LED
green_led.low() # Turn off green LED
else: # If the sensor is not tilted
red_led.low() # Turn off red LED
green_led.high() # Turn on green LED
try:
# Set up a callback to detect changes in the tilt sensor state
TiltPin.when_activated = detect
TiltPin.when_deactivated = detect
pause()
except KeyboardInterrupt:
# Handle KeyboardInterrupt (Ctrl+C) to exit the loop gracefully
pass
コードの解説
インポート
スクリプトでは、LEDや入力ピンの制御に必要なクラスをインポートします。
from fusion_hat.pin import Pin, Mode, Pull from signal import pause # Import pause function from signal module
初期化
チルトスイッチおよびLEDをGPIO17、GPIO27、GPIO22に接続して設定します。
TiltPin = Pin(17, mode=Mode.IN, pull=Pull.DOWN) # Tilt sensor connected to GPIO pin 17 green_led = Pin(27,mode=Mode.OUT) # Green LED connected to GPIO pin 27 red_led = Pin(22,mode=Mode.OUT) # Red LED connected to GPIO pin 22
detect関数
detect関数はチルトスイッチの状態を確認し、LEDの状態を更新します。スイッチが傾いた場合は赤色LEDが点灯し、緑色LEDは消灯します。def detect(): if TiltPin.value() == 0: # Check if the sensor is tilted print(' *************') print(' * Tilt! *') print(' *************') red_led.high() # Turn on red LED green_led.low() # Turn off green LED else: # If the sensor is not tilted red_led.low() # Turn off red LED green_led.high() # Turn on green LED
メインループ
チルトセンサーの
when_pressedとwhen_releasedイベントにdetect関数を割り当てます。プログラムは中断されるまで実行され続けます。try: # Set up a callback to detect changes in the tilt sensor state TiltPin.when_activated = detect TiltPin.when_deactivated = detect pause() except KeyboardInterrupt: # Handle KeyboardInterrupt (Ctrl+C) to exit the loop gracefully pass
トラブルシューティング
スクリプトが傾きに反応しない
原因:
when_activatedおよびwhen_deactivatedのイベントが正しく動作していない可能性があります。対処方法:
detect()関数が両方のイベントに正しく割り当てられていることを確認してください。
LEDがちらつく
原因: センサーのノイズやチャタリングの可能性があります。
対処方法: 短い遅延を追加して信号を安定させます。
from time import sleep def detect(): sleep(0.05) # Debounce delay if TiltPin.value() == 0: red_led.on() green_led.off() else: red_led.off() green_led.on()
拡張アイデア
音によるフィードバック
チルトセンサーが作動したときにブザーで音による通知を追加できます。
from fusion_hat import Buzzer,Pin buzzer = Buzzer(Pin(4)) if TiltPin.value() == 0: buzzer.on() else: buzzer.off()
時間ベースのアラート
センサーが一定時間以上傾いた状態のままの場合にアラートを発生させます。
from threading import Timer def alert(): print("Tilt detected for too long!") red_led.on() sleep(0.5) red_led.off() if TiltPin.value() == 0: Timer(5, alert).start() # Trigger alert if tilted for 5 seconds
まとめ
このプロジェクトでは、Fusion HAT+とチルトスイッチを使用して傾きを検出し、LEDを制御する方法を学びました。チルトスイッチは、簡単な動作検出や角度検出を実現する低コストなソリューションであり、ロボットやホームオートメーションなど多くの実用的な用途に活用できます。