//Logo Image
作者:李亦陞(2012-08-04);推薦:徐業良(2012-09-20)
附註:本文為一百學年度元智大學機械工程研究所李亦陞碩士論文「居家環境下遠距日常生活活動監測系統之開發」第三章。

第三章 Arduino分散式資料伺服器之開發

本研究使用Arduino開發日常生活活動監測系統之分散式資料伺服器(Distributed Data Server, DDS)。本章介紹如何擴充建置Arduino分散式資料伺服器(Arduino DDS),並針對Arduino DDS程式功能做說明。

3.1 Arduino DDS硬體開發

Arduino是一塊基於開放原始碼的I/O介面板,使用者可以Arduino為基礎,擴展各自需求的硬體,目前已發展出許多不同版本供使用者自行選擇。Arduino的微處理器使用C語言開發環境,使用者可在Arduino開發板上外接各種電子元件,如LED、喇叭、馬達、開關、溫濕度感測器、紅外線發射與接收器、時間晶片、LCD顯示裝置等,並且可以外接WiFiXBeeBluetoothRFIDGPS等各種通訊模組。

本研究將選取Arduino Ethernet做為本系統開發的基礎,系統中分散式資料伺服器之功能需求包含接收感測訊號、紀錄時間、資料儲存、網路通訊等。Arduino Ethernet主要包含控制核心ATmega328單晶片、I2C連接腳位、USB to TTL連接埠、Micro SD插孔與RJ-45網路插孔(圖3-1),根據上述之功能再透過硬體的擴充即可達到DDS的功能需求;電源則可透過DC5~20V電源或以Micro SD連結USB電源驅動各個模組。

3-1. Arduino Ethernet簡介

第二章中所述之感測器使用XBee模組傳送資料,Arduino Ethernet中需擴充XBee模組才可與感測器溝通;Arduino Ethernet中不包含時間的晶片,故需擴充時間模組才可記錄收到感測器資料之時間。以下將各別說明XBee模組與時間模組:

(1) XBee擴充模組

3-2XBee擴充模組可與Arduino EthernetUART(RS-232)連結,模組上有5LED指示燈(4個系統指示燈、1個電源指示燈),可由燈號判斷ZigBee資料的傳輸狀況,而供電則透過Arduino Ethernet供給。

(2) PCF8563時間模組

PCF8563模組是基於I2C接口的時鐘模組(圖3-3),透過SDASCL腳位將時間燒錄至晶片中,簡單的日曆即可被建立於此晶片中,此外後排還有另一組插孔提供另一組I2C使用。此模組有兩種供電模式,一是由外部提供3.3V的電壓,另一是由內部的水銀電池提供電壓。

3-2. Xbee擴充模組

3-3. PFC8563時間模組

Xbee擴充模組與PCF8563時間模組擴充於Arduino Ethernet中,即可達到本研究所需分散式資料伺服器DDS之功能,Arduino DDS硬體成品如圖3-4

3-4. Arduino DDS

3.2 Arduino DDS軟體撰寫

如前所述Arduino的使用類似JavaC語言的開發環境,基本的Arduino程式語法被分為三部分:

(1)     編譯程式碼與宣告:include, char, int…等;

(2)     啟動Arduino時所需設定之參數:void setup

(3)     單晶片在運作時,重複執行的每一項工作項目,撰寫的程式內容:void loop

本研究在軟體的撰寫上依功能不同可區分為網際網路設定、時間設定、歷史資料儲存、即時資料顯示與自動重新開機等五個部份,以下將分別說明五種功能。下圖3-5Arduino DDS程式之流程圖。

3-5. Arduino DDS程式流程圖

(1)  網際網路設定程式

網路設定與一般網卡相同,Arduino Ethernet上需設定內部的網卡號、IP位址、子網路遮罩、預設閘道才可與外部之網際網路溝通,圖3-6為程式所需設定之macIPsubnetgateway

3-6. 網際網路設定程式

(2)  時間設定程式

Arduino透過I2C通訊,將年月日(rtc.setDate)與時分秒(rtc.setTime)燒錄至PCF8563時間晶片中(圖3-7),但為避免Arduino DDS每次開機都會重新設定PCF8563時間,因此燒錄完後必須將此段程式自Arduino刪除。為了讓PCF8563時間晶片可以獨立計算時間,所以由內部的水銀電池提供電壓。

3-7. 時間設定程式

(3)  歷史資料儲存程式

Arduino DDS接收到感測器所傳來的資料,會將資料先放置暫存資料中(圖3-8),所接收到的原始資料如圖3-9中之終端機所示,依序為年月日、時分秒、感測器編號、溫度十位數、溫度個位數、溫度小數點以下第一位、濕度十位數、濕度個位數、濕度小數點以下第一位、人體紅外線累計資料、及電流感測器累計資料,連續累計10分鐘的資料後,將資料儲存並重新計算,第一次儲存會先開啟新的檔案將資料儲存於檔案中,每儲存一筆資料都會換行以便使用者瀏覽(圖3-10)。

3-8. 暫存資料程式

3-9. Arduino DDS終端機接收值

3-10. 歷史資料儲存程式

(4)  即時資料顯示程式

Arduino DDS接收到資料並將接收放置於暫存檔中,可直接將暫存資料放置於網頁上排版顯示(圖3-11),供使用者瀏覽最新的即時資料。

3-11. 即時資料排版程式

(5)  自動重新開機程式

程式最後加入了自動重新開機的程式(圖3-12),再此設定為在5959秒時DDS將重新自動啟動,亦即每一小時重開機一次,避免程式有長期當機的情形發生。

3-12. 自動重新開機程式

3.3 網頁瀏覽

Arduino DDS與感測器被建立於家中,可透過ZigBee接收到人體紅外線感測器與電流感測器所傳來的資料,遠端使用者便可經由網路瀏覽器開啟已整理的資料,即時資料與歷史資料是由輸入IP尾端所加上的字元不同來選擇。圖3-13為網頁瀏覽的程式,以下將各別敘述兩項資料顯示的功能。

3-13. 網頁瀏覽程式

3.3.1 即時資料顯示

使用者在瀏覽器中輸入IP再加入“realtimeda”(如http://140.138.40.190/realtimeda/)後即可透過Arduino DDS的網路功能顯示即時資料,如下圖3-14所示,感測器ABCE為人體紅外線感測器之即時資料,感測器D為電流感測器之即時資料。

3-14. 網頁瀏覽即時資料

3.3.2 歷史資料

使用者在瀏覽器中輸入IP再加入“date”(如http://140.138.138.110/120507.TXT/即可透過Arduino DDS的網路功能顯示歷史資料,如下圖3-15所示,DDS每十分鐘會將感測器ABCDE的資料依序儲存。

3-15. 網頁瀏覽歷史資料