注釈

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

参加する理由

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

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

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

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

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

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

1.5 リレー制御

はじめに

このプロジェクトでは、Raspberry Pi を使ってリレーモジュールを制御する方法を学びます。リレーは電気的に動作するスイッチであり、低電力回路から高電力デバイスを安全に制御できます。このプロジェクトでは、一定間隔でリレーをオン・オフする基本動作を確認します。


必要なもの

このプロジェクトを完成させるには、以下の部品が必要です。

部品

購入リンク

ブレッドボード

購入

ジャンパーワイヤー

購入

抵抗器

購入

LED

購入

トランジスタ

購入

リレー

購入

ダイオード

購入

Fusion HAT+

-

Raspberry Pi

-


回路図

GPIO 信号は 1 kΩ 抵抗を介してトランジスタのベースに入力され、これによりトランジスタがリレーコイルのオン・オフを切り替えます。GPIO17 が HIGH を出力するとトランジスタが導通し、リレーコイルに電流が流れてリレーが動作し、LED も 220 Ω 抵抗を介して点灯します。GPIO17 が LOW を出力するとトランジスタはオフになり、リレーコイルへの通電が止まり、リレーは復帰し、LED も消灯します。さらに、リレーコイルには逆起電力による電圧スパイクから回路を保護するため、フライバックダイオードが接続されています。

../_images/1.3.3_relay_sch.png

配線図

以下の図を参考にして回路を組み立ててください。

../_images/1.3.3_relay_bb.png

サンプルプログラムの実行

このチュートリアルで使用するすべてのサンプルコードは 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. スクリプトは無限ループに入り、1 秒ごとにリレーの状態を切り替えます。

  2. リレーが有効化される(HIGH)と、コンソールに Relay open... と表示されます。

  3. リレーが無効化される(LOW)と、コンソールに ...Relay close と表示されます。

  4. Ctrl+C によって安全に中断でき、その際は終了前に必ずリレーがオフになります。


コードの理解

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

    fusion_hat ライブラリの Pin クラスを使って GPIO ピンを制御し、 time.sleep を使って状態の切り替え間に待ち時間を入れています。

    from fusion_hat.pin import Pin, Mode
    from time import sleep  # Import the sleep function for delay
    
  2. リレーの初期化

    リレーは GPIO ピン 17 に接続され、出力モードとして初期化されます。

    # Initialize the relay connected to GPIO pin 17
    relay = Pin(17,mode=Mode.OUT)
    
  3. メイン制御ループ

    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
    
  4. キーボード割り込み処理

    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
    

トラブルシューティング

  1. リレーが反応しない

    • 原因:配線ミス、または GPIO ピンの設定が誤っている。

    • 対処方法:すべての接続が配線図どおりになっているか確認し、GPIO 17 が正しく指定されていることを確認してください。

  2. リレーが常にオン、またはオフのままになる

    • 原因:ロジックレベルの不一致、または電源供給の問題。

    • 対処方法:リレーモジュールが 3.3V ロジックに対応していることを確認し、十分な電源が供給されているか確認してください。

  3. プログラムが正常に終了しない

    • 原因:キーボード割り込みが正しく処理されていない。

    • 対処方法Ctrl+C でプログラムを終了し、例外処理コードが正しく含まれていることを確認してください。


発展アイデア

  1. スケジュール制御

    コードを変更して、特定の時刻にリレーをオン・オフするようにできます。

    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()
    
  2. センサー連動制御

    温度センサーや人感センサーなどを接続し、その読み取り値に応じてリレーを制御できます。

    # 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
    
  3. 複数リレーの制御

    このプロジェクトを拡張して、複数のリレーを同時に制御することもできます。

    # 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 アプリケーションにおける基本的な部品です。リレー制御を習得することで、低電圧回路から高電力デバイスを安全かつ効果的に操作できるようになります。