Arduino初心者編:リレーモジュール(KY-019)を制御する

Arduino初心者編:リレーモジュール(KY-019)を制御する

リレーモジュールKY-019は、メカニカルリレーと呼ばれる種類のもので、モジュール内で物理的にスイッチが動いて、電気経路を切り替えることができます。なぜそのようなことができるか、原理・使用方法・プログラミングについて説明します。

リレー

リレー回路は、とても大きな負荷(主電源電圧に接続された機器等)を切り替える場合に使用される事が多いです。その理由はリレー回路は、小さな電流で切り替える事が出来るため、負荷が大きい物を切り替えるのに最適だからです。機械的なスイッチング接続によって、2つの回路間が電気的に絶縁された状態になります。両方の回路(リレーを制御する回路とリレーで制御される回路)が外部電圧源から供給される場合は特に有効です。主電源電圧下で負荷回路内の機器を切り替える事も可能です。大きな電力を扱う場合は資格が必要になりますので、必要な資格を持っている場合のみ行うようにしましょう。

リレーがどのように機能するかは、コイルの電磁誘導という現象を利用しています。ここでは、リレーモジュールKY-019について紹介します。

図 1. リレーモジュール KY-019 はArduino から直接制御出来る。

図2. リレーモジュールKY-019の中の回路を表しています

上記の回路では、Arduinoの出力端子を図左側のIN端子に接続します。出力が0Vのときは、トランジスタ(T1)のベース抵抗R3に電流は流れず、コレクタ・エミッタ間(T1の上下端子)は導通していない状態、すなわちスイッチオフ状態になります。すると、LEDのD1は電流が流れて点灯しますが、RELAY1の端子1と4はコイルを通して同電位となるため、LEDのD2は点灯しません。RELAY1は端子3と5が導通した状態です。

次に、図左側のIN端子に5Vを印加すると、トランジスタ(T1)にベース電流1mAが流れます。すると、トランジスタのコレクタとエミッタ(T1の上下端子)の間が導通します。LEDのD1は電流が流れないので消灯し、反対にLEDのD2が点灯します。そして、RELAY1の端子1から4に向けてコイルに電流が流れます。コイルに電流が流れると、電磁誘導により、RELAY1の端子5に倒れていたリレーが端子2側に倒れます。

再度、図左側のIN端子に0Vを印加すると、RELAY1は端子5側に倒れるのですが、RELAY1内のコイルは電流を流し続けようとするため、端子4の電圧が一時的に大きくなります。この電圧をフライバック電圧やサージ電圧と呼びます。もしLEDのD1がない場合、サージ電圧がトランジスタT1を破壊します。これを防ぐために、整流ダイオードD1を入れて、D1とRELAY1のコイルのループに逃がしてやります。このダイオードのことを還流ダイオードといいます。ほかの呼び方として、フリーホイールダイオード、フライホイールダイオードもあります。

初期状態で閉じている端子をNC接点(RELAY1の端子5)と呼び、初期状態で閉じている端子をNO接点(RELAY1の端子2)と呼びます。リレーにトリガー信号(IN端子)が入力されると、これらは逆の状態に変化します。このような状態を繰り返すと、交互に点滅する光を実現する事が可能です。

リレーモジュールの中身についての説明は少し難しかったかもしれませんが、リレーを制御するのは知識があれば初心者でも簡単です。トリガー信号ピンはArduinoの出力ピンに直接接続する事ができます。トリガー信号がLOWの場合、トランジスタは無効となり、リレーは初期状態のままです。トリガー信号ピンがHIGHに切り替わる事によって、トランジスタがコレクタ入力を開き、リレーが切り替わります。信号経路内の LED はインジケータとしてのみ機能します。本モジュールのトリガー信号は3ボルト以上の電圧が必要です。

次のサンプル回路では、周囲の光がある値以下になった時、リレーを使って他の回路のLEDを点灯出来るか実験テストしたいと思います。この実験を行うために、フォトレジスタを使って行いたいと思います。

図3. 実験のために負荷回路(LEDと抵抗)を省いても構いません。モジュールのLEDはインジケータとしても機能します。

ここで注意点について述べておきます。LEDの光がフォトレジスターに当たると、フォトレジスタはその空間の照度を測定しているつもりが、LEDの照度を測定することになってしまい、LEDの明るさの値が閾値よりも高いとスイッチが切れてしまう事があります。その結果、LEDが不要な点滅を起こしてしまいます。この現象を打ち消すためには、ランプから離れた場所で光の測定を行う必要があります。また、点灯と消灯を異なるしきい値で切り替えるようにプログラムする事も可能です。このような性質をヒステリシスと言います。不要なスイッチング操作の危険性を軽減する事が出来るでしょう。

#define SENSOR 0
#define RELAY 2

boolean state = false;

void setup() {
  pinMode(RELAY, OUTPUT);
}

void loop() {
  if(analogRead(SENSOR) < 400)
    state = true;
    
  if(analogRead(SENSOR) > 600)
    state = false;

  digitalWrite(RELAY, state);
  delay(1000);
}

しきい値はその都度に微調整しています。実際に動かしてみて、しきい値を調整してください。

先ほど出てきたヒステリシスについて補足しておきます。ヒステリシスは日本語で言うと、履歴現象や履歴効果となり、言葉としては磁気ヒステリシスがよく知られています。今回の例で説明すると、測定値が399以下であればリレーのスイッチをオンにし、次の測定値が400~600の範囲になったとしても、スイッチをオフに切り替えることはせず、601以上になってからスイッチをオフにします。ヒステリシスは、日常生活のセンサーにも多くの用途を用いて使用されています。

シミュレーション(TINKERCAD)

シミュレーションを開始を押し、フォトレジスタをクリックして、明るさのスライドを動かしてみてください。

Arduino初心者編カテゴリの最新記事