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