前言
躺在床上看書看累了,你想倒頭就睡,卻懶得下床關燈嗎?或是窩在舒服的沙發上看電視,你想開個電風扇涼快一下,卻連抬個腿都覺得麻煩嗎?「拿起一個遙控器,按一下把電燈關掉,再按一下就把電風扇打開。」,如果可以這樣,該是多麼美好的一件事!這聽起來很困難嗎?不!一點都不!本專題要告訴您如何使用紅外線遙控插座,藉此控制電器的開關,並且以 Arduino 自製一個簡單的紅外線遙控器,利用 Arduino 來遙控紅外線插座。
STEP 1:
把紅外線插座插到 110V 插座 (圖1),先按一下黑色按鈕讓燈亮,再按住按鈕約 3 秒鐘,等燈亮後手放開,此時燈會閃爍 (圖2),代表紅外線插座已進入紅外線學習模式:
▲ 圖 1:將紅外線插座插入110V插座
▲ 圖 2: 按住按鍵 3 秒鐘後放開,此時燈會閃爍,表示已進入紅外線學習模式
拿起家裏任何一個遙控器,對著紅外線插座按任一鍵 (圖3),這個紅外線插座很聰明,當你聽到繼電器發出嗒的一聲時,表示它已經把紅外線學起來了。
▲ 圖 3:用遙控器對著紅外線插座按任一鍵
完成設定後,馬上來做個簡單的測試,將電器 (例如電風扇、立燈) 插到紅外線插座上,然後按一下遙控器同一顆按鍵,此時電器電源會打開 (圖4),再按一下,便會關閉電源 (圖5)。
▲ 圖 4:按一下打開電器,此時燈會亮
▲ 圖 5:再按一下關閉電器,此時燈會熄滅
STEP 2:
下一步是使用 Arduino 讀取遙控器的紅外線訊號。
首先是連接電路,將 38kHz 紅外線接收器接到 Arduino 上。紅外線接收器的接法如圖 6 所示,接收器的 Vout 腳接到 pin 2 腳位,Vcc 接到 5V 輸出腳位,GND 接到 Arduino 的 GND 腳位。
▲ 圖 6:紅外線接收器線路接法
接著是安裝 IRRemote Library。請將 IRRemote Library 下載後(註1),解壓縮放到 libraries 資料夾底下即可,例如 "C:\arduino-1.0.1\libraries"
將底下的程式輸入Arduino IDE 並上傳至 Arduino 板子上:
01 | // 顯示紅外線協定與訊號 |
02 | #include <IRremote.h> // 引用 IRRemote 函式庫 |
03 |
04 | const int irReceiverPin = 2; // 紅外線接收器 OUTPUT 訊號接在 pin 2 |
05 |
06 | IRrecv irrecv(irReceiverPin); // 定義 IRrecv 物件來接收紅外線訊號 |
07 | decode_results results; // 解碼結果將放在 decode_results 結構的 result 變數裏 |
08 |
09 | void setup() |
10 | { |
11 | Serial.begin(9600); // 開啟 Serial port, 通訊速率為 9600 bps |
12 | irrecv.enableIRIn(); // 啟動紅外線解碼 |
13 | } |
14 |
15 | // 顯示紅外線協定種類 |
16 | void showIRProtocol(decode_results *results) |
17 | { |
18 | Serial.print( "Protocol: " ); |
19 | |
20 | // 判斷紅外線協定種類 |
21 | switch (results->decode_type) { |
22 | case NEC: |
23 | Serial.print( "NEC" ); |
24 | break ; |
25 | case SONY: |
26 | Serial.print( "SONY" ); |
27 | break ; |
28 | case RC5: |
29 | Serial.print( "RC5" ); |
30 | break ; |
31 | case RC6: |
32 | Serial.print( "RC6" ); |
33 | break ; |
34 | default : |
35 | Serial.print( "Unknown encoding" ); |
36 | } |
37 |
38 | // 把紅外線編碼印到 Serial port |
39 | Serial.print( ", irCode: " ); |
40 | Serial.print(results->value, HEX); // 紅外線編碼 |
41 | Serial.print( ", bits: " ); |
42 | Serial.println(results->bits); // 紅外線編碼位元數 |
43 | } |
44 |
45 | void loop() |
46 | { |
47 | if (irrecv.decode(&results)) { // 解碼成功,收到一組紅外線訊號 |
48 | showIRProtocol(&results); // 顯示紅外線協定種類 |
49 | irrecv.resume(); // 繼續收下一組紅外線訊號 |
50 | } |
51 | } |
▲ 圖 7:遙控器紅外線訊號
請將解到的 Protocol 種類與編碼記錄下來(本例為 NEC 協定,編碼為 4CB3817E),待會我們會用到。
STEP 3:
下一步我們將使用 Arduino 來發射紅外線,以遙控紅外線插座。
首 先一樣是先連接電路,我們要把紅外線發射器和一顆按鈕接到 Arduino。紅外線發射器的接法如圖8所示,發射器的長腳要接到 pin 3 腳位,並且串接一顆 100 ohm 電阻,短腳要接到 GND 腳位。至於按鈕則是一支腳接到 5V輸出腳位,另一支腳接到 pin 4 腳位,同時接一個 10K 電阻連接到 GND 腳位。
將底下的程式輸入Arduino IDE 並上傳至 Arduino 板子上:
01 | /* |
02 | * 發射紅外線訊號 |
03 | * 注意! 紅外線發射器(IR LED)必須接到 pin 3, 不能接其它腳位 |
04 | */ |
05 | #include <IRremote.h> // 引用 IRRemote 函式庫 |
06 |
07 | const int buttonPin = 4; // 按鍵(pushbutton)接在 pin 4 |
08 | int buttonState = 0; // 按鍵狀態 |
09 |
10 | IRsend irsend; // 定義 IRsend 物件來發射紅外線訊號 |
11 |
12 | void setup() |
13 | { |
14 | pinMode(buttonPin, INPUT); // 把 buttonPin 設置成 INPUT |
15 | } |
16 |
17 | void loop() |
18 | { |
19 | // 讀取按鍵狀態 |
20 | buttonState = digitalRead(buttonPin); |
21 |
22 | // 檢查按鍵是否被按下(pressed) |
23 | // 有的話 buttonState 會是 HIGH |
24 | if (buttonState == HIGH) { |
25 | // 發射紅外線訊號 |
26 | irsend.sendNEC(0x4CB3817E, 32); // 記得換成你遙控器的紅外線編碼 |
27 | } |
28 | } |
大功告成了,此時按下按鈕後,Arduino 就會遙控紅外線遙控插座,你便可以打開或關閉電器的電源囉。
假如你有 Ethernet Shield、Wi-Fi Shield 或者是藍芽擴充模組,你只要利用 Arduino 和紅外線遙控插座,然後再寫個手機 App 便可以利用手機來遙控家電的開關了。這部份就留給你當作功課了。
註1: IRRemote Library 可由以下連結下載:
https://github.com/coopermaa/Arduino-IRremote
材料表:
1) 一張 Arduino 板子,一條 USB 傳輸線,以及 Arduino IDE 軟體開發環境:2) 一顆 38 kHz 的紅外線接收器 (Infrared Receiver),如 TSOP2438, TSOP4438, PNA4602, FM-8038TM2-5DN。
▲ 紅外線接收器(Infrared Receiver)
3) 一顆發射波長為 940nm (nanometer, 奈米) 的紅外線發射器
4) 一個紅外線遙控插座 (可在露天或淘寶買到)
- 1) 遙控器紅外線解碼 Part2 - 2011-04-11
- 1) 遙控器紅外線解碼 Part1 - 2011-04-11
- WinLIRC 紅外線遙控電腦教學 - 2011-04-11
- 關閉 Arduino UNO 的 auto reset - 2013-09-07
- TM1638 LED Display
------------------------------------------
熱門文章
-
簡介 Arduino 是一張微控制器板子 (microcontroller board),約莫一個手掌大: 使用者可以在 Arduino 板子上接上各種電子裝置,例如 LED 燈、喇叭、馬達、開關、溫濕度感測器、紅外線發射與接收器、LCD 顯示裝置,以及 Ether...
-
什麼是 Arduino?它的特色為何?可以拿來做什麼應用?本文將回答這些基本的問題,帶你認識 Arduino。 分享一個 Arduino 教學心得:學習 Arduino 最好的方法,就是買張 Arduino 控制板和一些電子零件,捲起袖子實際動手做,唯有如此,才能夠真正體驗 ...
-
Introduction 本文介紹紅外線遙控原理與 NEC IR Protocol。 Highlights 本文討論下列項目: 紅外線遙控原理 NEC IR Protocol 紅外線遙控原理 紅外線是目前最常見的一種無線通訊,普遍使用在家電.-------------------------------------
零件和相關links
溫測 DS18B20
不銹鋼外殼 DS18B20
美國 Dallas Semiconductor DS18b20 溫度傳感器 (不銹鋼管防水封裝)
不銹鋼外殼 (6*30mm),引線長度100cm 每個探頭經過品管測試
美國 Dallas Semiconductor 專利單線數據輸出, 分辨率 9~12位元數據可調. 3.0V~5.5V供電 感溫範圍寬-55℃ ~ +125℃
輸出引線:紅色(VCC),藍色(DATA),黃色(GND)
接線方式:
紅色 Vcc + 綠色 GND 黃色 Data
時鐘模組 DS1307時鐘 + 鋰充電池 + 24C32存儲器 RTC
溫濕度計 DHT11
Realy 繼電器
PIR sensor 紅外線人體感測
HC-SR04 超音波感測器介紹
L298n 使用 L298N 模組控制直流馬達
CSR BC-4 藍芽模組
Arduino USB host shield
Misc
- 使用 Arduino 遙控家電
- http://coopermaa2nd.blogspot.tw/2012/12/arduino.html
- Arduino 做 AVR ISP Programming
- http://coopermaa2nd.blogspot.tw/2011/03/arduino-avr-ispin-system-programmer-2.html
- Cygwin
- http://yehnan.blogspot.tw/2012/02/arduinowindowscygwin.html https://code.google.com/p/arduino/wiki/BuildingArduino
- Amarino 可以在Android上開發 arduino的軟體
- http://coopermaa2nd.blogspot.tw/2013/01/amarino-with-softwareserial.html
Reference