在這個中級電子和無線電通信教程中,我們將深入研究使用Arduino平臺和nRF24L01+無線模塊構建功能齊全的8+通道RC(無線電控制)發(fā)射器和接收器。該項目結合了微控制器編程,傳感器集成和射頻通信的核心技能,非常適合希望擴展DIY遠程控制系統(tǒng)知識的愛好者。
應用程序
本RC系統(tǒng)可用于:
?遙控飛機、船和汽車
?DIY無人機或四軸飛行器
?無線機器人控制
?多伺服控制系統(tǒng)
為什么是nrf24lo1?
2.4 GHz射頻通信:工作在2.4 GHz ISM頻段,可實現中短距離(使用外置天線時為1km ~ 5km)的無線數據傳輸。
?基于包的通信:數據以小數據包(最多32字節(jié))發(fā)送,內置CRC檢查錯誤和自動確認(ack)以提高可靠性。
?多數據管道:支持多達6個數據管道,允許一個接收器監(jiān)聽多個發(fā)射機使用唯一的地址。
?低功耗:傳輸時僅消耗~ 12ma,可進入超低功耗休眠模式,提高電池效率。
?SPI接口:使用SPI協議與微控制器通信,用于高速數據傳輸和配置。
?可調功率和數據速率:傳輸功率和數據速率(250kbps, 1mbps, 2mbps)可以根據距離和速度進行調整。
注意:要為接收器供電,僅使用1 (ONE) ESC的BEC,因為超過1個電源輸入可以擊穿nano的5v引腳。
無線電總結
發(fā)射機的一面:
?從電位器和開關等輸入設備讀取模擬或數字值。
?將這些值打包到結構化數據包中。
?通過nRF24L01+模塊按設定的頻率發(fā)送報文。
接收端:
?連續(xù)偵聽傳入的數據包。
?解析接收到的數據并將其映射到伺服位置或電機速度。
?包括安全功能,如信號丟失超時檢測。
發(fā)射機的代碼
主要功能:
?創(chuàng)建一個無線RC發(fā)射機使用電位器(或操縱桿)和按鈕。
?通過nRF24L01+將控制數據發(fā)送到接收端進行控制:
?4個模擬通道:副翼、升降舵、方向舵、油門
?2個數字通道:按鈕(如彈射或齒輪)
?將指數響應曲線(expo)應用于模擬控制,使接近中心的操縱桿控制更平滑。
庫和初始化
?這些庫允許Arduino使用SPI并與nRF24L01+無線電通信。
?設置無線電對象,CE在引腳7,CSN在引腳8。
?使用5個字符的管道地址與接收方通信。
數據結構(包)
?這是一個緊湊的自定義協議,僅占用18字節(jié)。
?它在單個數據包中有效地傳輸4個模擬軸位置+ 2個按鈕狀態(tài)。
?創(chuàng)建一個名為data的全局實例。
注意:你可以添加更多的變量,但最多只能添加32個字節(jié)(int是4個字節(jié),char是1個字節(jié),等等)。
設置函數
?begin(9600):啟用串行調試。
?radio.begin():初始化nRF24L01+模塊。
?openWritingPipe():設置用于向接收者發(fā)送數據的地址。
?setPALevel():降低功率電平(使用RF24_PA_LOW或HIGH以獲得更大范圍)。
?setDataRate():采用慢速可靠的數據速率(250kbps)。
?stoppllistening():設置模塊為傳輸模式。
注意:使用完全相同的設置為接收器和發(fā)射器。
主循環(huán)
?從模擬引腳讀取操縱桿值。
?轉換模擬值(0-1023)到伺服角度(0-180)。
?使用applyExpo()函數將指數曲線應用于副翼、升降舵和方向舵。
?讀取按鈕狀態(tài)(HIGH =未按下)。
?如果未按下則發(fā)送‘1’,如果按下則發(fā)送‘0’(如果需要,您可能需要翻轉此邏輯)。
?將整個數據包通過無線電發(fā)送給接收者。
applyExpo()函數
?該函數對輸入應用指數響應曲線:
?Expo = 0:全線性響應(無曲線)。
?世博> 0:軟化中心附近的靈敏度。
?它將0-180范圍內的輸入映射到90(中心)附近的規(guī)范化曲線。
注意:這給了你精確的控制靠近操縱桿的中心和完整的旅行在兩端。
接收方代碼
主要功能:
?使用nRF24L01+模塊從發(fā)射器無線接收控制信號。
?解析6個通道(可擴展)的輸入:4模擬(x1, y1, x2, y2)和2數字(b1, b2)。
?驅動5個伺服器,用于2個副翼,1個升降舵,1個方向舵和1個電機(ESC帶BEC)。
?應用微調,映射,世博(通過dualRate)和信號安全(例如,約束())。
nRF24L01設置
?使用地址為“77777”的管道0偵聽傳入數據。
?設置為最小功率(考慮RF24_PA_LOW或RF24_PA_HIGH以獲得更好的范圍)。
?使用250kbps,在更長的距離上獲得更好的可靠性。
?禁用自動確認最小延遲或ping。
注意:為了擴大范圍,考慮制作nrf24lo1,地面范圍助推器(教程即將推出)。
伺服系統(tǒng)初始化
?定制PWM范圍(1000-2000μs),通過附加(引腳,min, max)節(jié)流-用于esc。
?其他伺服使用默認的544-2400μs范圍。
控制邏輯
?油門開始在90(0推力),因為它是操縱桿的中性或默認位置。
?0.7用作限制器,這樣電機就不會太熱或燒壞。
?使用dualRate()根據費率因子限制旅行(對于初學者)。
?對所有表面應用修剪值。
?電梯映射是倒置的,這是典型的取決于操縱桿的方向。
雙速率函數
?限制移動范圍。
?清潔和可重復使用的所有表面。
本文編譯自hackster.io