基于STM32单片机的智能粮仓温湿度检测蓝牙手机APP设计

基于STM32单片机的智能粮仓温湿度检测蓝牙手机APP设计

1 系统功能介绍

本系统是一款基于STM32单片机的智能粮仓环境监测与控制装置,核心目标是通过传感器实时采集粮仓内的温度和湿度信息,并结合蓝牙通信模块将数据传输至手机端,实现对粮仓环境的智能化监控与控制。

系统主要具备以下功能:

  1. 使用STM32单片机作为主控核心,协调传感器采集、数据处理和通信交互。

  2. 通过DS18B20温度传感器和土壤湿度传感器分别实现温度与湿度的精准采集。

  3. 通过OLED液晶显示屏实时显示当前温度、湿度以及阈值信息,方便用户现场查看。

  4. 通过蓝牙模块与手机APP进行无线通信,能够在手机串口调试助手或定制APP中查看数据。

  5. 手机端支持命令控制,可对温度和湿度报警阈值进行设置,命令包括:

    • temp add:增加温度阈值
    • temp down:降低温度阈值
    • dh add:增加湿度阈值
    • dh down:降低湿度阈值
  6. 当监测值超过阈值时,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 主程序设计

主程序负责各模块初始化,并在循环中实现数据采集、数据处理、显示与通信。

c 复制代码
#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温度采集程序

温度采集函数通过单总线协议读取传感器数据。

c 复制代码
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模块完成。

c 复制代码
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接口进行驱动,主要用于数据显示。

c 复制代码
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交互,通过命令调整阈值。

c 复制代码
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 继电器控制程序

c 复制代码
void Relay_On(void) {
    GPIO_ResetBits(GPIOB, GPIO_Pin_12);
}

void Relay_Off(void) {
    GPIO_SetBits(GPIOB, GPIO_Pin_12);
}

4 总结

本系统基于STM32单片机,结合温湿度传感器、OLED显示、蓝牙通信和继电器控制,构建了一个完整的粮仓环境监测与控制方案。通过硬件与软件的协同工作,实现了温湿度采集、数据显示、阈值设置、报警控制和手机远程交互等功能,具有结构简单、成本低廉、功能实用的优点。

系统不仅适用于粮仓,还可以应用于农作物种植、实验室环境监控、仓储物流等场景,具备较高的实用价值与推广意义。

相关推荐
毕业设计制作和分享2 小时前
springboot150基于springboot的贸易行业crm系统
java·vue.js·spring boot·后端·毕业设计·mybatis
编程乐学7 小时前
安卓非原创--基于Android Studio 实现的天气预报App
android·ide·android studio·课程设计·大作业·天气预报·安卓大作业
hazy1k7 小时前
51单片机基础-步进电机控制
stm32·单片机·嵌入式硬件·51单片机
清风6666667 小时前
基于单片机的智能收银机模拟系统设计
数据库·单片机·毕业设计·nosql·课程设计
第二层皮-合肥8 小时前
RTC时钟原理
单片机·嵌入式硬件
小莞尔11 小时前
【51单片机】【protues仿真】基于51单片机送带计数器系统
c语言·单片机·嵌入式硬件·物联网·51单片机
云知谷12 小时前
【嵌入式基本功】单片机嵌入式学习路线
linux·c语言·c++·单片机·嵌入式硬件
小叮当⇔13 小时前
IOT项目——STM32
stm32·嵌入式硬件·物联网
光子物联单片机14 小时前
STM32G474单片机开发入门(十五)CAN通信功能详解及实战
stm32·单片机·嵌入式硬件·mcu
A9better14 小时前
嵌入式开发学习日志40——stm32之I2C协议层
stm32·单片机·嵌入式硬件·学习