紅外線是目前許多電器常用的遙控器標準通訊方式,因此是非常適用於嵌入式系統中使用的通訊方法,事實上也幾乎是標準的通訊模組,有非常多現成的程式以及電路可以利用,而且其零件也非當便宜。下圖是我們這次要實習範例的主角:

這個紅外線接收器有三支腳,其中最右邊這支是5V,中間是GND,左邊的那支接腳則是輸出的腳位。連接之後的樣子如下所示:

如上圖所示,其實就是給它一個電源,然後把信號線連接到數位接腳中的其中一個就可以了。在圖片中我們是把它連接到第2腳,但是在下面的範例中有些則是連線到第11支腳,同學們在執行程式的時候要特別地留意。連接完成之後,接下來是運用程式庫來編寫程式。在這裡我們不打算使用預設的驅動程式,所以請先到程式集的目錄下,把RobotIRemote這個資料夾移除(建議先移動到別的地方),位置如下所示:

然後請到【這裡】下載另外一支驅動程式,下載ZIP壓縮檔之後,如之前所有的範例一樣,先做解壓縮的動作:

接著,關閉Arduino IDE之後再重新開啟一次,就可以在Arduino IDE中看到範例程式,如下所示:

開啟之範例程式如下所示:

/*
 * IRremote: IRrecvDemo - demonstrates receiving IR codes with IRrecv
 * An IR detector/demodulator must be connected to the input RECV_PIN.
 * Version 0.1 July, 2009
 * Copyright 2009 Ken Shirriff
 * http://arcfn.com
 */

#include <IRremote.h>

int RECV_PIN = 11;

IRrecv irrecv(RECV_PIN);

decode_results results;

void setup()
{
  Serial.begin(9600);
  // In case the interrupt driver crashes on setup, give a clue
  // to the user what's going on.
  Serial.println("Enabling IRin");
  irrecv.enableIRIn(); // Start the receiver
  Serial.println("Enabled IRin");
}

void loop() {
  if (irrecv.decode(&results)) {
    Serial.println(results.value, HEX);
    irrecv.resume(); // Receive the next value
  }
  delay(100);
}

請留意,這個範例程式我們是使用第11支腳做為取得紅外線訊號的輸出端。把此程式上傳燒錄到Arduino之後,請開啟監控視窗,然後隨便找一個遙控器(筆者使用的是吸頂式電扇用的)如下:

對著那個接收器按不同的按鈕,就會在監控視窗中看到如下所示的字串了:

遙控器的每一個按鈕都對應了不同字串,也就是說,透過此紅外線的字串識別,就可以做到遙控的功能囉。

(491)