こんにちは!今回は Arduinoを使って「リレー」 を制御する方法をご紹介します。
リレーは、小さな電気信号で大きな電流を安全に制御できるとても便利な電子部品です。
LEDやモーターの次のステップとして、「家電をArduinoで動かす」工作をするときに欠かせません。
リレーとは?
リレーは、電気の力でON/OFFを切り替えるスイッチです。
内部に「電磁石」が入っており、電流を流すと磁力でスイッチが切り替わる仕組みになっています。
Arduinoなどのマイコンは、出力できる電流がとても小さい(数十mA程度)ため、
そのままではモーターや家電のような大きな電力を必要とする機器を直接動かすことはできません。
そんなときに活躍するのがリレーです!
リレーを使えば、Arduinoの小さな信号で外部の大きな電力を安全にON/OFFできます。
リレーの仕組み(原理)
リレーの内部は次のような構造をしています。
-
コイル(電磁石):電流を流すと磁力が発生します。
-
可動接点:磁力で動く金属のアーム。
-
接点(スイッチ部分):電磁力でON/OFFを切り替えます。
Arduinoから信号を送ると、コイルに電流が流れて磁力が発生し、スイッチが切り替わります。信号を止めると磁力がなくなり、スイッチは元の位置に戻ります。
このように、電気のON/OFFで別の回路のスイッチを切り替えるのがリレーの基本動作です。


通常はバネによりb接点(ブレーク接点)に繋がっています。端子eとfに電流を流すことでコイルを巻いた鉄心に磁力が発生することでレバーが動作し、a接点側に繋がります。これによりa接点に接続された電子部品が動作します。
リレーを使うメリット
リレーを使うことで、Arduinoの制御の幅が大きく広がります。
1. 小さな電流で大電流・高電圧を制御できる
Arduinoは5V・数十mAしか扱えませんが、リレーを使えば
AC100Vの家電やDC12Vのモーターなど、高電力機器も安全に制御できます。

2. 一つの信号入力で複数の出力を出す
モーター・ヒーター・照明・ポンプなど、AC/DCを問わずさまざまな機器をON/OFFできます。
3 自動制御ができる
センサーと組み合わせることで、「暗くなったらライトをON」や「温度が上がったらファンをON」など、自動スイッチ制御が可能になります。
Arduinoで使ってみよう!
用意するもの
ここでは直流モータ1個をArduinoで制御する例を紹介します。
-
-
Arduino Uno
-
L293DモータドライバーIC
-
ブレッドボード
-
電源モジュール
-
9Vバッテリー+アダプター
-
DCモータ
-
ジャンパーワイヤ
- リレー(SRD-05VDC-SL-C)
-
回路図
サンプルコード
// 変数の設定
const int ENABLE = 7;
const int CH1 = 5;
const int CH2 = 3;
void setup() {
//Pinの方向を定義
pinMode(ENABLE,OUTPUT); // 7番ピンをOUTPUT指定
pinMode(CH1,OUTPUT); // 5番ピンをOUTPUT指定
pinMode(CH2,OUTPUT); // 3版ピンをOUTPUT指定
Serial.begin(9600);
//シリアルモニタに説明を表示
Serial.println("1:SW ON");
Serial.println("2:SW OFF");
Serial.println("0:Forced STOP");
// 初期化 DCモータが突然動きださないように
digitalWrite(ENABLE,LOW); // disable
delay(500);
}
void loop() {
if (Serial.available() > 0 ) // 受信したデータが存在した場合以下を実行
{
char val = Serial.read(); // char文字として受信データの読み込み
// 1の場合 SW ON CH1:High CH2:Low
if (val == '1')
{
Serial.println("1:SW ON");
digitalWrite(ENABLE,HIGH); // enable on
digitalWrite(CH1,HIGH);
digitalWrite(CH2,LOW);
}
// 2の場合 SW OFF CH1:Low CH2:Low
else if (val == '2')
{
Serial.println("2:SW OFF");
digitalWrite(ENABLE,HIGH); // enable on
digitalWrite(CH1,LOW);
digitalWrite(CH2,LOW);
}
// 0の場合 強制停止
else if (val == '0')
{
Serial.println("0:Forced STOP");
digitalWrite(ENABLE,LOW); // disable
}
}
}
コード解説
Serial.println:パソコンの「シリアルモニタ」に文字や数値を表示する。
Serial.available:Arduinoに送られてきたデータがあるかどうかを確認する。
戻り値は「受信している文字の数」です。
Serial.read:シリアル通信で受け取ったデータを読み取ります。
digitalWrite:デジタルピンの出力を「HIGH(5V)」または「LOW(0V)」に設定する。
動作確認
シリアルモニタを開いてテンキーの数字を押すと、下記のプログラムしたモータ動作をします。
1:SW ON
2:SW OFF
0:強制停止
しかし。。。。。シリアルモニタで『1』を入れてもモータは動きませんでした。
原因調査
今回の制御ではシリアルモニタで『1』を入力するとドライバからリレーのe接点からf接点に流れることでコイルを動作させることです。このコイルを動作させるのに5Vで71.4mA程度必要になります。テスターでe接点を測定したところ3Vほどしかないことが判明。これではコイルが動作せず、モータが動きません。もう少し調べたところ、電源モジュールからは5Vが供給されていました。ドライバにて 出力電圧降下(ドロップ電圧)している可能性があるようです。

対策
電源供給を電池にて9V供給することで、リレーに十分な電流供給することに変更

電源供給を変えてシリアルモニタを開いてテンキーの数字を押すと、プログラム通り動作しました。
まとめ
リレーは、Arduinoの小さな信号で大きな電力を安全に制御できる便利なスイッチです。電気的に絶縁されているため、Arduinoを保護しながら家電やモーターを制御できます。


























