IR(Infrared)通信是一種簡單、低成本、應(yīng)用廣泛的無線通信技術(shù)。紅外光與可見光有些相似,只是波長稍長一些。IR 的這一特性使其人眼無法察覺,非常適合無線通信。
有很多應(yīng)用程序需要解碼 IR 信號才能使用 IR 遙控器操作某些設(shè)備。因此,在本教程中,我們將使用 TSOP1838 IR 接收器來構(gòu)建使用 Arduino 的 IR 遠(yuǎn)程解碼器。每個(gè)按鈕的十六進(jìn)制代碼都將記錄到 Microsoft Excel 表中。這個(gè)簡單的紅外遙控解碼器可用于紅外遙控機(jī)器人、家庭自動化和其他紅外控制項(xiàng)目等項(xiàng)目。
所需組件
Arduino Uno / Arduino Nano
紅外接收器 (TSOP1838)
跳線
面包板
IR 通信如何工作?
與其他通信系統(tǒng)一樣,紅外通信也有發(fā)射器和接收器。發(fā)射器看起來就像一個(gè) LED,但它產(chǎn)生的光是 IR 光譜而不是可見光譜。而紅外接收器是一個(gè)嵌入了前置放大器的光電二極管,可將紅外光轉(zhuǎn)換為電信號。對于 IR 通信,發(fā)射器和接收器應(yīng)相互指向。要了解有關(guān)IR 發(fā)射器和接收器電路的更多信息,請點(diǎn)擊鏈接。
按下遙控按鈕時(shí),IR LED(發(fā)射器)會發(fā)出紅外光。該光由通常是光電二極管或光電晶體管的接收器接收。但紅外線也由太陽、燈泡和其他任何產(chǎn)生熱量的東西發(fā)出。這會干擾發(fā)射器信號,因此為防止發(fā)射器信號使用 36 kHz 至 46 kHz 之間的載波頻率進(jìn)行調(diào)制。接收到信號后,IR 接收器解調(diào)信號并將其轉(zhuǎn)換為二進(jìn)制,然后再發(fā)送到微控制器。
在這里,我們使用電視遙控器發(fā)送紅外信號,并使用帶有 Arduino 的 TSOP1838接收它們。
電路原理圖
使用 Arduino的 IR 遠(yuǎn)程解碼器的電路圖如下:
連接非常簡單,因?yàn)?IR 接收器傳感器只有三個(gè)引腳:Vs、GND 和 Data。將 IR 接收器的 Vs 和 GND 引腳連接到 Arduino 的 3.3V GND 引腳,將數(shù)據(jù)引腳連接到 Arduino 的數(shù)字引腳 2。
Arduino IR 遠(yuǎn)程解碼器編程
Arduino IR 解碼器的完整代碼在頁面末尾給出。
為了解碼 IR Remote,首先,我們需要下載并添加一個(gè) IR 庫到 Arduino IDE。您可以從這里下載 IR Remote 庫。下載文件后,打開您的 Arduino IDE 并轉(zhuǎn)到Sketch 》 Include library 》 Add.Zip library。選擇庫文件并單擊“打開”。
通過包含 IR Remote 庫文件來啟動您的代碼。
#include 《IRremote.h》
之后定義連接紅外接收器數(shù)據(jù)引腳的 Arduino 引腳。就我而言,它連接到 Arduino 的 D2 引腳。
int IRPIN = 2;
之后為 IR Receiver pin 創(chuàng)建一個(gè)實(shí)例。
IRrecv recv(IRPIN);
在下一行中,為decode_results類定義一個(gè)對象,IR 接收器將使用它來發(fā)送解碼信息。
decode_results 結(jié)果;
在setup()函數(shù)中,啟動串行通信,并通過調(diào)用IRrecv函數(shù)enableIRIn() 啟動 IR 接收器。
無效設(shè)置()
{
序列號。開始(9600);
Serial.println(“啟用 IRin”);
不可恢復(fù)。啟用IRIn();
Serial.println(“啟用 IRin”);
Initialize_streamer();
}
在loop()函數(shù)中,recv.decode不斷檢查新信號,如果接收到新信號,接收到的信號代碼將存儲在result.value函數(shù)中。
無效循環(huán)()
{
if (irrecv.decode(&result))
{
Serial.print(“值??:”);
Serial.println(result.value, HEX);
Write_streamer();
不可恢復(fù)的簡歷();
}
延遲(500);
}
為了從 Arduino 向 Excel 表發(fā)送數(shù)據(jù),我們使用的是 PLX-DAQ。使用Write_streamer()函數(shù),我們以特定模式串行發(fā)送數(shù)據(jù),就像在串行監(jiān)視器上顯示值一樣。關(guān)鍵行解釋如下:
無效的 Write_streamer()
{
序列號.print(“數(shù)據(jù)”); //總是寫“DATA”來表示下面的數(shù)據(jù)
序列號.print(“,”); //使用“,”移動到下一列
Serial.print(result.value, HEX); //在Excel中存儲日期
序列號.print(“,”); //使用“,”移動到下一列
序列號.println(); //行尾移動到下一行
}
一旦硬件和程序準(zhǔn)備就緒,就可以將程序上傳到您的 Arduino Nano 板上了。上傳代碼后,將遙控器指向紅外接收器并按下遙控器按鈕。每個(gè)按鈕的十六進(jìn)制代碼將打印在串行監(jiān)視器上。
將 IR 遠(yuǎn)程解碼器數(shù)據(jù)保存到 Excel 表中
現(xiàn)在要將數(shù)據(jù)發(fā)送到 Excel 工作表,我們將使用PLX-DAQ。它是一個(gè) Excel 插件軟件,可幫助您將 Arduino 中的值直接寫入筆記本電腦或 PC 上的 Excel 表中。使用鏈接下載文件。下載后,解壓文件并點(diǎn)擊.exe文件進(jìn)行安裝。它將在您的桌面上創(chuàng)建一個(gè)名為PLX-DAQ的文件夾。
現(xiàn)在從桌面文件夾中打開“ PLX-DAQ 電子表格”文件。如果您的 Excel 上禁用了宏,那么您將看到一個(gè)安全塊,如下圖所示:
單擊選項(xiàng)-》啟用內(nèi)容-》完成-》確定以啟用宏。之后,您將看到以下屏幕:
現(xiàn)在選擇波特率“9600”和你的Arduino連接的端口,然后點(diǎn)擊連接開始數(shù)據(jù)流。您的值應(yīng)該開始被記錄,如下圖所示。
這就是如何輕松構(gòu)建Arduino IR 遠(yuǎn)程解碼器以將 IR 遠(yuǎn)程信號轉(zhuǎn)換為等效的 HEX 代碼的方式。
#include
int IRPIN = 2;
IRrecv recv(IRPIN);
decode_results 結(jié)果;
整數(shù)按鈕 = 0;
無效設(shè)置()
{
序列號.開始(9600);
Serial.println("啟用 IRin");
不可恢復(fù)。啟用IRIn();
Serial.println("啟用 IRin");
Initialize_streamer();
}
無效循環(huán)()
{
if (irrecv.decode(&result))
{
按鈕=按鈕+1;
Serial.print("值??:");
Serial.println(result.value, HEX);
Write_streamer();
不可恢復(fù)的簡歷();
}
延遲(500);
}
無效 Initialize_streamer()
{
Serial.println("CLEARDATA"); //清除以前項(xiàng)目留下的任何數(shù)據(jù)
Serial.println("標(biāo)簽,十六進(jìn)制代碼,按鈕"); //總是寫LABEL,表示它是第一行
}
無效的 Write_streamer()
{
序列號.print("數(shù)據(jù)"); //總是寫“DATA”來表示下面的數(shù)據(jù)
序列號.print(","); //使用“,”移動到下一列
Serial.print(result.value, HEX); //在Excel中存儲日期
序列號.print(","); //使用“,”移動到下一列
串行打?。ò粹o);//在Excel中存儲日期
序列號.print(","); //使用“,”移動到下一列
序列號.println(); //行尾移動到下一行
}
評論