摘 要: 在采集不同高度的溫度時,在不同高度安置無線網(wǎng)絡(luò)傳感器成本高,無線傳感器的電源替換比較困難,為解決此問題,采用了簡易螺旋直升機(jī),內(nèi)置由AT89C51單片機(jī)、DS1820數(shù)字芯片,可實(shí)時采集不同高度的溫度。使用JF24D?B無線傳輸模塊將信號送至ARM7控制系統(tǒng)。監(jiān)控端通過無線信號接收并解析,在μClinux下進(jìn)行進(jìn)程調(diào)度和數(shù)據(jù)處理,并通過Python完成數(shù)據(jù)圖表的實(shí)時顯示,便于用戶查看當(dāng)前溫度做出正確決策。
關(guān)鍵詞: 溫度采集; JF24D?B; ARM7; μClinux; Python
中圖分類號: TN911?34; TP274+.2 文獻(xiàn)標(biāo)識碼: A 文章編號: 1004?373X(2014)02?0095?03
0 引 言
在工業(yè)現(xiàn)場,生產(chǎn)環(huán)境惡劣,不能長時間停留在現(xiàn)場采集溫度數(shù)據(jù),而有限傳輸具有溫度檢測難、可操作性差。高科技農(nóng)業(yè)現(xiàn)場,采集溫度時,布線困難復(fù)雜,成本高。為解決以上困難,采用無線方式。常用的無線方式為433 MHz小無線、ZigBee、CDMA/GPRS、3G等方式,考慮到性價比和現(xiàn)場情況,本系統(tǒng)采用JF24D?B完成無線收發(fā)。為了采集不同高度的溫度,可在不同高度安置無線網(wǎng)絡(luò)傳感器。但考慮到成本和傳感器的電源替換問題,采用簡易螺旋直升機(jī)升降不同高度來采集溫度。通過控制直升機(jī)的升降讓它達(dá)到測量高度進(jìn)行溫度測量并傳送控制單元處理,測量完畢返回便于無線傳感器的維護(hù)。
1 總電路設(shè)計
為了采集高空溫度,采用了簡易螺旋直升機(jī),內(nèi)置由AT89C51單片機(jī)、DS1820數(shù)字芯片,可實(shí)時采集不同高度的溫度。并通過JF24D?B模塊將信息送至ARM7開發(fā)板,ARM7開發(fā)板用于數(shù)據(jù)顯示和數(shù)據(jù)處理,JF24D?B用于數(shù)據(jù)獲取和命令下達(dá),控制直升機(jī)的升降。在ARM開發(fā)板上通過μClinux系統(tǒng)進(jìn)行數(shù)據(jù)的處理,軟件同時在RHEL 4.0上進(jìn)行編譯和處理。本設(shè)計選取對業(yè)界通用的C語言指令、Shell指令和Python指令。C語言指令主要是用于單片機(jī)AT89C51的驅(qū)動編程;Shell指令主要是用于ARM7開發(fā)板上的數(shù)據(jù)處;Python指令主要是用于數(shù)據(jù)圖像顯示。采用這幾個指令的原因是占用的空間小、執(zhí)行速度快、兼容性強(qiáng)。
系統(tǒng)整體框圖如圖1所示。
2 基于單片機(jī)的溫度采集無線傳感器模塊
2.1 硬件電路設(shè)計
硬件電路采用AT89C51單片機(jī)進(jìn)行控制。采用DS18B20進(jìn)行溫度采集。采用JF24D?B[1]進(jìn)行無線模塊的發(fā)送和接收,JF24D?B是一款低成本,小體積,高性能的全雙工無線通信模塊。控制直升飛機(jī)的升降采用另外一個無線模塊。溫度采集模塊中,單片機(jī)P1.0管腳連接DS18B20的DQ,用于采集現(xiàn)場溫度,P2口連接無線模塊JF24D?B。
2.2 基于單片機(jī)的溫度采集系統(tǒng)軟件設(shè)計
首先對程序的初始化,完成DS18B20和JF24D?B無線傳輸模塊的初始化狀態(tài)的設(shè)定。采用定時中斷,每隔10 s采集一次溫度,并進(jìn)入發(fā)射模式。
單片機(jī)發(fā)給JF24D?B無線發(fā)送模塊發(fā)射指令,同時LED2閃爍,隨之進(jìn)入接收模式。單片機(jī)等待ARM7發(fā)來的應(yīng)答信號20 ms,如果器件收到應(yīng)答,則LED1閃爍。器件沒有收到應(yīng)答則再發(fā)送無線模塊發(fā)射指令。主程序及中斷程序設(shè)計框圖如圖2,圖3所示。
3 基于ARM7的無線接收與控制模塊
3.1 ARM7簡介
ARM7是32位通用微處理器ARM(Advanced RISC Machines)家族中的一員,具有比較低的電源消耗和良好的性價比,基于(精簡指令)RISC結(jié)構(gòu),擁有比較高的指令處理能力和實(shí)時中斷響應(yīng)能力。ARM指令集由于應(yīng)用了流水線技術(shù),指令處理和存儲系統(tǒng)的各個部分都可以連續(xù)運(yùn)行,提高運(yùn)行速度。采集到的溫度數(shù)據(jù)通過無線傳送模塊送至ARM7處理,提高系統(tǒng)數(shù)據(jù)處理能力,便于完成與用戶友好交互界面顯示。
3.2 JF24D?B無線傳輸模塊的信號解析
進(jìn)行數(shù)據(jù)傳輸就必須遵循一定的協(xié)議,在該設(shè)計中使用的JF240?B無線傳輸模塊使用的是Modbus協(xié)議來進(jìn)行數(shù)據(jù)的傳輸和解析。Modbus協(xié)議規(guī)定了消息、數(shù)據(jù)的結(jié)構(gòu)、命令和應(yīng)答方式,數(shù)據(jù)通信采用MASTER/SLAVE方式,MASTER端發(fā)出數(shù)據(jù)請求消息,SLAVE端接收到正確消息后就發(fā)送數(shù)據(jù)到MASTER端也可直接發(fā)消息修改SLAVE端的數(shù)據(jù),實(shí)現(xiàn)雙向讀寫。
為了將直升機(jī)上的JF24D?B和控制器上的JF24D?B相互關(guān)聯(lián)需要將節(jié)點(diǎn)映射為Modbus設(shè)備及其寄存器,即建立地址映射表。Modbus串行鏈路PDU提供了地址域,即Modbus地址[2]。地址映射表被建立后以鏈表的形式存在內(nèi)存中,每個節(jié)點(diǎn)定義為相應(yīng)的結(jié)構(gòu)體類型。
3.3 μClinux進(jìn)程調(diào)度[3?4]
通過進(jìn)程調(diào)度的策略選擇下一個要執(zhí)行的進(jìn)程:首先對所有進(jìn)程進(jìn)行檢測,喚醒任何一個得到信號的進(jìn)程,即改變進(jìn)程的state屬性;然后根據(jù)時間片和優(yōu)先級調(diào)度機(jī)制來計算處于就緒隊(duì)列中每個進(jìn)程的綜合優(yōu)先級,其計算方法由goodness()函數(shù)實(shí)現(xiàn);接著選擇綜合優(yōu)先級最高的進(jìn)程作為隨后要執(zhí)行的進(jìn)程,若就緒隊(duì)列中沒有可調(diào)度的,則重新分配時間片,即改變進(jìn)程的counter屬性值,并利用switch_to()函數(shù)進(jìn)行進(jìn)程切換。
3.4 μClinux中的socket處理JF24D?B數(shù)據(jù)
通過JF24D?B完成點(diǎn)對點(diǎn)的數(shù)據(jù)通信,會在兩點(diǎn)之間建立一個網(wǎng)絡(luò)通信機(jī)制,當(dāng)然在這個機(jī)制同時還需要Modbus協(xié)議的協(xié)助。網(wǎng)絡(luò)的socket數(shù)據(jù)傳輸是一種特殊的I/O,socket也是一種文件描述符。socket()函數(shù)返回一個整形的socket描述符,隨后的連接建立、數(shù)據(jù)傳輸?shù)炔僮鞫际峭ㄟ^socket實(shí)現(xiàn)的。經(jīng)常用的socket類型有兩種:一種是流式socket:SCOK_STREAM;另一種是socket:SOCK_DGRAM。在該設(shè)計中,使用的是SOCK_STREAM的類型進(jìn)行數(shù)據(jù)連接傳輸應(yīng)用。socket在實(shí)際應(yīng)用中的設(shè)計流程圖如圖4所示。
3.5 Python讀取數(shù)據(jù)并顯示[5]
將socket處理完成的數(shù)據(jù)存放在sqlite中,在此需要對sqlite進(jìn)行操作,將數(shù)據(jù)讀取出來之后進(jìn)行數(shù)據(jù)顯示,繪制圖表。為了讓數(shù)據(jù)能夠完全的同步,需要將Python與sqlite數(shù)據(jù)庫進(jìn)行鏈接。具體的連接步驟如下:找個Pysqlite,這是Python訪問sqlite的接口,網(wǎng)址為http://initd.org/tracker/pysqlit,根據(jù)自己的Python版本選用Pysqlite 2.3或2.4。編寫程序,顯示圖表。在ARM7中顯示的當(dāng)前溫度和不同高度溫度圖表如圖5,圖6所示。
4 結(jié) 論
采用基于51單片機(jī)的溫度采集系統(tǒng)簡單,使用JF24D?B無線傳輸模塊,其協(xié)議可共享開放源代碼,并解決了315 MHz和433 MHz無法解決的同頻干擾問題。控制器采用ARM7系統(tǒng),通過無線信號解析和接收,在μClinux下進(jìn)行進(jìn)程調(diào)度和數(shù)據(jù)處理,并通過Python完成數(shù)據(jù)圖表的顯示。整個系統(tǒng)具有成本低、可靠性高、可讀性強(qiáng),有效地解決了對不同高度的溫度采集控制問題。
參考文獻(xiàn)
[1] 李登科.非電起爆網(wǎng)路無線監(jiān)測系統(tǒng)的研究[J].武漢理工大學(xué)學(xué)報,2011,34(3):111?114.
[2] 閔聯(lián)營.μClinux進(jìn)程調(diào)度器的實(shí)現(xiàn)分析[J].微計算機(jī)信息,2008,24(5):41?43.
[3] 胡四泉.基于無線傳感器網(wǎng)絡(luò)的Modbus虛擬設(shè)備[J].計算機(jī)應(yīng)用,2011,6(31):8?11.
[4] 蔣偉.應(yīng)用于無線傳感網(wǎng)節(jié)點(diǎn)的μClinux的裁減與移植[D].南京:南京郵電大學(xué),2011.
[5] 康計良.Python語言的可視化編程環(huán)境的設(shè)計與實(shí)現(xiàn)[D].西安:西安電子科技大學(xué),2012.
[6] 岳彬,余向明,顧志銀,等.防爆型無線傳感器網(wǎng)絡(luò)信息采集節(jié)點(diǎn)的設(shè)計[J].現(xiàn)代電子技術(shù),2013,36(16):91?94.