基于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显示、蓝牙通信和继电器控制,构建了一个完整的粮仓环境监测与控制方案。通过硬件与软件的协同工作,实现了温湿度采集、数据显示、阈值设置、报警控制和手机远程交互等功能,具有结构简单、成本低廉、功能实用的优点。
系统不仅适用于粮仓,还可以应用于农作物种植、实验室环境监控、仓储物流等场景,具备较高的实用价值与推广意义。