羅 潛,吉藝寬,李美娣
(廣東梅州職業(yè)技術(shù)學(xué)院,廣東 梅州 514011)
水產(chǎn)業(yè),是中國(guó)農(nóng)業(yè)經(jīng)濟(jì)發(fā)展的重要支柱。近年來(lái),隨著水產(chǎn)養(yǎng)殖業(yè)的高速發(fā)展,養(yǎng)殖水體環(huán)境污染問(wèn)題日益突出,破壞了水體生態(tài)平衡,給養(yǎng)殖戶造成了嚴(yán)重的經(jīng)濟(jì)損失[1-3]。因此,水產(chǎn)養(yǎng)殖水質(zhì)監(jiān)測(cè)能力的提升就顯得尤為重要。為改善水產(chǎn)養(yǎng)殖水質(zhì)監(jiān)測(cè)操作復(fù)雜、監(jiān)測(cè)周期長(zhǎng)、監(jiān)測(cè)參數(shù)單一等局限性,設(shè)計(jì)了一套基于STM32 和ZigBee的水產(chǎn)養(yǎng)殖水質(zhì)參數(shù)監(jiān)測(cè)系統(tǒng),能夠?qū)崿F(xiàn)同步實(shí)時(shí)采集、傳輸,顯示水體溫度、酸堿度、溶解氧和氨氮,以及異常報(bào)等警功能。
該系統(tǒng)以STM32F103 微控系統(tǒng)、ZigBee 無(wú)線傳感器網(wǎng)絡(luò)和多路傳感器為核心,分為數(shù)據(jù)采集端、數(shù)據(jù)傳輸端和數(shù)據(jù)監(jiān)測(cè)端三大部分[4]。系統(tǒng)總體結(jié)構(gòu)如圖1 所示。
數(shù)據(jù)采集端位于系統(tǒng)底層,主要由多路傳感器(溫度傳感器、酸堿度傳感器、溶解氧傳感器、氨氮傳感器)、信號(hào)調(diào)理模塊和數(shù)據(jù)采集系統(tǒng)(STM32F103 微控系統(tǒng))組成。多路傳感器實(shí)時(shí)采集水質(zhì)參數(shù)原始數(shù)據(jù),信號(hào)調(diào)理模塊對(duì)采集到的微弱信號(hào)進(jìn)行調(diào)理放大,數(shù)據(jù)采集系統(tǒng)轉(zhuǎn)換打包數(shù)據(jù),并將數(shù)據(jù)通過(guò)串口傳送給終端節(jié)點(diǎn)。數(shù)據(jù)傳輸端位于系統(tǒng)中間層,主要由終端節(jié)點(diǎn)(ZigBee 無(wú)線通訊模塊)和協(xié)調(diào)器節(jié)點(diǎn)(ZigBee 無(wú)線通訊模塊)組成。終端節(jié)點(diǎn)按照Z(yǔ)igBee 無(wú)線網(wǎng)絡(luò)通訊協(xié)議將數(shù)據(jù)采集系統(tǒng)打包的數(shù)據(jù)傳送給協(xié)調(diào)器節(jié)點(diǎn),協(xié)調(diào)器節(jié)點(diǎn)按照Z(yǔ)igBee 無(wú)線網(wǎng)絡(luò)通訊協(xié)議接收數(shù)據(jù),并將數(shù)據(jù)通過(guò)串口傳送給數(shù)據(jù)監(jiān)測(cè)系統(tǒng)。數(shù)據(jù)監(jiān)測(cè)端位于系統(tǒng)頂層,主要由數(shù)據(jù)監(jiān)測(cè)系統(tǒng)(STM32F103微控系統(tǒng))、OLED 顯示模塊、蜂鳴警報(bào)模塊和獨(dú)立按鍵模塊組成。數(shù)據(jù)監(jiān)測(cè)系統(tǒng)對(duì)協(xié)調(diào)器節(jié)點(diǎn)傳送來(lái)的數(shù)據(jù)進(jìn)行統(tǒng)一分析處理,OLED 顯示模塊實(shí)時(shí)顯示水質(zhì)參數(shù)數(shù)據(jù),蜂鳴器報(bào)警模塊在水質(zhì)參數(shù)超出閾值時(shí)會(huì)發(fā)出“嘀嘀”報(bào)警聲,獨(dú)立按鍵模塊調(diào)控水質(zhì)參數(shù)閾值和關(guān)閉報(bào)警聲。
該設(shè)計(jì)采用Altium Design 進(jìn)行系統(tǒng)電路原理圖和PCB設(shè)計(jì),在設(shè)計(jì)過(guò)程中選用了常用的典型電路,同時(shí)加強(qiáng)了電路抗干擾設(shè)計(jì)。系統(tǒng)電路原理圖如圖2 所示。
圖2 系統(tǒng)電路原理圖Fig.2 The system circuit schematic diagram
該設(shè)計(jì)以STM32F103 最小系統(tǒng)為微控系統(tǒng),主要由復(fù)位電路、振蕩電路、啟動(dòng)配置、USB 轉(zhuǎn)串口、調(diào)試接口和電源組成[5]。STM32F103 是一款高性能的64 腳微處理器,其電源腳和I/O 腳的電壓范圍均為2.0V ~3.6V,具有128KB Flash、20KB SRAM 的高速嵌入式記憶容量,內(nèi)置4 個(gè)通用16 位Timer、3 個(gè)12 位ADC、3 個(gè)USART、2 個(gè)I2C、2 個(gè)SPI、1 個(gè)PWM、1 個(gè)USB 以及1 個(gè)CAN[6]。
復(fù)位電路的功能是使系統(tǒng)恢復(fù)至初始狀態(tài),包括上電自動(dòng)復(fù)位和按鍵手動(dòng)復(fù)位。該設(shè)計(jì)采用RC 復(fù)位電路。在系統(tǒng)剛上電時(shí),電阻R5 對(duì)電容C17 充電,RST(Pin7)為低電平,系統(tǒng)進(jìn)入復(fù)位狀態(tài);當(dāng)電容C17 兩端的電壓達(dá)到門(mén)限電壓值時(shí),RST 為高電平,系統(tǒng)進(jìn)入正常工作狀態(tài)。手動(dòng)按下K0 鍵時(shí),電容C17 兩端放電,RST 為低電平,系統(tǒng)進(jìn)入復(fù)位狀態(tài);松開(kāi)K0 鍵后,電容C17 重復(fù)上述充電過(guò)程,系統(tǒng)進(jìn)入正常工作狀態(tài)。
振蕩電路的功能是產(chǎn)生穩(wěn)定的時(shí)鐘頻率,供STM32F103 微處理器使用。該設(shè)計(jì)采用1 個(gè)8MHz 高速晶振Y1 與2 個(gè)20PF 電容C15、C16 并聯(lián)接地,晶振Y1 兩端分別與STM32F103 微處理器的XTAL1(Pin5)、XTAL2(Pin6)連接,組成外置振蕩器,驅(qū)動(dòng)STM32F103 微處理器正常運(yùn)行。
STM32F103 微處理器的啟動(dòng)模式有內(nèi)置Flash、系統(tǒng)存儲(chǔ)器和內(nèi)置SRAM 3 種不同的模式,由BOOT0(Pin60)和BOOT1(Pin28)兩個(gè)引腳的電平狀態(tài)共同決定。編寫(xiě)的常用代碼都存放在Flash 中,啟動(dòng)應(yīng)該從代碼區(qū)開(kāi)始。因此,該設(shè)計(jì)采用內(nèi)置Flash 啟動(dòng)方式,BOOT0 和BOOT1 兩個(gè)引腳分別串聯(lián)10K 的電阻R3、R4 接地置于低電平。
USB 轉(zhuǎn)串口是實(shí)現(xiàn)STM32F103 微處理器與PC 之間的通信,該設(shè)計(jì)采用CH340 轉(zhuǎn)換芯片。CH340 轉(zhuǎn)換芯片需要時(shí)鐘頻率驅(qū)動(dòng)工作,其XO 和XI 之間連接1 個(gè)12MHz的晶體Y2,晶體Y2 兩端并聯(lián)30pF 電容C20、C21 接地。CH340 轉(zhuǎn)換芯片的UD+、UD-與USB 接口的D+、D-連接,其TXD、RXD 與STM32F103 微處理器USART1 的RX1(Pin43)、TX1(Pin42)連接。
調(diào)試接口用于程序下載和仿真模擬,STM32F103 微處理器支持兩種調(diào)試方式:聯(lián)合測(cè)試工作組(JTAG)和串行單線調(diào)試(SWD)。該設(shè)計(jì)采用四線SWD 調(diào)試方式,減少使用GPIO,布線難度降低,節(jié)省了PCB 空間,并且SWD調(diào)試比JTAG 調(diào)試運(yùn)行更快。
電源是提供穩(wěn)定的工作電壓給系統(tǒng)使用,需要使用3.3V 和5V 兩種電源。該設(shè)計(jì)采用AMS1117-3.3/5.0 電源穩(wěn)壓芯片并聯(lián)濾波電容組成穩(wěn)定的3.3V 和5V 電源輸出。
ZigBee 無(wú)線通訊常用的解決方案有兩種:一種是微處理器+無(wú)線頻段的解決方案;另一種是SoC(芯片系統(tǒng))方案,此方案將微處理器和無(wú)線射頻器整合到一塊微型芯片上。該設(shè)計(jì)采用TI 公司的CC2530 微處理器SoC DEMO板。CC2530 微處理器是一款高度集成的ZigBee 標(biāo)準(zhǔn)芯片,集成了8051 單片機(jī)和RF 收發(fā)器,具有32/64/128/256 KB Flash、8 KB SRAM 的存儲(chǔ)容量,內(nèi)置8 通道的12 位ADC、2 個(gè)USART、21 個(gè)GPIO,支持看門(mén)狗定時(shí)、精確數(shù)字化鏈路質(zhì)量指示(RSSI/LQI)、載波偵聽(tīng)多路訪問(wèn)/沖突避免(CSMA/CA)等[7]。
溫度是水質(zhì)監(jiān)測(cè)的最基本參數(shù),其直接影響著水體中眾多的物理現(xiàn)象和化學(xué)性質(zhì)。該設(shè)計(jì)采用DALLS 公司生產(chǎn)的DS18B20 數(shù)字溫度傳感器。此溫度傳感器分辨率可調(diào),穩(wěn)定性好,抗干擾能力強(qiáng),防水性和耐腐蝕性強(qiáng),可在水中長(zhǎng)時(shí)間浸泡[8]。其數(shù)據(jù)線DQ 通過(guò)傳感器接口TempSensor 引腳與數(shù)據(jù)采集系統(tǒng)STM32F103 微處理器的PC0(Pin8)連接。
酸堿度、溶解氧和氨氮是水質(zhì)監(jiān)測(cè)的常規(guī)檢測(cè)參數(shù),它們對(duì)水中生物的繁殖和水質(zhì)的變化有很大的影響[9]。該設(shè)計(jì)采用上海儀電科學(xué)儀器有限公司生產(chǎn)的雷磁E-201-C型PH 電極、DO-958-L 型溶解氧電極、PNH3-1-01 型氨氣敏電極和配套信號(hào)調(diào)理模塊。此3 種復(fù)合電極采集到的模擬信號(hào)相當(dāng)微弱,需經(jīng)過(guò)信號(hào)調(diào)理模塊放大至A/D 轉(zhuǎn)換所需的最低電壓后,再通過(guò)傳感器接口PHSensor、NHSensor、OXSensor 分別與數(shù)據(jù)采集系統(tǒng)STM32F103 微處理器的PC1(Pin9)、PC2(Pin10)、PC3(Pin11)連接。
有機(jī)發(fā)光二極管(OLED),具有良好的顯示效果,快速的反應(yīng)能力和輕薄的厚度,可應(yīng)用于具有伸曲性的面板上。該設(shè)計(jì)采用了THINOX 科技生產(chǎn)的0.96 inch OLED顯示模塊。此模塊只有CS(片選信號(hào))、D/C(數(shù)據(jù)/命令)、RST(復(fù)位信號(hào))、SDA(數(shù)據(jù)信號(hào))、SCL(時(shí)鐘信號(hào))、VSS(電源地)和VDD(電源)7 個(gè)引腳,其中,前5 個(gè)引腳分別與數(shù)據(jù)監(jiān)測(cè)系統(tǒng)STM32F103 微處理器的PA4(Pin20)、PA5(Pin21)、PA6(Pin22)、PA7(Pin23)、PA8(Pin41)連接。
蜂鳴器是一種結(jié)構(gòu)簡(jiǎn)易的喇叭,常用于各種電子產(chǎn)品中,如提示、警報(bào)和音樂(lè)等場(chǎng)合。該設(shè)計(jì)采用蜂鳴器報(bào)警模塊,利用三極管的開(kāi)關(guān)通斷原理,PNP 型三極管Q1 的基極串聯(lián)1 個(gè)限流電阻R14,再與數(shù)據(jù)監(jiān)測(cè)系統(tǒng)STM32F103微處理器的PC8(Pin39)連接。當(dāng)PC8 引腳為低電平時(shí),三極管Q1 導(dǎo)通,蜂鳴器發(fā)出“嘀嘀”報(bào)警聲;否則,蜂鳴器不響。
按鍵是一種可復(fù)原的機(jī)械式控制元件,常用于電路的開(kāi)關(guān)控制。該設(shè)計(jì)采用4 個(gè)獨(dú)立按鍵:按鍵K1、K2、K3和K4 均為低電平使能,分別實(shí)現(xiàn)不同參數(shù)之間的切換、增加、減小和關(guān)閉蜂鳴器報(bào)警的功能,與數(shù)據(jù)監(jiān)測(cè)系統(tǒng)STM32F103 微處理器的PB6(Pin58)、PB7(Pin59)、PB8(Pin61)、PB9(Pin62)連接。
系統(tǒng)軟件設(shè)計(jì)采用IAR Embedded Workbench 進(jìn)行程序模塊化設(shè)計(jì),以配合硬件模塊實(shí)現(xiàn)系統(tǒng)功能[10-12]。
DS18B20 數(shù)字溫度傳感器軟件設(shè)計(jì)主要包括初始化操作、存儲(chǔ)器(ROM、RAM)操作和數(shù)據(jù)傳輸?shù)确矫娴膬?nèi)容。先調(diào)用Init_DS18B20( )函數(shù)進(jìn)行初始化;再調(diào)用Write_DS18B20(0xCC)函數(shù)發(fā)出轉(zhuǎn)換指令,跳過(guò)ROM 檢測(cè);然后調(diào)用Write_DS18B20(0x44)函數(shù)啟動(dòng)溫度轉(zhuǎn)換,延時(shí)等待轉(zhuǎn)換完成;最后調(diào)用Write_DS18B20(0xBE)函數(shù)讀取RAM 值,換算成攝氏度的溫度值。采集到的溫度值通過(guò)數(shù)據(jù)采集系統(tǒng)STM32F103 的串口USART2 發(fā)送給終端節(jié)點(diǎn)(ZigBee 無(wú)線通訊模塊)。
雷磁E-201-C 型PH 電極、DO-958-L 型溶解氧電極和PNH3-1-01 型氨氣敏電極采集的信號(hào)均為模擬信號(hào),而STM32F103 微處理器僅能處理數(shù)字信號(hào)。因此,放大后的模擬電壓信號(hào)需要進(jìn)行A/D 轉(zhuǎn)換。該設(shè)計(jì)選用STM32F103微處理器ADC 中的通道11 和通道12,在使用的I/O 口均已初始化且外設(shè)時(shí)鐘已開(kāi)啟的情況下,先調(diào)用Init_ADC( )函數(shù)進(jìn)行ADC 初始化;然后調(diào)用StartConvCmd_ADC( )函數(shù)啟動(dòng)ADC 轉(zhuǎn)換,對(duì)一個(gè)參數(shù)連續(xù)轉(zhuǎn)換16 次,并將16 次值求和后賦給局部變量Result;最后調(diào)用Read_ADC( )函數(shù)讀取16 次ADC 轉(zhuǎn)換的平均值,根據(jù)寫(xiě)好的換算公式求出酸堿度、溶解氧和氨氮。采集到的酸堿度、溶解氧和氨氮通過(guò)數(shù)據(jù)采集系統(tǒng)STM32F103 的串口USART2 發(fā)送給終端節(jié)點(diǎn)(ZigBee 無(wú)線通訊模塊)。水質(zhì)參數(shù)采集程序流程如圖3 所示。
數(shù)據(jù)監(jiān)測(cè)端的外設(shè)模塊有OLED 顯示模塊、蜂鳴器報(bào)警模塊和按鍵模塊。OLED 顯示模塊除了顯示水質(zhì)參數(shù)的閾值以外,還要同步實(shí)時(shí)顯示水質(zhì)參數(shù)數(shù)據(jù)(溫度、酸堿度、溶解氧和氨氮),主要用到Init_OLED( )、Clear_OLED_()、Write_OLED( )、DispStr_OLED( )等函數(shù)。蜂鳴器報(bào)警模塊的功能是當(dāng)采集到的水質(zhì)參數(shù)超出閾值時(shí)就會(huì)發(fā)出“嘀嘀”的報(bào)警聲,主要用到SetBit_Buzzer( )函數(shù)。按鍵模塊的功能是調(diào)節(jié)水質(zhì)參數(shù)的閾值和關(guān)閉蜂鳴器報(bào)警聲,主要用到Init_Key( )和Scan_Key( )函數(shù)。外設(shè)模塊工作程序流程如圖4 所示。
圖4 外設(shè)模塊工作程序流程圖Fig.4 The peripheral module work program flowchart
協(xié)調(diào)器節(jié)點(diǎn)既是整個(gè)無(wú)線網(wǎng)絡(luò)的數(shù)據(jù)收發(fā)中心,也是網(wǎng)絡(luò)的建立者和維護(hù)者。在上電后,協(xié)調(diào)器節(jié)點(diǎn)先進(jìn)行ZigBee 協(xié)議棧和硬件的初始化;然后開(kāi)始建立網(wǎng)絡(luò),主要包括信道掃描、信道選擇和節(jié)點(diǎn)地址分配等有序操作;最后選擇終端節(jié)點(diǎn)加入網(wǎng)絡(luò),協(xié)調(diào)器節(jié)點(diǎn)若有接收到請(qǐng)求申請(qǐng)加入網(wǎng)絡(luò)的命令,則會(huì)選擇合適的信道分配邏輯地址并返回允許命令給發(fā)送請(qǐng)求命令的終端節(jié)點(diǎn)。成功建網(wǎng)后,當(dāng)協(xié)調(diào)器節(jié)點(diǎn)檢測(cè)到空間數(shù)據(jù)時(shí),就會(huì)接收數(shù)據(jù)并通過(guò)串口USART3 傳輸給數(shù)據(jù)監(jiān)測(cè)系統(tǒng)STM32F103。
終端節(jié)點(diǎn)是整個(gè)無(wú)線網(wǎng)絡(luò)的數(shù)據(jù)采集節(jié)點(diǎn),其將數(shù)據(jù)采集系統(tǒng)打包好的水質(zhì)參數(shù)數(shù)據(jù)通過(guò)ZigBee 無(wú)線網(wǎng)絡(luò)發(fā)送給協(xié)調(diào)器節(jié)點(diǎn)。在上電后,終端節(jié)點(diǎn)先進(jìn)行初始化;然后掃描信道,如果存在無(wú)線網(wǎng)絡(luò)和協(xié)調(diào)器節(jié)點(diǎn),則立即連接協(xié)調(diào)器節(jié)點(diǎn)進(jìn)行確認(rèn);最后連接成功后,按照Z(yǔ)igBee 無(wú)線網(wǎng)絡(luò)通訊協(xié)議將數(shù)據(jù)發(fā)送給協(xié)調(diào)器節(jié)點(diǎn),空閑時(shí)可等待指令,處于休眠狀態(tài)。協(xié)調(diào)器節(jié)點(diǎn)和終端節(jié)點(diǎn)工作程序流程如圖5 所示。
圖5 協(xié)調(diào)器節(jié)點(diǎn)、終端節(jié)點(diǎn)工作程序流程圖Fig.5 The coordinator node and the terminal node work program flowchart
本課題充分利用嵌入式技術(shù)、無(wú)線網(wǎng)絡(luò)技術(shù)和傳感器技術(shù),設(shè)計(jì)了一套基于STM32 和ZigBee 的水產(chǎn)養(yǎng)殖水質(zhì)監(jiān)測(cè)系統(tǒng),通過(guò)對(duì)系統(tǒng)軟硬件的調(diào)試,實(shí)現(xiàn)了同步實(shí)時(shí)采集、傳輸、顯示水體溫度、酸堿度、溶解氧和氨氮,以及異常報(bào)警等功能。這在一定程度上降低了水產(chǎn)養(yǎng)殖的風(fēng)險(xiǎn)和成本,促進(jìn)了水產(chǎn)養(yǎng)殖的可持續(xù)發(fā)展,同時(shí)也保護(hù)了水體環(huán)境。此外,該系統(tǒng)移植性強(qiáng),可應(yīng)用于其他領(lǐng)域的水質(zhì)監(jiān)測(cè)。