單片機(jī)的自組織網(wǎng)絡(luò)互同步節(jié)點(diǎn)設(shè)計(jì)
圖中閾值(Pth)表示節(jié)點(diǎn)閃爍的閾值,當(dāng)閃爍能力(Power)達(dá)到這個(gè)值時(shí)節(jié)點(diǎn)開始閃爍。T為節(jié)點(diǎn)閃爍的周期。從圖2可以看出,初始時(shí)刻兩個(gè)節(jié)點(diǎn)雖有共同的閃爍周期,但兩節(jié)點(diǎn)開始閃爍的時(shí)刻不同,下方節(jié)點(diǎn)閃爍能力要更晚到達(dá)閾值,即閃爍的開始時(shí)刻要晚于上方節(jié)點(diǎn)。而當(dāng)上方節(jié)點(diǎn)開始閃爍的時(shí)刻,通過光敏電阻,下方節(jié)點(diǎn)偵測到了這一變化,并將自己下一次的發(fā)光時(shí)刻提前,發(fā)光周期縮短為新的周期(T1)當(dāng)然僅通過一次提前并不能做到兩者同步,但是經(jīng)過n次調(diào)整,兩者的閃爍時(shí)刻逐次逼近,而且下方節(jié)點(diǎn)新的周期(Tn)也恢復(fù)為原周期(T),兩者最終達(dá)到了同時(shí)刻同周期的互同步。該算法并不受節(jié)點(diǎn)規(guī)模的影響,因此網(wǎng)絡(luò)規(guī)模可以靈活擴(kuò)展。
2.2 程序設(shè)計(jì)實(shí)現(xiàn)
從上面論述可知算法實(shí)現(xiàn)并不復(fù)雜,下面只對關(guān)鍵代碼做簡要描述,流程圖如圖3所示。本文引用地址:http://www.ex-cimer.com/article/170448.htm
節(jié)點(diǎn)上電復(fù)位以后,程序的初始化部分對節(jié)點(diǎn)硬件進(jìn)行相應(yīng)的初始化,主要是對模/數(shù)轉(zhuǎn)換(ADC)進(jìn)行設(shè)置,選擇對應(yīng)的轉(zhuǎn)換通道并使能,設(shè)置發(fā)光二極管為關(guān)閃爍狀態(tài)。
需要注意的是,由于系統(tǒng)采用光敏電阻作為傳感器件,因此節(jié)點(diǎn)之間的相互感應(yīng)不可避免地會受到外界光照的干擾,也就是說即使在鄰近節(jié)點(diǎn)不閃爍時(shí),閃爍能力(Power)的初值也不會為0。為此,本程序選擇外界的背景光作為基礎(chǔ)門限值(threshold),這個(gè)值可以通過模/數(shù)轉(zhuǎn)換(ADC)多次采樣再做平均獲得。相關(guān)代碼實(shí)現(xiàn)如下:
代碼中對4次采樣值進(jìn)行了平均,考慮到干擾的問題,對平均值再加80進(jìn)行調(diào)整。
隨后,程序進(jìn)入主循環(huán),在主循環(huán)中主要完成三件工作。
首先是閃爍能力(Power)值的遞增。如前面算法描述,當(dāng)它逐漸增加達(dá)到閃爍閾值(FLASH_POWER)時(shí),二極管將開始有節(jié)奏地閃爍。為了保證快速和精準(zhǔn),閃爍能力值的遞增并不是均勻的,而是分段區(qū)別進(jìn)行的。閃爍能力值比較小時(shí),以較大的增量累積(如Power+=16),隨
著其逐漸接近閾值,增量減小,比如當(dāng)Power>6000后,以1為遞增幅度進(jìn)行(如Power+=1)。
在計(jì)算了節(jié)點(diǎn)閃爍的能力后,程序進(jìn)入第二個(gè)階段,主要工作是修正閃爍能力值。考慮到外界干擾,節(jié)點(diǎn)可能會受到突然的外界強(qiáng)光照射影響,當(dāng)光照很強(qiáng)時(shí),節(jié)點(diǎn)將無法正確感知鄰近節(jié)點(diǎn)的變化,為此還需要做相應(yīng)異常處理。相關(guān)代碼如下:
該段程序中首先進(jìn)行采樣,獲得當(dāng)前的光照(light)值,如果其大于預(yù)設(shè)的環(huán)境光照常量(ENV_LIGHT),則認(rèn)為外界光照太強(qiáng),此時(shí)節(jié)點(diǎn)之間已經(jīng)無法進(jìn)行有效地相互感應(yīng),出現(xiàn)異常。這里將節(jié)點(diǎn)延時(shí)一段時(shí)間進(jìn)入休眠狀態(tài),隔一段時(shí)間再做檢測。考慮到選用的單片機(jī),環(huán)境光照常量設(shè)為總量程的一半較為合適。如果外界光照對節(jié)點(diǎn)的光感應(yīng)處在正常范圍,則再判斷當(dāng)前的光照(light)是否大于前面計(jì)算的基礎(chǔ)門限值(threshold)。當(dāng)其值大于此基礎(chǔ)值時(shí),表明鄰近有節(jié)點(diǎn)在閃爍,且該節(jié)點(diǎn)晚于鄰近節(jié)點(diǎn)的閃爍,因此需要對閃爍能力進(jìn)行快速調(diào)整(如Power+=200)。這個(gè)增量遠(yuǎn)遠(yuǎn)大于常規(guī)的閃爍能力積累,執(zhí)行效果就是將節(jié)點(diǎn)下一次開始閃爍時(shí)刻大大提前了。
最后的工作就比較簡單了,通過判斷閃爍能力是否大于閃爍閾值(FLASH_POWER),當(dāng)大于時(shí)設(shè)置發(fā)光二極管為開閃爍,當(dāng)小于時(shí)設(shè)置為關(guān)閃爍。
程序主體是一個(gè)死循環(huán),根據(jù)需要還可添加電源管理、中斷處理等其他功能模塊。文中主要僅論述了兩個(gè)節(jié)點(diǎn)間的互同步實(shí)現(xiàn),但文中所述算法可以不加修改就適用于節(jié)點(diǎn)數(shù)更多的網(wǎng)絡(luò)。這正體現(xiàn)了自組織網(wǎng)絡(luò)的特點(diǎn):其中功能有限的節(jié)點(diǎn)利用局部信息就可達(dá)到整個(gè)網(wǎng)絡(luò)的高度協(xié)調(diào)一致。
結(jié)語
本文詳細(xì)闡述了一種利用單片機(jī)進(jìn)行自組織網(wǎng)絡(luò)互同步算法學(xué)習(xí)的方法,網(wǎng)絡(luò)同步的效果良好。設(shè)計(jì)的節(jié)點(diǎn)具有簡單直觀、網(wǎng)絡(luò)規(guī)模擴(kuò)展靈活的特點(diǎn),是一個(gè)對自組織網(wǎng)絡(luò)的很好的實(shí)體模擬,對于掌握無線傳感網(wǎng)或多智能體等需要進(jìn)行同步的自組織組網(wǎng)技術(shù)有一定的借鑒意義。
評論