このチュートリアルはの一部です: Arduinoを使ったリレー制御
リレー関連の動画グループです。他の動画へのリンクはこの記事の下にあります。
ArduinoのプッシュボタンでリレーとAC電球を切り替える
このチュートリアルでは、押しボタンとリレーを使ってAC電球またはLEDライトを制御する方法を学びます。押しボタンはライトをオン・オフに切り替え、ボタンを離してもその状態を保持します。この構成は実用的であるだけでなく、リレーや交流(AC)負荷の扱いを学ぶための良い入門になります。

進めていく中で、必要な部品、配線の手順、そしてこのプロジェクトを可能にするArduinoのコードについて説明します。視覚的なガイドや詳しい解説は、関連するビデオ(ビデオ内の00:00)を必ずご覧ください。

ハードウェアの解説
このプロジェクトではリレーモジュール、Arduinoボード、プッシュボタンを使用します。リレーモジュールは低電圧のArduino信号で制御されながら、電球などの高電圧交流(AC)負荷を制御できるスイッチとして機能します。リレーモジュールには負荷を接続するための主要な端子が3つあり、共通(COM)、常開(NO)、常閉(NC)です。
プッシュボタンはリレーの状態を切り替えるためのユーザーインターフェースとして機能します。Arduinoのデジタルピンの一つに接続されています。ボタンが押されるとArduinoに信号が送られ、それに応じてリレーを作動させたり停止させたりします。この単純なやり取りにより、ライトを簡単に制御できます。
リレーのデータシートの詳細
| 製造元 | ソングル |
|---|---|
| 部品番号 | SRD-05VDC-SL-C |
| コイル電圧 | 直流5V |
| スイッチング電圧 | 交流250V/直流30V |
| スイッチング電流 | 最大 10 A |
| 接触抵抗 | 100 mΩ以下 |
| 絶縁抵抗 | 1000 MΩ以上 |
| 動作温度 | -40~+70 °C |
| パッケージ | 標準リレーモジュール |
- リレーが切り替える負荷の定格に合っていることを確認してください。
- リレーモジュールを5 VDCで通電したままにしてください。
- AC接続には適切な絶縁を使用してください。
- 交流電源で作業する際は注意してください。変更を加える前に回路の電源が切断されていることを必ず確認してください。
- プッシュボタンをArduinoの指定された入力ピンに接続してください。
- 外部抵抗を必要としないように、プッシュボタン用ピンにはINPUT_PULLUPモードを使用してください。
- 交流負荷を接続する前に、低電圧でリレーの動作を確認してください。
- 短絡を避けるために接続を確認してください。
配線手順

リレーモジュールの配線を行うには、まずリレーのVCCピンをArduinoの5Vピンに、リレーのGNDピンをArduinoのGNDピンに接続します。リレーのINピンはArduinoのデジタルピン10に接続してください。このピンがリレーを作動させる信号を送ります。
プッシュボタンの一方の端子をArduinoのデジタルピン2に接続します。もう一方の端子はGNDに接続してください。この接続はArduinoの内部プルアップ抵抗を使用するため、コード内でピンをINPUT_PULLUPに設定してください。ボタンが押されるとピンはLOWになり、Arduinoに信号が送られます。
AC負荷には、リレーのCOM端子に一方の配線を、NO端子にもう一方の配線を接続してください。この配線により、リレーが作動したときにAC負荷が通電します。ACの接続は常に確実に行われ、絶縁されていることを確認してください。
コード例と解説
以下のコードは必要なピンを初期化し、リレーを初期状態でオフに設定します。ボタンが押されるとリレーの状態が切り替わり、それに応じてライトの状態が更新されます。
int pbuttonPin = 2; // connect output to push button
int relayPin = 10; // Connected to relay (LED)
void setup() {
Serial.begin(9600);
pinMode(pbuttonPin, INPUT_PULLUP);
pinMode(relayPin, OUTPUT);
digitalWrite(relayPin, HIGH); // keep the load OFF at the beginning
}
コード内では、変数pbuttonPinプッシュボタンに使用されるピン2に設定されています。そのrelayPinピン10に設定されており、リレーを制御します。そのdigitalWriteこの関数は、リレーがOFF状態で起動することを保証するために使用されます。
void loop() {
val = digitalRead(pbuttonPin); // read the push button value
if(val == HIGH && lightON == LOW) {
pushed = 1 - pushed; // toggle the push status
delay(100);
}
if(pushed == HIGH) {
digitalWrite(relayPin, LOW); // turn the relay ON
} else {
digitalWrite(relayPin, HIGH); // turn the relay OFF
}
}
このコードの部分はプッシュボタンの状態を継続的にチェックします。ボタンが押されると、それはトグルしますpushed変数。値によってはpushedリレーがONまたはOFFに切り替わることで、実質的に照明が制御されます。このループは継続的に実行され、照明の状態がリアルタイムで更新されることを保証します。
コードの詳細については、記事の下に表示されているコードをご参照ください。
デモンストレーション/期待できること
プッシュボタンを押すとリレーが作動し、接続されたAC電球が点灯します。もう一度押すと電球は消灯します。シリアルモニタにはライトがONかOFFかを示すステータスメッセージが表示されます。問題が発生した場合は配線が正しいか確認し、予期せぬ動作を引き起こす可能性のあるフローティング入力がないか確認してください(ビデオの10:00で)。
動画のタイムスタンプ
- 00:00- はじめに
- 01:30- ハードウェアの概要
- 03:15- 配線手順
- 午前05:45- コードの解説
- 08:00- デモンストレーション
/*
* This is the Arduino code for a push button to turn ON and OFF a relay and AC bulb.
It toggles the bulb ON and OFF.
* The output pin 10 is connected to the relay.
* Watch video instructions on YouTube: https://youtu.be/7CCSRs5bvH0
* Be careful working with AC; it is dangerous. Disconnect from AC power when working and wear protective gloves when touching AC components.
* Full explanation of this code and wiring diagram is available in
* my Arduino Course at Udemy.com here: http://robojax.com/L/?id=62
* Written by Ahmad Shamshiri on December 14, 2017 in Ajax, Ontario, Canada
* in Ajax, Ontario, Canada. www.robojax.com
*
* Get this code and other Arduino codes from Robojax.com.
Learn Arduino step by step in a structured course with all materials, wiring diagrams, and libraries
all in one place. Purchase my course on Udemy.com: http://robojax.com/L/?id=62
If you found this tutorial helpful, please support me so I can continue creating
content like this. You can support me on Patreon: http://robojax.com/L/?id=63
or make a donation using PayPal: http://robojax.com/L/?id=64
* * This code is "AS IS" without warranty or liability. Free to be used as long as you keep this note intact.*
* This code has been downloaded from Robojax.com
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see <https://www.gnu.org/licenses/>.
*/
int pbuttonPin = 2;// connect output to push button
int relayPin = 10;// Connected to relay (LED)
int val = 0; // push value from pin 2
int lightON = 0;//light status
int pushed = 0;//push status
void setup() {
// Robojax.com code and video tutorial for push button ON and OFF
Serial.begin(9600);
pinMode(pbuttonPin, INPUT_PULLUP);
pinMode(relayPin, OUTPUT);
digitalWrite(relayPin, HIGH);// keep the load OFF at the begining. If you wanted to be ON, change the HIGH to LOW
}
void loop() {
// Robojax.com code and video tutorial for push button ON and OFF
val = digitalRead(pbuttonPin);// read the push button value
if(val == HIGH && lightON == LOW){
pushed = 1-pushed;
delay(100);
}
lightON = val;
if(pushed == HIGH){
Serial.println("Light ON");
digitalWrite(relayPin, LOW);
}else{
Serial.println("Light OFF");
digitalWrite(relayPin, HIGH);
}
// Robojax.com code and video tutorial for push button ON and OFF
delay(100);
}
リソースと参考文献
ファイル📁
ファイルは利用できません。