基于STM32單片機的智能糧倉溫濕度檢測藍牙手機APP設計
1 系統功能介紹
本系統是一款基于STM32單片機的智能糧倉環境監測與控制裝置,核心目標是通過傳感器實時采集糧倉內的溫度和濕度信息,并結合藍牙通信模塊將數據傳輸至手機端,實現對糧倉環境的智能化監控與控制。
系統主要具備以下功能:
-
使用STM32單片機作為主控核心,協調傳感器采集、數據處理和通信交互。
-
通過DS18B20溫度傳感器和土壤濕度傳感器分別實現溫度與濕度的精準采集。
-
通過OLED液晶顯示屏實時顯示當前溫度、濕度以及閾值信息,方便用戶現場查看。
-
通過藍牙模塊與手機APP進行無線通信,能夠在手機串口調試助手或定制APP中查看數據。
-
手機端支持命令控制,可對溫度和濕度報警閾值進行設置,命令包括:
temp add
:增加溫度閾值temp down
:降低溫度閾值dh add
:增加濕度閾值dh down
:降低濕度閾值
-
當監測值超過閾值時,STM32控制繼電器動作,用于啟動風機、除濕設備或其他執行機構,同時手機APP提示報警。
該系統不僅適用于糧倉溫濕度檢測,還可拓展應用于智能農業、倉儲管理、冷鏈監控等場景。
2 系統電路設計
系統電路由STM32F103C8T6最小系統電路、傳感器電路、顯示電路、藍牙通信電路、繼電器電路以及電源電路組成。
2.1 STM32最小系統電路
STM32F103C8T6單片機作為主控芯片,運行頻率高、接口豐富。最小系統包括:
- 電源電路:通過AMS1117-3.3穩壓芯片將5V轉化為3.3V,為STM32和外設供電。
- 時鐘電路:外接8MHz晶振提供系統主頻,并使用內部PLL倍頻至72MHz。
- 復位電路:由按鍵和電阻電容構成,保證單片機上電復位。
2.2 DS18B20溫度傳感器電路
DS18B20是一款單總線數字溫度傳感器,測量精度高,工作范圍寬。其數據線通過一個4.7kΩ上拉電阻接到STM32的GPIO口。
2.3 土壤濕度傳感器電路
土壤濕度傳感器輸出為模擬電壓信號,需通過STM32的ADC通道進行采集和處理。為了減少干擾,可在輸出端加濾波電容。
2.4 OLED顯示電路
OLED屏幕采用I2C接口,SCL與SDA分別連接STM32的PB6和PB7引腳。OLED可顯示溫度、濕度、閾值和報警狀態,界面簡潔直觀。
2.5 藍牙模塊電路
藍牙模塊選用HC-05或HC-06,通過串口與STM32通信。
- TXD → STM32 RXD
- RXD → STM32 TXD
- VCC → 5V
- GND → GND
模塊默認波特率為9600bps,適用于與手機進行數據交換。
2.6 繼電器電路
繼電器通過三極管驅動,受STM32控制。當溫濕度超過閾值時,繼電器閉合,驅動風機或加熱設備。
2.7 電源電路
系統電源由5V直流電源供給,經過穩壓電路得到3.3V,分別為STM32、OLED、藍牙模塊提供穩定電源。
3 程序設計
程序設計采用模塊化思想,主要分為:主控系統、傳感器數據采集模塊、顯示模塊、藍牙通信模塊和繼電器控制模塊。
3.1 主程序設計
主程序負責各模塊初始化,并在循環中實現數據采集、數據處理、顯示與通信。
#include "stm32f10x.h"
#include "ds18b20.h"
#include "oled.h"
#include "bluetooth.h"
#include "relay.h"
#include "adc.h"float temperature;
uint16_t humidity;
float temp_threshold = 30.0;
uint16_t dh_threshold = 50;int main(void) {SystemInit();OLED_Init();DS18B20_Init();ADC1_Init();USART1_Init(9600);Relay_Init();while(1) {temperature = DS18B20_GetTemp();humidity = ADC1_ReadChannel(0);OLED_ShowString(0,0,"Temp:");OLED_ShowNum(40,0,(int)temperature,2,16);OLED_ShowString(0,2,"Hum :");OLED_ShowNum(40,2,humidity,3,16);Bluetooth_ReceiveCommand(&temp_threshold, &dh_threshold);if(temperature > temp_threshold || humidity > dh_threshold) {Relay_On();Bluetooth_Send("Warning! Threshold exceeded!");} else {Relay_Off();}delay_ms(500);}
}
3.2 DS18B20溫度采集程序
溫度采集函數通過單總線協議讀取傳感器數據。
float DS18B20_GetTemp(void) {uint8_t tempL, tempH;short temp;float t;DS18B20_Start();DS18B20_WriteByte(0xCC);DS18B20_WriteByte(0x44);delay_ms(750);DS18B20_Start();DS18B20_WriteByte(0xCC);DS18B20_WriteByte(0xBE);tempL = DS18B20_ReadByte();tempH = DS18B20_ReadByte();temp = (tempH << 8) | tempL;t = temp * 0.0625;return t;
}
3.3 濕度采集程序
濕度采集通過STM32的ADC模塊完成。
uint16_t ADC1_ReadChannel(uint8_t channel) {ADC_RegularChannelConfig(ADC1, channel, 1, ADC_SampleTime_55Cycles5);ADC_SoftwareStartConvCmd(ADC1, ENABLE);while(!ADC_GetFlagStatus(ADC1, ADC_FLAG_EOC));return ADC_GetConversionValue(ADC1);
}
3.4 OLED顯示程序
OLED模塊通過I2C接口進行驅動,主要用于數據顯示。
void OLED_ShowData(float temp, uint16_t hum, float t_th, uint16_t h_th) {OLED_ShowString(0,0,"Temp:");OLED_ShowNum(50,0,(int)temp,2,16);OLED_ShowString(0,2,"Hum :");OLED_ShowNum(50,2,hum,3,16);OLED_ShowString(0,4,"T_thr:");OLED_ShowNum(60,4,(int)t_th,2,16);OLED_ShowString(0,6,"H_thr:");OLED_ShowNum(60,6,h_th,3,16);
}
3.5 藍牙通信程序
藍牙模塊與手機APP交互,通過命令調整閾值。
void Bluetooth_ReceiveCommand(float *t_th, uint16_t *h_th) {char cmd[20];if(USART_ReceiveString(cmd)) {if(strcmp(cmd,"temp add")==0) (*t_th)++;else if(strcmp(cmd,"temp down")==0) (*t_th)--;else if(strcmp(cmd,"dh add")==0) (*h_th)++;else if(strcmp(cmd,"dh down")==0) (*h_th)--;}
}
3.6 繼電器控制程序
void Relay_On(void) {GPIO_ResetBits(GPIOB, GPIO_Pin_12);
}void Relay_Off(void) {GPIO_SetBits(GPIOB, GPIO_Pin_12);
}
4 總結
本系統基于STM32單片機,結合溫濕度傳感器、OLED顯示、藍牙通信和繼電器控制,構建了一個完整的糧倉環境監測與控制方案。通過硬件與軟件的協同工作,實現了溫濕度采集、數據顯示、閾值設置、報警控制和手機遠程交互等功能,具有結構簡單、成本低廉、功能實用的優點。
系統不僅適用于糧倉,還可以應用于農作物種植、實驗室環境監控、倉儲物流等場景,具備較高的實用價值與推廣意義。