You are currently viewing Arduino繼電器模組指南

Arduino繼電器模組指南

本文介紹如何使用繼電器模組通過Arduino控制電源電壓。我們簡要介紹了繼電器模組,並使用Arduino建立了一個簡單的項目範例。我們將建立一個範例說明如何使用Arduino和PIR物體移動感測器控制繼電器模組。

在本課程結束時,您應該能夠利用繼電器模組使用Arduino控制任何電子設備。

繼電器是一個電動開關,可以打開或關閉,讓電流通過或不通過,並且可以用低電壓進行控制,例如Arduino引腳提供的5V。

用Arduino控制繼電器模組就像控制其他任何輸出一樣簡單,稍後我們將看到。

該繼電器模組具有兩個通道(這些藍色立方體)。還有其他型號具有一,四和八個通道。該模組應使用5V供電,適合與Arduino一起使用。還有其他繼電器模塊使用3.3V供電,非常適合ESP32、ESP8266和其他微控制器使用。

繼電器引腳排列

下圖顯示了繼電器模組的引腳排列。

繼電器模塊左側的三個引腳連接高電壓,右側的引腳連接需要低電壓的組件Arduino引腳。

電源電壓連接

高壓側的連接器有三個插座:公共(COM),常閉(NC)和常開(NO)。

  • COM:公共端。
  • NC(常閉): 當您希望預設情況下關閉繼電器時,將使用常閉配置,這意味著電流正在流動,除非您從Arduino向繼電器模塊發送信號以斷開電路並停止電流。
  • NO(常開): 常開配置的工作方式與常閉相反:繼電器始終處於打開狀態,因此除非您從Arduino發送信號以關閉電路,否則電路會斷開。

如果您只是想偶爾點亮一盞燈,最好使用常開電路配置。

引腳接線

低壓側具有一組三個引腳。

右側的設置由VCCGND組成,為模組供電,s端代表訊息端,可由Arduino引腳訊息控制,這裏我們以它來控制繼電器。

  • GND:接地
  • VCC:電壓5V
  • signal:控制繼電器(它將連接到Arduino數字引腳)

範例:使用繼電器模組和PIR物體移動感測器控制燈泡

螢幕擷取畫面-2021-03-29-155126-600x364

在此範例中,我們建立了一個移動感應燈。每次檢測到物體移動時,指示燈點亮5秒鐘。

將使用PIR移動感測器檢測物體移動。如果您不熟悉PIR移動感測器,則可以閱讀以下文章:

為了用電源電壓控制燈,我們將使用常開配置的繼電器模組。

安全警告

警告:在連接到電源電壓的項目時,您確實需要知道自己在做什麼,否則您可能會發生意外。這是一個嚴肅的話題,我們希望您安全。如果您不是100%確定自己在做什麼,請幫自己一個忙,不要碰任何電源電壓的東西,並問一個知道這方面智識的人!

所需零件

這是本範例所需的部分:

  • 繼電器模組
  • Arduino UNO 
  • PIR移動感測器(HC-SR501) 
  • 燈線組(可以到居家附近五金行購買

程式碼

將下面程式碼複製到Arduino IDE,並將其上傳到Arduino開發板。

警告:當您的Arduino連接到繼電器時,您不應上傳新代碼。

/*********
  Terry Lee
  完整程式碼說明,請參閱 http://honeststore.com.tw/blog/arduino-relay-module/  
*********/

// 中繼引腳用D8控制。電源線連接到常閉和共同
int relay = 8;
volatile byte relayState = LOW;

// PIR Motion Sensor is connected to D2.
int PIRInterrupt = 2;

// Timer Variables
long lastDebounceTime = 0;  
long debounceDelay = 5000;

void setup() {
  // Pin for relay module set as output
  pinMode(relay, OUTPUT);
  digitalWrite(relay, HIGH);
  // PIR motion sensor set as an input
  pinMode(PIRInterrupt, INPUT);
  // 如果符合條件,會觸發在上升模式下觸發函數以驅動繼電器
  attachInterrupt(digitalPinToInterrupt(PIRInterrupt), detectMotion, RISING);
  // Serial communication for debugging purposes
  Serial.begin(9600);
}

void loop() {
  // If 10 seconds have passed, the relay is turned off
  if((millis() - lastDebounceTime) > debounceDelay && relayState == HIGH){
    digitalWrite(relay, HIGH);
    relayState = LOW;
    Serial.println("OFF");
  }
  delay(50);
}

void detectMotion() {
  Serial.println("Motion");
  if(relayState == LOW){
    digitalWrite(relay, LOW);
  }
  relayState = HIGH;  
  Serial.println("ON");
  lastDebounceTime = millis();
}

程式碼如何工作

首先,我們建立變數來保持繼電器S引腳所連接的引腳並保存繼電器狀態:

int relay = 8;
volatile byte relayState = LOW;

PIR移動感測器連接到 pin 2

int PIRInterrupt = 2;

我們需要建立一些輔助變數來使用PIR移動感測器處理計時器。這lastDebounceTime變數保存上次檢測到物體移動的時間。debounceDelay 為在檢測到運動後燈泡應保持點亮的時間(此處我們將設置5秒= 5000毫秒)

long lastDebounceTime = 0;
long debounceDelay = 10000;

在setup()裡面,我們將繼電器設置為OUTPUT並預設將其關閉:

pinMode(relay, OUTPUT);
digitalWrite(relay, HIGH);

因為我們使用的是常開配置,所以除非觸發繼電器,否則COM和NO插座之間沒有接觸。當輸入電壓低於2 V時,繼電器將觸發。這意味著,如果您從Arduino發送LOW信號,則繼電器打開;如果您發送HIGH信號,則繼電器關閉。它與反向邏輯一起工作。

將PIR移動感測器設置為中斷:

pinMode(PIRInterrupt, INPUT);
// Triggers detectMotion function on rising mode to turn the relay on, if the condition is met
attachInterrupt(digitalPinToInterrupt(PIRInterrupt), detectMotion, RISING);

每當觸發PIR移動感測器時,它都會調用 detectMotion() 在程式碼聲明的函數以打開繼電器:

void detectMotion() {
    Serial.println("Motion");
    if(relayState == LOW){
        digitalWrite(relay, LOW);
    }
    relayState = HIGH;
    Serial.println("ON");
    lastDebounceTime = millis();
}

在loop()裡面,我們檢查繼電器打開後是否經過了10秒鐘。如果該條件成立,我們可以關閉繼電器。

if((millis() - lastDebounceTime) > debounceDelay && relayState == HIGH){
    digitalWrite(relay, HIGH);
    relayState = LOW;
    Serial.println("OFF");
}

原理圖

如圖所示組裝所有零件。

警告:請勿觸摸任何與電源電壓相連的電線。另外,請確保已擰緊繼電器模塊的所有螺釘。

燈泡使用常開配置連接到繼電器。Arduino通過控制繼電器 pin 8 (pin 8連接到繼電器s引腳)。最後,將PIR移動感測器連接到 pin 2

範例

總結

使用Arduino控制繼電器模組就像控制輸出一樣簡單-您只需要使用Arduino數字引腳發送HIGH或LOW信號即可。使用繼電器模組,您可以控制幾乎所有的交流電子設備(不僅是燈)。

我們希望本指南對您有所幫助。如果您喜歡這個項目,您可能還喜歡我們的高級Arduino課程:

  • Arduino循序漸進課程:建立25個項目

Arduino提供40多個免費教程和項目。如果您正在尋找特定模塊的指南,以下可能會找到您想要的。

最後,您還可以在此處訪問我們的免費資源。

謝謝閱讀。

發佈留言