羅 潛,吉藝寬,李美娣
(廣東梅州職業技術學院,廣東 梅州 514011)
水產業,是中國農業經濟發展的重要支柱。近年來,隨著水產養殖業的高速發展,養殖水體環境污染問題日益突出,破壞了水體生態平衡,給養殖戶造成了嚴重的經濟損失[1-3]。因此,水產養殖水質監測能力的提升就顯得尤為重要。為改善水產養殖水質監測操作復雜、監測周期長、監測參數單一等局限性,設計了一套基于STM32 和ZigBee的水產養殖水質參數監測系統,能夠實現同步實時采集、傳輸,顯示水體溫度、酸堿度、溶解氧和氨氮,以及異常報等警功能。
該系統以STM32F103 微控系統、ZigBee 無線傳感器網絡和多路傳感器為核心,分為數據采集端、數據傳輸端和數據監測端三大部分[4]。系統總體結構如圖1 所示。
數據采集端位于系統底層,主要由多路傳感器(溫度傳感器、酸堿度傳感器、溶解氧傳感器、氨氮傳感器)、信號調理模塊和數據采集系統(STM32F103 微控系統)組成。多路傳感器實時采集水質參數原始數據,信號調理模塊對采集到的微弱信號進行調理放大,數據采集系統轉換打包數據,并將數據通過串口傳送給終端節點。數據傳輸端位于系統中間層,主要由終端節點(ZigBee 無線通訊模塊)和協調器節點(ZigBee 無線通訊模塊)組成。終端節點按照ZigBee 無線網絡通訊協議將數據采集系統打包的數據傳送給協調器節點,協調器節點按照ZigBee 無線網絡通訊協議接收數據,并將數據通過串口傳送給數據監測系統。數據監測端位于系統頂層,主要由數據監測系統(STM32F103微控系統)、OLED 顯示模塊、蜂鳴警報模塊和獨立按鍵模塊組成。數據監測系統對協調器節點傳送來的數據進行統一分析處理,OLED 顯示模塊實時顯示水質參數數據,蜂鳴器報警模塊在水質參數超出閾值時會發出“嘀嘀”報警聲,獨立按鍵模塊調控水質參數閾值和關閉報警聲。
該設計采用Altium Design 進行系統電路原理圖和PCB設計,在設計過程中選用了常用的典型電路,同時加強了電路抗干擾設計。系統電路原理圖如圖2 所示。

圖2 系統電路原理圖Fig.2 The system circuit schematic diagram
該設計以STM32F103 最小系統為微控系統,主要由復位電路、振蕩電路、啟動配置、USB 轉串口、調試接口和電源組成[5]。STM32F103 是一款高性能的64 腳微處理器,其電源腳和I/O 腳的電壓范圍均為2.0V ~3.6V,具有128KB Flash、20KB SRAM 的高速嵌入式記憶容量,內置4 個通用16 位Timer、3 個12 位ADC、3 個USART、2 個I2C、2 個SPI、1 個PWM、1 個USB 以及1 個CAN[6]。
復位電路的功能是使系統恢復至初始狀態,包括上電自動復位和按鍵手動復位。該設計采用RC 復位電路。在系統剛上電時,電阻R5 對電容C17 充電,RST(Pin7)為低電平,系統進入復位狀態;當電容C17 兩端的電壓達到門限電壓值時,RST 為高電平,系統進入正常工作狀態。手動按下K0 鍵時,電容C17 兩端放電,RST 為低電平,系統進入復位狀態;松開K0 鍵后,電容C17 重復上述充電過程,系統進入正常工作狀態。
振蕩電路的功能是產生穩定的時鐘頻率,供STM32F103 微處理器使用。該設計采用1 個8MHz 高速晶振Y1 與2 個20PF 電容C15、C16 并聯接地,晶振Y1 兩端分別與STM32F103 微處理器的XTAL1(Pin5)、XTAL2(Pin6)連接,組成外置振蕩器,驅動STM32F103 微處理器正常運行。
STM32F103 微處理器的啟動模式有內置Flash、系統存儲器和內置SRAM 3 種不同的模式,由BOOT0(Pin60)和BOOT1(Pin28)兩個引腳的電平狀態共同決定。編寫的常用代碼都存放在Flash 中,啟動應該從代碼區開始。因此,該設計采用內置Flash 啟動方式,BOOT0 和BOOT1 兩個引腳分別串聯10K 的電阻R3、R4 接地置于低電平。
USB 轉串口是實現STM32F103 微處理器與PC 之間的通信,該設計采用CH340 轉換芯片。CH340 轉換芯片需要時鐘頻率驅動工作,其XO 和XI 之間連接1 個12MHz的晶體Y2,晶體Y2 兩端并聯30pF 電容C20、C21 接地。CH340 轉換芯片的UD+、UD-與USB 接口的D+、D-連接,其TXD、RXD 與STM32F103 微處理器USART1 的RX1(Pin43)、TX1(Pin42)連接。
調試接口用于程序下載和仿真模擬,STM32F103 微處理器支持兩種調試方式:聯合測試工作組(JTAG)和串行單線調試(SWD)。該設計采用四線SWD 調試方式,減少使用GPIO,布線難度降低,節省了PCB 空間,并且SWD調試比JTAG 調試運行更快。
電源是提供穩定的工作電壓給系統使用,需要使用3.3V 和5V 兩種電源。該設計采用AMS1117-3.3/5.0 電源穩壓芯片并聯濾波電容組成穩定的3.3V 和5V 電源輸出。
ZigBee 無線通訊常用的解決方案有兩種:一種是微處理器+無線頻段的解決方案;另一種是SoC(芯片系統)方案,此方案將微處理器和無線射頻器整合到一塊微型芯片上。該設計采用TI 公司的CC2530 微處理器SoC DEMO板。CC2530 微處理器是一款高度集成的ZigBee 標準芯片,集成了8051 單片機和RF 收發器,具有32/64/128/256 KB Flash、8 KB SRAM 的存儲容量,內置8 通道的12 位ADC、2 個USART、21 個GPIO,支持看門狗定時、精確數字化鏈路質量指示(RSSI/LQI)、載波偵聽多路訪問/沖突避免(CSMA/CA)等[7]。
溫度是水質監測的最基本參數,其直接影響著水體中眾多的物理現象和化學性質。該設計采用DALLS 公司生產的DS18B20 數字溫度傳感器。此溫度傳感器分辨率可調,穩定性好,抗干擾能力強,防水性和耐腐蝕性強,可在水中長時間浸泡[8]。其數據線DQ 通過傳感器接口TempSensor 引腳與數據采集系統STM32F103 微處理器的PC0(Pin8)連接。
酸堿度、溶解氧和氨氮是水質監測的常規檢測參數,它們對水中生物的繁殖和水質的變化有很大的影響[9]。該設計采用上海儀電科學儀器有限公司生產的雷磁E-201-C型PH 電極、DO-958-L 型溶解氧電極、PNH3-1-01 型氨氣敏電極和配套信號調理模塊。此3 種復合電極采集到的模擬信號相當微弱,需經過信號調理模塊放大至A/D 轉換所需的最低電壓后,再通過傳感器接口PHSensor、NHSensor、OXSensor 分別與數據采集系統STM32F103 微處理器的PC1(Pin9)、PC2(Pin10)、PC3(Pin11)連接。
有機發光二極管(OLED),具有良好的顯示效果,快速的反應能力和輕薄的厚度,可應用于具有伸曲性的面板上。該設計采用了THINOX 科技生產的0.96 inch OLED顯示模塊。此模塊只有CS(片選信號)、D/C(數據/命令)、RST(復位信號)、SDA(數據信號)、SCL(時鐘信號)、VSS(電源地)和VDD(電源)7 個引腳,其中,前5 個引腳分別與數據監測系統STM32F103 微處理器的PA4(Pin20)、PA5(Pin21)、PA6(Pin22)、PA7(Pin23)、PA8(Pin41)連接。
蜂鳴器是一種結構簡易的喇叭,常用于各種電子產品中,如提示、警報和音樂等場合。該設計采用蜂鳴器報警模塊,利用三極管的開關通斷原理,PNP 型三極管Q1 的基極串聯1 個限流電阻R14,再與數據監測系統STM32F103微處理器的PC8(Pin39)連接。當PC8 引腳為低電平時,三極管Q1 導通,蜂鳴器發出“嘀嘀”報警聲;否則,蜂鳴器不響。
按鍵是一種可復原的機械式控制元件,常用于電路的開關控制。該設計采用4 個獨立按鍵:按鍵K1、K2、K3和K4 均為低電平使能,分別實現不同參數之間的切換、增加、減小和關閉蜂鳴器報警的功能,與數據監測系統STM32F103 微處理器的PB6(Pin58)、PB7(Pin59)、PB8(Pin61)、PB9(Pin62)連接。
系統軟件設計采用IAR Embedded Workbench 進行程序模塊化設計,以配合硬件模塊實現系統功能[10-12]。
DS18B20 數字溫度傳感器軟件設計主要包括初始化操作、存儲器(ROM、RAM)操作和數據傳輸等方面的內容。先調用Init_DS18B20( )函數進行初始化;再調用Write_DS18B20(0xCC)函數發出轉換指令,跳過ROM 檢測;然后調用Write_DS18B20(0x44)函數啟動溫度轉換,延時等待轉換完成;最后調用Write_DS18B20(0xBE)函數讀取RAM 值,換算成攝氏度的溫度值。采集到的溫度值通過數據采集系統STM32F103 的串口USART2 發送給終端節點(ZigBee 無線通訊模塊)。
雷磁E-201-C 型PH 電極、DO-958-L 型溶解氧電極和PNH3-1-01 型氨氣敏電極采集的信號均為模擬信號,而STM32F103 微處理器僅能處理數字信號。因此,放大后的模擬電壓信號需要進行A/D 轉換。該設計選用STM32F103微處理器ADC 中的通道11 和通道12,在使用的I/O 口均已初始化且外設時鐘已開啟的情況下,先調用Init_ADC( )函數進行ADC 初始化;然后調用StartConvCmd_ADC( )函數啟動ADC 轉換,對一個參數連續轉換16 次,并將16 次值求和后賦給局部變量Result;最后調用Read_ADC( )函數讀取16 次ADC 轉換的平均值,根據寫好的換算公式求出酸堿度、溶解氧和氨氮。采集到的酸堿度、溶解氧和氨氮通過數據采集系統STM32F103 的串口USART2 發送給終端節點(ZigBee 無線通訊模塊)。水質參數采集程序流程如圖3 所示。
數據監測端的外設模塊有OLED 顯示模塊、蜂鳴器報警模塊和按鍵模塊。OLED 顯示模塊除了顯示水質參數的閾值以外,還要同步實時顯示水質參數數據(溫度、酸堿度、溶解氧和氨氮),主要用到Init_OLED( )、Clear_OLED_()、Write_OLED( )、DispStr_OLED( )等函數。蜂鳴器報警模塊的功能是當采集到的水質參數超出閾值時就會發出“嘀嘀”的報警聲,主要用到SetBit_Buzzer( )函數。按鍵模塊的功能是調節水質參數的閾值和關閉蜂鳴器報警聲,主要用到Init_Key( )和Scan_Key( )函數。外設模塊工作程序流程如圖4 所示。

圖4 外設模塊工作程序流程圖Fig.4 The peripheral module work program flowchart
協調器節點既是整個無線網絡的數據收發中心,也是網絡的建立者和維護者。在上電后,協調器節點先進行ZigBee 協議棧和硬件的初始化;然后開始建立網絡,主要包括信道掃描、信道選擇和節點地址分配等有序操作;最后選擇終端節點加入網絡,協調器節點若有接收到請求申請加入網絡的命令,則會選擇合適的信道分配邏輯地址并返回允許命令給發送請求命令的終端節點。成功建網后,當協調器節點檢測到空間數據時,就會接收數據并通過串口USART3 傳輸給數據監測系統STM32F103。
終端節點是整個無線網絡的數據采集節點,其將數據采集系統打包好的水質參數數據通過ZigBee 無線網絡發送給協調器節點。在上電后,終端節點先進行初始化;然后掃描信道,如果存在無線網絡和協調器節點,則立即連接協調器節點進行確認;最后連接成功后,按照ZigBee 無線網絡通訊協議將數據發送給協調器節點,空閑時可等待指令,處于休眠狀態。協調器節點和終端節點工作程序流程如圖5 所示。

圖5 協調器節點、終端節點工作程序流程圖Fig.5 The coordinator node and the terminal node work program flowchart
本課題充分利用嵌入式技術、無線網絡技術和傳感器技術,設計了一套基于STM32 和ZigBee 的水產養殖水質監測系統,通過對系統軟硬件的調試,實現了同步實時采集、傳輸、顯示水體溫度、酸堿度、溶解氧和氨氮,以及異常報警等功能。這在一定程度上降低了水產養殖的風險和成本,促進了水產養殖的可持續發展,同時也保護了水體環境。此外,該系統移植性強,可應用于其他領域的水質監測。