Arduino筆記(11):紅外線遙控繼電器控制風扇

遙控器的應用在一般家電是常見的,如電視遙控器、冷氣開關等都是利用紅外線遙控的方式控制家電的開關或調整。如果使用Arduino該如何做呢?就需要使用紅外線接收的晶體,作為接收訊號用,如果要控制啟動12V的風扇,就需要外接12V電源,並使用繼電器來控制,如果把兩項功能結合,就可以透過紅外線遙控風扇開關,這項功能在一般的電扇中很常見,我們就來看看如何使用Arduino進行控制。

[基礎知識]

繼電器(Relay),也稱電驛,是一種電子控制器件,它具有控制系統(又稱輸入迴路)和被控制系統(又稱輸出迴路),通常應用於自動控制電路中,它實際上是用較小的電流去控制較大電流的一種「自動開關」。故在電路中起著自動調節、安全保護、轉換電路等作用。[資料來源:維基百科]

[材料]

  • 麵包板 x 1
  • Arduino 主板 x 1
  • 直流 12V 風扇 x 1
  • 紅外線接收晶體 x 1
  • 一路或二路繼電器模組 x 1
  • 連接線 x N條

[線路連接與電路圖]

•將繼電器模組的接地GND連接Arduino主版的GND,5V接繼電器的VSS, n1接 Pin 2接腳,電扇的紅色線(正極)接12V的正極,負極接到繼電器的常閉一個接點,再將共極接到12V的負極。
•紅外線接收器有三隻接腳,我用的接收器因型號不明,我用實驗的方式測試出接腳的位置,兩隻腳接分別接5V及接地,第三隻接腳則接pin 4。







[程式]

/* 紅外線遙控+繼電器控制 12V風扇 */

#include <IRremote.h>     // 引用 IRRemote 函式庫

const int irReceiverPin = 4;    // 紅外線接收器 OUTPUT 訊號接在 pin 2
int motor = 2;

IRrecv irrecv(irReceiverPin);   // 定義 IRrecv 物件來接收紅外線訊號
decode_results results;   // 解碼結果將放在 decode_results 結構的 result 變數裏

void setup()
{
  Serial.begin(9600);      // 開啟 Serial port, 通訊速率為 9600 bps
  irrecv.enableIRIn();     // 啟動紅外線解碼
  pinMode(motor, OUTPUT);     
}

void loop() 
{
  if (irrecv.decode(&results)){ // 解碼成功,收到一組紅外線訊號
            Serial.print("Protocol: ");  // 印到 Serial port  
  
      // 判斷紅外線協定種類
            switch(results.decode_type) {
        case NEC:
          Serial.print("NEC");
          break;
        case SONY:
          Serial.print("SONY");
          break;
        case RC5:
          Serial.print("RC5");
          break;
        case RC6:
          Serial.print("RC6");
          break;
        default:
          Serial.print("Unknown encoding");  
    }  

    Serial.print("  irCode: ");            
    Serial.print(results.value);    // 紅外線編碼
         if (results.value == 16724175) {  //遙控器上的 0
        digitalWrite(motor, LOW);
    }  
    if (results.value == 16738455) {  //遙控器上的 1
        digitalWrite(motor, HIGH);
    }    
    Serial.print(",  bits: ");           
    Serial.println(results.bits);   // 紅外線編碼位元數
    delay(500);
  irrecv.resume();            // 繼續收下一組紅外線訊號        
  }  
}

[實作結果]


12 留言

  1. 不錯 支持,再來些特別點的動手玩吧!

    回覆刪除
  2. 那如果我要用超音波感測器,程式和線路有差異嗎?

    回覆刪除
  3. 那如果我要用超音波感測器,程式和線路有差異嗎?

    回覆刪除
  4. 您好,最近在試著做這個實驗,在驗證的時候有錯誤
    exit status 1
    板子Arduino/Genuino Uno編譯錯誤

    想問大概是什麼問題呢?

    回覆刪除
  5. 問一下,第一張圖左上角是什麼

    回覆刪除
  6. 紅外線編碼上打入英文就不能執行,請問是發生什麼樣的問題

    回覆刪除
    回覆
    1. results.value定義為數字,有文字就會出現屬性不合的錯誤。

      刪除
  7. 回覆
    1. 應該沒有, 請問是哪裡覺得有問題嗎?

      刪除
  8. 紅外線感應不到 是接線哪裡有問題嗎 有清楚的接線圖嗎

    回覆刪除
    回覆
    1. 可以先檢查一下遙控器按下送出的代碼對不對, 使用Serial.print看看紅外線代碼跟程式對不對。這照片已經是七、八年前拍的,有點不清楚,改天再來實作一次這個電路。

      刪除

張貼留言

較新的 較舊