范欽武
(中國民用航空汕頭空中交通管理站 氣象臺,廣東 汕頭 515041)
20 世紀(jì)以來我國民用航空事業(yè)飛速發(fā)展,空管的保障壓力也與日俱增,越來越多的導(dǎo)航臺站和雷達臺站的投入使用。對于這類事關(guān)航空安全的重要外部臺站,對這類精密設(shè)備的運行環(huán)境有著更加嚴(yán)格的要求,實時準(zhǔn)確的監(jiān)控機房溫濕度,保證設(shè)備在一個穩(wěn)定的空氣環(huán)境中運行對提高設(shè)備的可靠運行和延長設(shè)備的工作壽命有著重要的意義。本文主要是介紹如何利用開源硬件arduino 和enc28j60 來快速搭建一個溫濕度監(jiān)控系統(tǒng)。
系統(tǒng)主要分為硬件部分和軟件部分。硬件部分主要有arduino 控制板,以太網(wǎng)模塊enc28j60 和溫濕度傳感器sht15。通過arduino 控制板控制溫濕度傳感器實時測量周圍環(huán)境的溫濕度數(shù)據(jù),通過以太網(wǎng)模塊將采集到的溫濕度分發(fā)到交換機中。軟件上主要是采用C/S 模式的結(jié)構(gòu),各個傳感器測量到的數(shù)據(jù)通過udp 傳輸?shù)椒?wù)器端,在服務(wù)器端用html 和javascript 開發(fā)部署一個web 站點。值班人員過web 頁面就能實時監(jiān)控到各個外臺站的機房環(huán)境。系統(tǒng)的整體框圖如下所示。
圖1
本次系統(tǒng)中采用的arduino 控制板型號主要是arduino uno。UNO的處理器核心是ATmega328,包括了片上32KB Flash,其中0.5KB 用于Bootloader。同時還有2KB SRAM 和1KB EEPROM。同時具有14 路數(shù)字輸入/輸出口(其中6 路可作為PWM 輸出),6 路模擬輸入,一個16MHz 晶體振蕩器,一個USB 口,一個電源插座,一個ICSP header 和一個復(fù)位按鈕。同時還提供了一路串口信號RX(0號)、TX(1號):與內(nèi)部ATmega8U2 USB-to-TTL 芯片相連,提供TTL 電壓水平的串口接收信號。USB 口附近有一個可重置的保險絲,對電路起到保護作用。當(dāng)電流超過500mA 是會斷開USB 連接。UNO 已經(jīng)發(fā)布到第三版,與前兩版相比有以下新的特點:在AREF 處增加了兩個管腳SDA 和SCL,支持I2C 接口;增加IOREF 和一個預(yù)留管腳,將來擴展板將能兼容5V 和3.3V 核心板。改進了復(fù)位電路設(shè)計。USB 接口芯片由ATmega16U2 替代了ATmega8U2。控制器上還可以通過片上的DC-DC產(chǎn)生一個3.3V 和5V 的電壓。
enc28j60 是帶有行業(yè)標(biāo)準(zhǔn)串行外設(shè)接口SPI 的獨立以太網(wǎng)控制器。它可作為任何配備有SPI 的控制器的以太網(wǎng)接口。
enc28j60 符合IEEE 802.3 的全部規(guī)范,采用了一系列包過濾機制以對傳入數(shù)據(jù)包進行限制。它還提供了一個內(nèi)部DMA 模塊,以實現(xiàn)快速數(shù)據(jù)吞吐和硬件支持的IP 校驗和計算。與主控制器的通信通過兩個中斷引腳和SPI 實現(xiàn),數(shù)據(jù)傳輸速率高達10Mb/s。
enc28j60 由七個主要功能模塊組成:
(1)SPI 接口—充當(dāng)主控制器和enc28j60 之間通信通道。(2)控制寄存器—用于控制和監(jiān)視enc28j60。
(3)雙端口RAM 緩沖器—用于接收和發(fā)送數(shù)據(jù)包。
(4)判優(yōu)器—當(dāng)DMA、發(fā)送和接收模塊發(fā)出請求時對RAM 緩沖器的訪問進行控制。
(5)總線接口—對通過SPI 接收的數(shù)據(jù)和命令進行解析。
(6)MAC 模塊——實現(xiàn)符合IEEE 802.3 標(biāo)準(zhǔn)的MAC 邏輯。
(7)PHY(物理層)模塊——對雙絞線上的模擬數(shù)據(jù)進行編碼和譯碼。
在本系統(tǒng)設(shè)計中,主要是用SPI 接口和arduino 進行通信,其對應(yīng)管腳如下所示
表1
要能正常的使用enc28j60 還需要庫文件的支持,支持的第三方庫有非常多,其中以GitHub 上的EtherCard 庫和UIPEthernet 庫最為廣泛使用,但是筆者在使用EtherCard 庫的時候,發(fā)現(xiàn)如果接入交換機或者路由器的話,服務(wù)器端就沒有辦法正確的接收到客戶端發(fā)來的數(shù)據(jù),所以本次系統(tǒng)設(shè)計中使用的是UIPEthernet 庫。將下載好的庫文件放入到對應(yīng)的庫文件夾中就可以正常的調(diào)用了。本次實例中我們主要調(diào)用到的是庫里面的udp.beginPacket()和udp.write()函數(shù)。
udp.beginPacket()函數(shù)用以初始化服務(wù)器的ip 和udp 端口號。
success=udp.beginPacket(IPAddress(192,168,1,5),5000);
udp.write () 函數(shù)將傳感器的數(shù)據(jù)通過udp 數(shù)據(jù)包發(fā)送到服務(wù)器端。
success=udp.write(senorsdata);
sht15 屬于Sensirion 溫濕度傳感器家族中的貼片封裝系列。傳感器將傳感元件和信號處理電路集成在一塊微型電路板上,輸出完全標(biāo)定的數(shù)字信號。傳感器采用專利的CMOSens○R技術(shù),確保產(chǎn)品具有極高的可靠性與卓越的長期穩(wěn)定性。傳感器包括一個電容性聚合體測濕敏感元件、一個用能隙材料制成的測溫元件,并在同一芯片上,與14位的A/D 轉(zhuǎn)換器以及串行接口電路實現(xiàn)無縫連接。因此,該產(chǎn)品具有品質(zhì)卓越、響應(yīng)迅速、抗干擾能力強、性價比高等優(yōu)點。
各個引腳的定義如下圖所示:
表2 SHT1x 引腳分配,NC 保持懸空
其中sht15 的供電電壓范圍為2.4V-5.5V,建議工作電壓為3.3V。在電源引腳(VDD,GND)之間須加一個100nF 的電容,用以去耦濾波。串行時鐘輸入SCK 用于微處理器與SHT1x 之間的通訊同步。串行數(shù)據(jù)DATA 引腳為三態(tài)結(jié)構(gòu),用于讀取傳感器數(shù)據(jù)。當(dāng)向傳感器發(fā)送命令時,DATA 在SCK 上升沿有效且在SCK 高電平時必須保持穩(wěn)定。DATA 在SCK 下降沿之后改變。為確保通訊安全,DATA 的有效時間在SCK 上升沿之前和下降沿之后應(yīng)該分別延長至TSU and THO。當(dāng)從傳感器讀取數(shù)據(jù)時,DATA TV 在SCK 變低以后有效,且維持到下一個SCK 的下降沿。為避免信號沖突,微處理器應(yīng)驅(qū)動DATA 在低電平。需要一個外部的上拉電阻(例如:10kΩ)將信號提拉至高電平。
典型的應(yīng)用電路如下圖所示:
圖2
要使用sht15 同樣也是需要庫文件的支持,在GitHub 上下載好SHT1x 庫文件并放入庫文件夾就可以調(diào)用庫文件夾里已經(jīng)寫好的函數(shù)。本實例中主要用到的是sht1x.readTemperatureC () 和sht1x.readHumidity()。具體的例子如下所示:
系統(tǒng)整體的硬件結(jié)構(gòu)圖如下所示:
圖3
各個外臺站的傳感器數(shù)據(jù)通過udp 的方式傳輸?shù)椒?wù)器端,在服務(wù)器端,用Python 腳本編寫了2 個小模塊,一個是udpmonitor 模塊,用來監(jiān)聽udp 數(shù)據(jù)包,另外一個是datacsv 模塊,用于將監(jiān)聽到的傳感器數(shù)據(jù)存入到服務(wù)器上的csv 文件中。
在服務(wù)器端可以使用IIS 或者Apache 部署web 服務(wù)器,為了能夠讓數(shù)據(jù)更加直觀的以圖表的形式顯示出來,在監(jiān)控頁面里調(diào)用了一個叫做Highcharts 的圖表庫,純javascript 編寫的。為了能夠引用highcharts 文件,需要將下載好的文件放入本地的js 目錄中,同時還需要有jQuery 的支持,所以還要引入jQuery 文件。將下載好的文件放入js 目錄中后,在自己編寫的監(jiān)控主頁里添加如下的代碼:
打開瀏覽器輸入主頁的地址后顯示以下的界面(圖表中的數(shù)據(jù)為測試數(shù)據(jù))
圖4
Arduino 素來有電子積木的美稱,通過這個溫濕度監(jiān)控系統(tǒng)的設(shè)計過程,我們也不難發(fā)現(xiàn),只要通過引用正確的庫文件和對庫文件接口的簡單認(rèn)知,就能夠?qū)⒏鱾€硬件簡單快速搭建運行起來。而且正是由于開源硬件的發(fā)展,本次設(shè)計方案里所花費的總的成本不超過過60 元,如果選用arduino mini 板的話,成本可以更低至30 元左右。當(dāng)然,無論采用什么方案都好,都是為了更加準(zhǔn)確和實時的監(jiān)控各種導(dǎo)航設(shè)備的運行環(huán)境,為保障設(shè)備穩(wěn)定運行,保障航空安全提供更有力的支持。