注釈
こんにちは、SunFounder Raspberry Pi & Arduino & ESP32 Enthusiast Community on Facebookへようこそ!他の愛好家と一緒に、Raspberry Pi、Arduino、ESP32の世界により深く入り込みましょう。
参加する理由
専門家サポート: 購入後の問題や技術的な課題を、コミュニティと私たちのチームの助けを借りて解決します。
学習と共有: ヒントやチュートリアルを交換して、スキルを向上させましょう。
限定プレビュー: 新製品の発表や先行プレビューに早期アクセスできます。
特別割引: 最新製品を特別割引でお楽しみいただけます。
季節限定キャンペーンとプレゼント: プレゼント企画やホリデーキャンペーンに参加しましょう。
👉 一緒に発見し、創造する準備はできましたか? [こちら] をクリックして、今すぐ参加しましょう!
1.5 リレー制御
はじめに
このプロジェクトでは、Raspberry Pi を使ってリレーモジュールを制御する方法を学びます。リレーは電気的に動作するスイッチであり、低電力回路から高電力デバイスを安全に制御できます。このプロジェクトでは、一定間隔でリレーをオン・オフする基本動作を確認します。
必要なもの
このプロジェクトを完成させるには、以下の部品が必要です。
部品 |
購入リンク |
|---|---|
- |
|
Raspberry Pi |
- |
回路図
GPIO 信号は 1 kΩ 抵抗を介してトランジスタのベースに入力され、これによりトランジスタがリレーコイルのオン・オフを切り替えます。GPIO17 が HIGH を出力するとトランジスタが導通し、リレーコイルに電流が流れてリレーが動作し、LED も 220 Ω 抵抗を介して点灯します。GPIO17 が LOW を出力するとトランジスタはオフになり、リレーコイルへの通電が止まり、リレーは復帰し、LED も消灯します。さらに、リレーコイルには逆起電力による電圧スパイクから回路を保護するため、フライバックダイオードが接続されています。
配線図
以下の図を参考にして回路を組み立ててください。
サンプルプログラムの実行
このチュートリアルで使用するすべてのサンプルコードは ai-lab-kit ディレクトリに用意されています。
以下の手順でサンプルを実行してください。
cd ~/ai-lab-kit/python/
sudo python3 1.5_Relay.py
スクリプトを実行すると、GPIO 17 に接続されたリレーが 1 秒ごとにオン・オフを繰り返します。リレーがオンになるとコンソールには Relay open... と表示され、オフになると ...Relay close と表示されます。この動作は Ctrl + C を押すまで繰り返され、停止時にはプログラムが終了し、リレーは安全にオフになります。
コード
以下の Python コードは、リレーモジュールを制御してオン・オフを繰り返します。
#!/usr/bin/env python3
from fusion_hat.pin import Pin, Mode
from time import sleep # Import the sleep function for delay
# Initialize the relay connected to GPIO pin 17
relay = Pin(17,mode=Mode.OUT)
try:
# Loop to continuously toggle the relay's state every second
while True:
print('Relay open...') # Inform that the relay is being activated
relay.high() # Turn on the relay
sleep(1) # Maintain the relay in the on state for 1 second
print('...Relay close') # Inform that the relay is being deactivated
relay.low() # Turn off the relay
sleep(1) # Maintain the relay in the off state for 1 second
except KeyboardInterrupt:
# Handle a keyboard interrupt (Ctrl+C) to exit the loop
relay.off() # Ensure the relay is turned off before exiting
pass
この Python スクリプトは GPIO ピン 17 に接続されたリレーモジュールを制御します。実行すると、次のように動作します。
スクリプトは無限ループに入り、1 秒ごとにリレーの状態を切り替えます。
リレーが有効化される(HIGH)と、コンソールに
Relay open...と表示されます。リレーが無効化される(LOW)と、コンソールに
...Relay closeと表示されます。Ctrl+Cによって安全に中断でき、その際は終了前に必ずリレーがオフになります。
コードの理解
ライブラリのインポート
fusion_hatライブラリのPinクラスを使って GPIO ピンを制御し、time.sleepを使って状態の切り替え間に待ち時間を入れています。from fusion_hat.pin import Pin, Mode from time import sleep # Import the sleep function for delay
リレーの初期化
リレーは GPIO ピン 17 に接続され、出力モードとして初期化されます。
# Initialize the relay connected to GPIO pin 17 relay = Pin(17,mode=Mode.OUT)
メイン制御ループ
while Trueループの中で、1 秒間隔でリレーの状態を切り替え続けます。while True: print('Relay open...') # Inform that the relay is being activated relay.high() # Turn on the relay sleep(1) # Maintain the relay in the on state for 1 second print('...Relay close') # Inform that the relay is being deactivated relay.low() # Turn off the relay sleep(1) # Maintain the relay in the off state for 1 second
キーボード割り込み処理
try-exceptブロックにより、Ctrl+Cなどでプログラムを中断しても安全に終了でき、終了前にリレーをオフにします。except KeyboardInterrupt: # Handle a keyboard interrupt (Ctrl+C) to exit the loop relay.off() # Ensure the relay is turned off before exiting pass
トラブルシューティング
リレーが反応しない
原因:配線ミス、または GPIO ピンの設定が誤っている。
対処方法:すべての接続が配線図どおりになっているか確認し、GPIO 17 が正しく指定されていることを確認してください。
リレーが常にオン、またはオフのままになる
原因:ロジックレベルの不一致、または電源供給の問題。
対処方法:リレーモジュールが 3.3V ロジックに対応していることを確認し、十分な電源が供給されているか確認してください。
プログラムが正常に終了しない
原因:キーボード割り込みが正しく処理されていない。
対処方法:
Ctrl+Cでプログラムを終了し、例外処理コードが正しく含まれていることを確認してください。
発展アイデア
スケジュール制御
コードを変更して、特定の時刻にリレーをオン・オフするようにできます。
import datetime # Turn relay on during specific hours current_time = datetime.datetime.now().time() if datetime.time(9, 0) <= current_time <= datetime.time(17, 0): relay.high() else: relay.low()
センサー連動制御
温度センサーや人感センサーなどを接続し、その読み取り値に応じてリレーを制御できます。
# Pseudocode for sensor-controlled relay if temperature_sensor.read() > 25: # If temperature exceeds 25°C relay.high() # Turn on cooling device else: relay.low() # Turn off cooling device
複数リレーの制御
このプロジェクトを拡張して、複数のリレーを同時に制御することもできます。
# Initialize multiple relays relays = { 'light': Pin(17, Pin.OUT), 'fan': Pin(18, Pin.OUT), 'pump': Pin(19, Pin.OUT) } # Control individual relays relays['light'].high() relays['fan'].low()
まとめ
このプロジェクトでは、Raspberry Pi を使ってリレーモジュールを制御する方法を学びました。リレーはホームオートメーション、産業用制御システム、IoT アプリケーションにおける基本的な部品です。リレー制御を習得することで、低電圧回路から高電力デバイスを安全かつ効果的に操作できるようになります。