步驟1:傳感器模塊
如上圖所示,變送器包括開(kāi)門(mén)傳感器,運(yùn)動(dòng)檢測(cè)器,布防遙控器以及用于對(duì)報(bào)警箱進(jìn)行編程的無(wú)線鍵盤(pán)。事實(shí)證明,這些設(shè)備中沒(méi)有兩個(gè)使用相同的同步長(zhǎng)度或位持續(xù)時(shí)間。除了消息長(zhǎng)度以外,唯一的共同點(diǎn)是位的基本格式。每個(gè)位占用一個(gè)固定的時(shí)間段,零和一之間的差是高/低部分的占空比。
上面顯示的漂亮波形并不是我第一次收到的。由于433 MHz頻段中的流量很大,因此我必須確保在將示波器設(shè)置為執(zhí)行一次觸發(fā)之前就激活傳感器。幸運(yùn)的是,只要激活按鍵,傳感器就會(huì)激活數(shù)據(jù)消息的多個(gè)副本,并且遙控器和小鍵盤(pán)會(huì)繼續(xù)輸出消息。通過(guò)使用示波器,我能夠確定每個(gè)項(xiàng)目的同步長(zhǎng)度和數(shù)據(jù)位持續(xù)時(shí)間。如前所述,同步時(shí)間不同,比特時(shí)間也不同,但是消息格式均具有低級(jí)同步,后跟24個(gè)數(shù)據(jù)位和一個(gè)停止位。這足以讓我能夠在軟件中構(gòu)建通用解碼器,而不必對(duì)每個(gè)設(shè)備的所有不同細(xì)節(jié)進(jìn)行硬編碼。
步驟2:硬件
我最初使用PIC微控制器和匯編語(yǔ)言構(gòu)建了傳感器解碼器。我最近一直在玩Arduino變體,所以我想看看是否可以復(fù)制它。上面顯示了簡(jiǎn)單的示意圖,并且還有我的原型的圖片。我所做的就是使用三根普通的跳線將Arduino Nano連接至RF接收器板。僅需電源和一條數(shù)據(jù)線即可。
如果您在“三合一時(shí)間和天氣顯示”上閱讀了我的Instructable,您會(huì)發(fā)現(xiàn)我使用的是433MHz的通用RXB6接收器。您也許可以讓真正便宜的接收器在該項(xiàng)目所需的短距離內(nèi)工作,但是我仍然建議使用超級(jí)外差接收器。
步驟3:軟件
軟件將接收到的位轉(zhuǎn)換為可顯示的ASCII字符。它輸出同步長(zhǎng)度的值以及1位和0位的長(zhǎng)度。因?yàn)槲乙呀?jīng)知道同步長(zhǎng)度和位格式,所以我可以專門(mén)為它們編寫(xiě)軟件。取而代之的是,我決定看看是否可以編寫(xiě)它來(lái)整理同步長(zhǎng)度并自動(dòng)找出數(shù)據(jù)位。萬(wàn)一我想嘗試檢測(cè)其他格式,那應(yīng)該可以更輕松地進(jìn)行修改。重要的是要注意,該軟件不知道消息的第一位是1還是0。它假定它是1,但是,如果確定應(yīng)該是零,它將求反。
通過(guò)使用INT0外部中斷輸入觸發(fā)中斷處理程序來(lái)確定同步脈沖和數(shù)據(jù)位的時(shí)間。 INT0可以在上升沿,下降沿,或在兩個(gè)邊沿或在穩(wěn)定的低電平上觸發(fā)。該軟件在兩個(gè)邊沿都被中斷,并測(cè)量脈沖保持低電平的時(shí)間。這簡(jiǎn)化了事情,因?yàn)橄㈤_(kāi)始/同步是一個(gè)低電平脈沖,并且可以根據(jù)它們的低電平時(shí)間來(lái)確定這些位。
中斷處理程序首先確定捕獲的計(jì)數(shù)是否足夠長(zhǎng)以至于不能被捕獲。啟動(dòng)/同步脈沖。我使用的各種設(shè)備的同步脈沖分別為4、9、10和14毫秒。允許的最小/最大同步值的define語(yǔ)句位于軟件的最前面,當(dāng)前設(shè)置為3毫秒和16毫秒。傳感器之間的位時(shí)間也有所不同,因此解碼位的算法需要考慮到這一點(diǎn)。將第一位的位時(shí)間保存為與第一位有顯著差異的后續(xù)位的時(shí)間。無(wú)法直接比較后續(xù)位時(shí)間,因此使用了“軟鍵因子”定義(“變量”)。假設(shè)始終將第一個(gè)數(shù)據(jù)位記錄為邏輯1,則開(kāi)始進(jìn)行位解碼。將保存該值,然后將其用于測(cè)試后續(xù)位。如果后續(xù)數(shù)據(jù)位計(jì)數(shù)在已保存值的方差窗口內(nèi),則也將其記錄為邏輯1。如果它在已保存值的方差窗口之外,則將其記錄為邏輯0。如果邏輯0位時(shí)間比第一個(gè)位時(shí)間短,則設(shè)置一個(gè)標(biāo)志來(lái)告訴軟件在顯示之前需要反轉(zhuǎn)字節(jié)。該算法失敗的唯一情況是消息中的位全為0。我們可以接受這種限制,因?yàn)檫@種消息是毫無(wú)意義的。
我感興趣的所有傳感器的消息長(zhǎng)度均為24個(gè)數(shù)據(jù)位,但是軟件不限于該長(zhǎng)度。有一個(gè)最多七個(gè)字節(jié)的緩沖區(qū)(可以添加更多字節(jié)),并定義了最小和最大消息長(zhǎng)度(以字節(jié)為單位)。該軟件設(shè)置為收集位,將它們轉(zhuǎn)換為字節(jié),暫時(shí)存儲(chǔ)它們,然后通過(guò)串行端口以ASCII格式輸出。觸發(fā)消息輸出的事件是收到新的啟動(dòng)/同步脈沖。
步驟4:數(shù)據(jù)記錄
該軟件已設(shè)置為通過(guò)Arduino的串行(TX)輸出以ASCII字符輸出轉(zhuǎn)換后的數(shù)據(jù)。制作PIC版本時(shí),我需要連接PC上的終端程序以顯示數(shù)據(jù)。 Arduino IDE的一個(gè)優(yōu)點(diǎn)是它具有內(nèi)置的串行監(jiān)視器功能。我將串行端口速率設(shè)置為115.2k,然后將“串行監(jiān)視器”窗口設(shè)置為相同的速率。這里的屏幕截圖顯示了一個(gè)典型的顯示,其中包含我擁有的各種傳感器的輸出。如您所見(jiàn),數(shù)據(jù)有時(shí)并不完美,但您可以輕松確定每個(gè)傳感器的真實(shí)值。
步驟5:Sample Receiver Software
我提供了一個(gè)示例軟件清單,該清單顯示了如何使用收集的信息為您的應(yīng)用程序接收一組特定的代碼。設(shè)置此示例以模擬我的Etekcity遠(yuǎn)程插座之一。一個(gè)命令打開(kāi)內(nèi)置在Nano(D13)中的LED,另一個(gè)命令關(guān)閉LED。如果您的Arduino中沒(méi)有內(nèi)置LED,請(qǐng)?zhí)砑?a target="_blank">電阻和LED,如圖所示。在實(shí)際應(yīng)用中,此功能將打開(kāi)/關(guān)閉電源插座的電源(使用繼電器或三端雙向可控硅開(kāi)關(guān))。同步時(shí)間,位時(shí)間和預(yù)期的數(shù)據(jù)字節(jié)均已預(yù)先定義好,以便于修改。您可以使用其余的任何數(shù)據(jù)線來(lái)打開(kāi)/關(guān)閉特定應(yīng)用程序的功能,等等。只需添加適用的命令代碼定義并在“回路”中替換LED開(kāi)/關(guān)邏輯即可滿足您的需求。
責(zé)任編輯:wv
-
射頻傳感器
+關(guān)注
關(guān)注
0文章
37瀏覽量
8364 -
Arduino
+關(guān)注
關(guān)注
189文章
6492瀏覽量
190150
發(fā)布評(píng)論請(qǐng)先 登錄
模擬傳感器與數(shù)字傳感器的優(yōu)缺點(diǎn)
無(wú)線網(wǎng)解碼器怎么連接
無(wú)線網(wǎng)解碼器怎么用
無(wú)線解碼器的質(zhì)量標(biāo)準(zhǔn)是什么
解碼器和控制器區(qū)別是什么
控制器解碼器的使用方法
遙控器解碼器怎么使用
全景聲解碼器

為什么好的播放器還要配解碼器
9740解碼器配什么光柵
光柵解碼器四根信號(hào)線怎么接
光柵解碼器損壞的表現(xiàn)有哪些
數(shù)字播放器和解碼器

飛騰云XMOS XU316解碼器

數(shù)字音頻解碼器和聲卡

評(píng)論