S02_Relay(繼電器)

【說明】

繼電器(Relay)是利用低電壓控制高電壓的應用模組,因為它是一種安全的開關操作方式,通常被用於家中開關高電壓的設備,如可以使用 5V 的繼電器控制 110V的家用設備。

繼電器(Relay)適合連接於 Arduino 的板子上,需要 5V 的電壓供應,在模組板上的 S 表示訊號的控制輸入,它負載的交流電範圍從 10A / 30V 到 10A /250V。

本程式範例可應用於某些場所中投幣計時使用的設備,如海水浴場的更衣室中放了投幣吹風機,當投幣後就開啟電源,於一分半鐘後就關閉電源。

【零件表】

No.零件名稱數量
1LCD1602_I2C1
2Relay1
3按鈕1
4電源延長線,吹風機(或其他家用電器)1

【零件接腳】

請參考 「LCD1602_I2C 顯示器」 接腳。

No.零件接腳UNO R3 接腳
1 按鈕:腳 1 (按220Ω電組) D2
2 按鈕:腳 2 5V
3 Relay : –GND
4 Relay:+5V
5 Relay:SD3

【按線圖】

【程式碼】

/*
 * 示範 KY019 5V 繼電器模組 (Relay Module)
 * 藉由 Android 板子控制 5V 的繼電器,
 * 開啟 110V 電器設備(如吹風機)
 */

// 使用 LCD1602 I2C 顯示器顯示結果
// 定義 LCD 元件(位置 0x27 及 16x2 的顯示)
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x27,16,2);  

// 定義搖桿的接腳及資料儲存變數
const byte btnPin = 2;            // 定義扭鈕接腳。
byte btnValue = LOW;              // 儲存按鈕的狀態值
const byte relayPin = 3;          // 定義繼電器接腳。
int delayTime = 90;               // 持續開啟設備的秒數
int timeCounter = 0;

// 程式初化設定
void setup() {
  lcd.begin();                    // 開啟 LCD 元件
  lcd.backlight();                // 開啟 LCD 背光
  displayStatus();                // 初始化 LCD
  pinMode(relayPin, OUTPUT);      // 設定繼電器腳位為輸出模式
  pinMode(btnPin, INPUT);         // 設定按鈕腳位為輸入模式
}

// 主程式迴圈 
void loop() {
  btnValue = digitalRead(btnPin); // 取得按鈕的值
  if (btnValue == HIGH) {         // 按鈕被按下
    digitalWrite(relayPin, HIGH); // 開啟繼電器
    reset_millis();               // 重設時間做為開始計時
    while (timeCounter < delayTime) { // 持續開啟
      displayStatus();            // 顯示秒數資料的值
      timeCounter = int(millis() / 1000); // 取得持續秒數
    }
    digitalWrite(relayPin, LOW);  // 關閉繼電器
    timeCounter = 0;              // 重設計時器
    displayStatus();              // 顯示秒數資料的值
  }
}

// 顯示秒數資料的值
void displayStatus() {
  lcd.setCursor(0,0);
  lcd.print("Timer: ");
  lcd.print(delayTime-timeCounter);
  lcd.print(" sec.   ");
}

// 重設 millis() 
void reset_millis() {
  extern volatile unsigned long timer0_millis, timer0_overflow_count;
  noInterrupts();
  timer0_millis = timer0_overflow_count = 0;
  interrupts();  
}
下載程式庫
下載程式碼

 ※  分享結束  ※


發佈留言