紅外遙控器

--基于RP2040游戲機的綜合應用

一、項目介紹

此項目是基于電子森林的RP2040 Game Kit平臺的一個紅外遙控器,具體功能如下:

1、調用板載IRM-H638T紅外接收頭接收紅外信號

2、對紅外信號進行解析,得到其協議、地址、命令等信息,并顯示

3、對接收的紅外信號進行存儲,實現紅外指令的學習功能。

4、調用VSMB20940紅外發射二極管發送已存儲信號。

5、學習的紅外信號在FLASH中存儲,掉線不丟失。

二、板卡介紹

image.png

圖 1 RP2040 Game Kit

本次使用的平臺是RP2040 Game Kit,其核心為RP2040芯片,雙核ARM Cortex M0+,不超頻下[敏感詞]時鐘可達133MHz,可通過Mpy、Arduino等多種方式編程。平臺外觀采用仿游戲機設計。板載多種資源,可以滿足大部分設計需求。

image.png

圖 2 RP2040 Game Kit 板載資源框圖

三、項目設計

結合題目要求與硬件平臺,本項目設計思路如下。

image.png

圖 3 項目系統設計圖

四、硬件分析

在本項目中,主要是用到的是紅外接收頭、紅外發射頭、IPS屏幕,四向搖桿和按鍵。

1、紅外接收/發送

平臺搭載了一個IRM-M638MT作為紅外線信號接收元件,一個VSMB10940作為紅外線發射元件。

image.png

圖 4紅外電路

2、IPS屏幕

平臺搭載了一個240x240的IPS彩屏,采用st7789驅動,SPI信號協議。

image.png

圖 5 屏幕電路

3、四向搖桿

使用RP2040的ADC讀取搖桿輸出信號電壓值獲取搖桿位置。

image.png

圖 6搖桿電路

4、按鍵

根據項目需求,本次僅使用A和B兩個按鍵,低電平有效,使用時開啟內部上拉。

image.png

圖 7 按鍵電路

5、引腳使用情況

表格 1 本項目引腳列表

image.png

 

五、紅外編碼傳輸介紹

紅外編碼傳輸的本質是將已知信號進行數字編碼、調制到紅外光波段,再進行發送的信號傳輸方式。在接收端以同頻進行解調,即可得到傳輸結果。常見的傳輸載波頻率如38kHz。

被調制的已知信號可根據不同紅外傳輸協議進行不同的定義和編碼。如常見的NEC編碼,其標準編碼為4字節(32位),為1byte地址+1byte地址反碼+1byte數據+1byte數據反碼。

紅外傳輸具有很多優勢。首先,紅外光為肉眼不可見光段,在使用時可以避免產生不必要的光束,不會影響人類正常生活。其本質與可見光LED相同,正常使用下也不會對人眼造成損傷。其次紅外發光二極管制造簡單,價格便宜,功耗極低。因此基于紅外編碼傳輸的遙控手段被廣泛應用于許多消費電子產品中。

紅外傳輸也具有劣勢。由于太陽等因素,環境中本身存在一定紅外光,若頻率相近,會干擾紅外遙控信號。且紅外光穿透性差,幾乎無穿墻能力。

紅外傳輸的編碼方式簡單,易于實現“學習”功能。這同時也代表其安全性差,易被劫持。

FrfUOIHFWujpiqL3PodsHBRq64tD

圖 8 紅外傳輸示意圖(來自電子森林)

六、函數庫介紹

1、RP2040的開發板庫:

想在Arduino中正確的編譯RP2040并使用,加載RP2040的Arduino庫。他并不是Arduino官方提供的庫,因此需要手動安裝。

GitHub - earlephilhower/arduino-pico: Raspberry Pi Pico Arduino core, for all RP2040 boards

2、紅外:

IRremote庫是一個在Arduino中被廣泛使用的紅外庫,它可以兼容數十種被普遍使用的紅外協議。其庫函數豐富,包含了接收、發送、解碼、編碼等功能。且對于AVR單片機、ESP系列、RP2040都有很好的支持。

更詳細的庫介紹可以看我的博客:IRremote 紅外線接收模塊使用 會伏丘的CSDN

3、文件管理:

LittleFS是一個為微控制器設計的小型且安全的文件系統,已被集成在Arduino的RP2040庫中,十分的輕量化。它具有斷電回彈、動態均衡以及緩沖限制等功能。使用該庫可以方便的在flash中讀寫文件,以實現參數掉電不丟失的效果。

4、屏幕顯示:

整個系統的交互層級邏輯按圖三進行設計,使用TFT_eSPI庫來對IPS屏幕進行控制。具體的繪圖函數比較簡單,不再詳細介紹。

中文字庫制作參考: Arduino庫<TFT_eSPI>中文字庫的制作與使用 會伏丘的CSDN

七、界面演示

image.pngimage.pngimage.pngimage.pngimage.png

八、為什么采用Arduino而不是Micropython

對于RP2040,常用的編程方式為c、micropython和arduino。C語言過于底層,本人能力有限,暫未考慮。對于后兩者,本人在項目中嘗試了這兩種方式,得出結論如下:

1、 Micropython是解釋型語言,而Arduino是編譯型語言,底層為C。因此Arduino在運行速度上更具有優勢。以刷屏為例,在mpy中,即使啟用dma緩沖區,也會存在肉眼可見的刷屏過渡。而使用Arduino的<TFT_eSPI>庫進行刷屏,幾乎不會出現刷屏過渡。

2、 Micropython作為新興語言,雖然發展迅速,但其整體語言生態還是較弱于Arduino。相比之下Arduino具有更良好的開源環境和豐富庫支持。如紅外,mpy的micropython_ir庫僅支持8種紅外編碼協議,而Arduino的IRremote庫支持近二十種協議。且Arduino有“庫管理器”這樣的官方庫資源整合系統,而據我所知mpy并沒有。

3、 Micropython在提高編程簡便性的同時犧牲了深度,許多常用功能目前尚未支持。例如I2C作為從機模式并執行接收中斷,此功能目前至今也未被提供(官方文檔中未給出)。

image.png

圖 9 來自樹莓派社區的討論截圖

因此,針對于本項目,最終選擇了使用Arduino進行開發,而不是mpy。

九、小結

這是我首次在RP2040這款芯片上完成項目,分別測試了micropython和arduino這兩種主流的編程方式,了解了各自的優缺點。同時也了學會了紅外遙控命令的原理和編碼特點。




免責聲明:本文轉載自“電子森林”,本文僅代表作者個人觀點,不代表薩科微及行業觀點,只為轉載與分享,支持保護知識產權,轉載請注明原出處及作者,如有侵權請聯系我們刪除。