検索コード

ArduinoのプッシュボタンでリレーとAC電球を切り替える

ArduinoのプッシュボタンでリレーとAC電球を切り替える

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

5V LOW-LEVEL trigger relay

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

5V LOW-Level triggered Relay module

ハードウェアの解説

このプロジェクトではリレーモジュール、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モードを使用してください。
  • 交流負荷を接続する前に、低電圧でリレーの動作を確認してください。
  • 短絡を避けるために接続を確認してください。

配線手順

Arduino wiring for AC bulb, LED and push button
Arduino wiring for AC bulb, LED and push button

リレーモジュールの配線を行うには、まずリレーの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- デモンストレーション

画像

5V LOW-Level triggered Relay module
5V LOW-Level triggered Relay module
5V LOW-LEVEL trigger relay
5V LOW-LEVEL trigger relay
Arduino wiring for AC bulb, LED and push button
Arduino wiring for AC bulb, LED and push button
5V LOW-LEVEL trigger relay
5V LOW-LEVEL trigger relay
34-Using an Arduino push button to push-on and push-off a relay and AC bulb (toggle)
言語: C++
/*
 * 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);
}

ファイル📁

ファイルは利用できません。