注釈
こんにちは、SunFounderのRaspberry Pi & Arduino & ESP32愛好家コミュニティへようこそ!Facebook上でRaspberry Pi、Arduino、ESP32についてもっと深く掘り下げ、他の愛好家と交流しましょう。
参加する理由は?
エキスパートサポート:コミュニティやチームの助けを借りて、販売後の問題や技術的な課題を解決します。
学び&共有:ヒントやチュートリアルを交換してスキルを向上させましょう。
独占的なプレビュー:新製品の発表や先行プレビューに早期アクセスしましょう。
特別割引:最新製品の独占割引をお楽しみください。
祭りのプロモーションとギフト:ギフトや祝日のプロモーションに参加しましょう。
👉 私たちと一緒に探索し、創造する準備はできていますか?[ここ]をクリックして今すぐ参加しましょう!
2.2.5 スピードセンサーモジュール¶
はじめに¶
このプロジェクトでは、スピードセンサーモジュールの使用方法について学びます。スピードセンサーモジュールはタコメーターの一種で、モーターなどの回転する物体の速度を測定するために使用されます。
必要な部品¶
このプロジェクトには、次のコンポーネントが必要です。
一式を購入するのが便利です、こちらがリンクです:
名前 |
このキットのアイテム |
リンク |
---|---|---|
Raphael Kit |
337 |
以下のリンクから別々に購入することもできます。
コンポーネントの紹介 |
購入リンク |
---|---|
- |
回路図¶
実験手順¶
ステップ 1: 回路を組み立てる。
ステップ 2: ディレクトリを変更する。
cd ~/raphael-kit/python-pi5
ステップ 3: 実行する。
sudo python3 2.2.6_speed_sensor_module_zero.py
コードを実行した後、緑色のLEDが点灯します。スピードセンサーモジュールの隙間に障害物を置くと、「Light was blocked」と画面に表示され、赤色のLEDが点灯します。障害物を取り除くと、緑色のLEDが再び点灯します。
コード
注釈
下記のコードを 変更/リセット/コピー/実行/停止 することができます。しかし、その前に raphael-kit/python-pi5
のようなソースコードのパスに移動する必要があります。コードを変更した後、直接実行して効果を見ることができます。
#!/usr/bin/env python3
from gpiozero import LED, Button
from signal import pause
# Initialize GPIO pins for the speed sensor and LEDs using GPIO Zero library
speed_sensor = Button(17, pull_up=False) # Speed sensor connected to GPIO pin 17 without pull-up
green_led = LED(27) # Green LED connected to GPIO pin 27
red_led = LED(22) # Red LED connected to GPIO pin 22
def update_leds():
"""
Update the state of LEDs based on the speed sensor.
- If the sensor is pressed (triggered), the red LED is turned on and a message is printed.
- If the sensor is released (not triggered), the green LED is turned on.
"""
if speed_sensor.is_pressed:
green_led.off() # Turn off green LED
red_led.on() # Turn on red LED
print('Light was blocked') # Print message indicating sensor is triggered
else:
green_led.on() # Turn on green LED
red_led.off() # Turn off red LED
try:
# Main loop to continuously check sensor state
while True:
# Update LEDs based on sensor state changes
speed_sensor.when_pressed = update_leds # Update LEDs when sensor is pressed
speed_sensor.when_released = update_leds # Update LEDs when sensor is released
except KeyboardInterrupt:
# Handle KeyboardInterrupt (Ctrl+C) for a graceful script termination
pass
コード説明
gpiozero
ライブラリをインポートして、GPIOピンとのやり取りにLED
とButton
クラスを使用します。signal
ライブラリからpause
関数をインポートし、スクリプトが実行され続けるようにします。#!/usr/bin/env python3 from gpiozero import LED, Button from signal import pause
スピードセンサーをGPIOピン17に
Button
として設定します。pull_up=False
パラメーターは内部プルアップ抵抗が使用されないことを示します。green_led
とred_led
はそれぞれGPIOピン27と22に接続されたLED
オブジェクトとして初期化されます。# Initialize GPIO pins for the speed sensor and LEDs using GPIO Zero library speed_sensor = Button(17, pull_up=False) # Speed sensor connected to GPIO pin 17 without pull-up green_led = LED(27) # Green LED connected to GPIO pin 27 red_led = LED(22) # Red LED connected to GPIO pin 22
スピードセンサーの状態をチェックする
update_leds
関数を定義します。センサーが押される(活性化する)と、緑色LEDを消し、赤色LEDを点け、メッセージを表示します。センサーが解放されると、逆の動作をします。def update_leds(): """ Update the state of LEDs based on the speed sensor. - If the sensor is pressed (triggered), the red LED is turned on and a message is printed. - If the sensor is released (not triggered), the green LED is turned on. """ if speed_sensor.is_pressed: green_led.off() # Turn off green LED red_led.on() # Turn on red LED print('Light was blocked') # Print message indicating sensor is triggered else: green_led.on() # Turn on green LED red_led.off() # Turn off red LED
メインループはスピードセンサーの状態を連続的にチェックします。
when_pressed
とwhen_released
属性は、センサーの状態が変化したときにupdate_leds
関数を呼び出すイベントハンドラです。try-exceptブロックは、Ctrl+Cでの優雅な終了を処理するために使用されます。try: # Main loop to continuously check sensor state while True: # Update LEDs based on sensor state changes speed_sensor.when_pressed = update_leds # Update LEDs when sensor is pressed speed_sensor.when_released = update_leds # Update LEDs when sensor is released except KeyboardInterrupt: # Handle KeyboardInterrupt (Ctrl+C) for a graceful script termination pass