本人非專業(yè)人士,只是一個小小程序員,arduino純屬愛好,所發(fā)文章僅限于本人智商,如有問題,請大家指正。
近期對智能家居比較敢興趣,其中存在幾個無線傳輸的模塊,起初選用的2.4G的nRL24L01模塊,那個東西真是折騰死人,弄了一個星期都沒找到問題點。最后在收拾元件箱子的時候,發(fā)現(xiàn)一套以前買的433Mhz模塊,就想干脆用這個吧。在各種方式的search,找到了一個lib - RCSwitch,看了例子還比較好用,可以傳輸24bit的值。立刻裝上測試。
315433射頻模塊介紹:
當(dāng)發(fā)射電壓為3V時,空曠地傳輸距離約20~50米,發(fā)射功率較小,當(dāng)電壓5V時約100~200米,當(dāng)電壓9V時約300~500米,當(dāng)發(fā)射電壓為12V時,為最佳工作電壓,具有較好的發(fā)射效果,發(fā)射電流約60毫安,空曠地傳輸距離700~800米,發(fā)射功率約500毫瓦。外接天線:10cm(發(fā)射模塊天線:10cm,接收模塊天線:30cm)多芯或單芯普通導(dǎo)線。
在實際測試中,隨便接了跟電線,傳輸能達到5米,無丟包現(xiàn)象。這個射頻模塊的穿墻效果,應(yīng)該會比2.4G的好很多。我家里以前一套315Mhz的報警器,全屋傳輸無壓力。
接線很簡單,只有三個腳,兩個是電源,一個是數(shù)據(jù)。
發(fā)射端
VCC GND DATA- arduino 10腳(可以變更,在代碼中調(diào)整)
接收端
VCC GND DATA- arduino 2腳(使用終端2則使用3腳,在代碼中調(diào)整)
程序使用RCSwitch附帶示例修改,傳感器值使用隨機數(shù)替代。
傳輸思路是將24bit的值分開,前12位為傳感器ID,后12位為傳感器值,12bit,可以到4096,應(yīng)該夠用了。
其他的控制編碼器的例子還沒有試,下次測試好了再來。
說明:
還忘了一個重要的東西,在lib中有個代碼需要修改,不然會接受到4個重復(fù)的值。由于本人對中斷不是很熟悉,不知道4個重復(fù)值造成的原因,只是測試出改了一個值,請各位大師給予解答。
[pre lang="arduino" line="1"]void RCSwitch::handleInterrupt() {
if (repeatCount == 6) { // 需要將 2改為 6repeatCount == 2
if (receiveProtocol1(changeCount) == false){
if (receiveProtocol2(changeCount) == false){
if (receiveProtocol3(changeCount) == false){
//failed
}
}
}
repeatCount = 0;
}
}[/pre]
RF射頻模塊發(fā)射端程序部分截圖:
RF射頻模塊接收端程序部分截圖: