【說明】
繼電器(Relay)是利用低電壓控制高電壓的應用模組,因為它是一種安全的開關操作方式,通常被用於家中開關高電壓的設備,如可以使用 5V 的繼電器控制 110V的家用設備。
繼電器(Relay)適合連接於 Arduino 的板子上,需要 5V 的電壓供應,在模組板上的 S 表示訊號的控制輸入,它負載的交流電範圍從 10A / 30V 到 10A /250V。
本程式範例可應用於某些場所中投幣計時使用的設備,如海水浴場的更衣室中放了投幣吹風機,當投幣後就開啟電源,於一分半鐘後就關閉電源。
【零件表】
| No. | 零件名稱 | 數量 |
| 1 | LCD1602_I2C | 1 |
| 2 | Relay | 1 |
| 3 | 按鈕 | 1 |
| 4 | 電源延長線,吹風機(或其他家用電器) | 1 |
【零件接腳】
請參考 「LCD1602_I2C 顯示器」 接腳。
| No. | 零件接腳 | UNO R3 接腳 |
| 1 | 按鈕:腳 1 (按220Ω電組) | D2 |
| 2 | 按鈕:腳 2 | 5V |
| 3 | Relay : – | GND |
| 4 | Relay:+ | 5V |
| 5 | Relay:S | D3 |
【按線圖】

【程式碼】
/*
* 示範 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();
}



