實驗目的
練習製作一個 LCD 介面的紅外線解碼器(Infrared Decoder)。
在這個實驗裏,你將練習用 IRRemote 函式庫接收紅外線訊號,然後搭配一個文字型 LCD(Liquid Crystal Display)當作紅外線解碼器的顯示介面。預計製作的紅外線解碼器,其外觀如下:
▲ LCD 上會顯示解碼得到的紅外線協定(如 NEC)、編碼(如 4FB48B7)以及資料長度(如 32 位元)
前提
在做這個實驗前,我假設:
- 你已經看過「IRRemote 紅外線遙控教學」的教學,而且
- 也已經把 IRRemote 函式庫安裝起來了
材料
- 麵包板 x 1
- Arduino 主板 x 1
- 38 kHz 紅外線接收器(如 TSOP2438,TSOP4438, PNA4602, FM-8038TM2-5DN) x 1
- HD44780 相容 LCD x 1 (本文所用的為 14 pin 無背光 LCD) x 1
- 旋轉式可變電阻 x 1
- 單心線 x N
2x16 LCD 簡介與腳位圖
▲ 圖片來源: arduino.cc
HD44780 相容的 2x16 LCD 可以顯示兩行訊息,每行 16 個字元,它可以顯示英文字母、希臘字母、標點符號以及數學符號,除了顯示訊息外,它還有其它功能,包括訊息捲動(往左和往右捲動)、顯示游標和 LED背光等。
▲ 圖片來源: LCD 101
LCD 總共有 14 支接腳,如果內建背光的話是 16 支,腳位功能說明如下:
腳位編號 | 腳位名稱 | 說明 |
---|---|---|
1 | Vss | 接地 (0V) |
2 | Vdd | 電源 (+5V) |
3 | Vo 或稱 Vee | 對比(0-5V), 可接一顆 1k 電阻,或利可變電阻調整適當的對比 |
4 | RS | Register Select: |
5 | R/W | Read/Write mode: |
6 | E | Enable |
7 | D0 | Bit 0 (LSB) |
8 | D1 | Bit 1 |
9 | D2 | Bit 2 |
10 | D3 | Bit 3 |
11 | D4 | Bit 4 |
12 | D5 | Bit 5 |
13 | D6 | Bit 6 |
14 | D7 | Bit 7 (MSB) |
15 | A+ | 背光(串接 330R 電阻到電源) |
16 | K- | 背光(GND) |
▲ LCD 腳位功能說明表
日立 HD44780 相容的 LCD 有 4-bit 和 8-bit 兩種使用模式,使用 4-bit 模式主要的好處是節省 I/O 腳位,通訊的時候只會用到 4 個高位元 (D4-D7),D0-D3 這四支腳位可以不用接。每個送到 LCD 的資料會被分成兩次傳送 – 先送 4 個高位元,然後才送 4 個低位元。
接線
- 把 LCD 的 RS, Enable, D4, D5, D6, D7 依序接到 12, 11, 7, 6, 5, 4 等腳位上
- 將 LCD 的 Vss 及 R/W 接到 GND,Vdd 接到 +5V
- 變電阻中間腳位接到 LCD 的 Vo,剩下的兩支腳位,一支接到 5V,另外一支接到 GND。也可以不使用可變電阻,只要在 LCD 的 Vo 上串接一顆 1k ohm 電阻連到 GND 即可。
- 接著,照下表把紅外線接收器跟 Arduino 連接起來:
紅外線接收器接腳 Arduino 接腳 GND(-) 接到 GND Vcc(+ 或 V+) 接到 +5V 電源 Vout(或 OUT) 接到 pin 2。你可以接到其它 Digital pin,但程式要配合修改
▲ 有些紅外線接收器 GND 和 Vcc 是相反的,接線時請查閱你的 datasheet
程式
底下就是這個紅外線解碼器的程式(IRDecoder_LCD.pde):
注意! 程式執行時,如果訊息沒有顯示在 LCD 上,或者訊息模糊朦朧的,首先應該做的事是檢查可變電阻以調整對比。
示範影片
拿個電視遙控器隨便按幾個鈕測試:
4 意見:
i love the Monitor!!!
:D
Not working....always display "Unknown()" ...
please help me :)
Can you try other Remote Controls?
Better TV/DVD/Projector remote controls.
張貼留言