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

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

相关推荐
沐欣工作室_lvyiyi6 小时前
基于单片机的智能路灯(论文+源码)
单片机·嵌入式硬件·毕业设计
Yyq130208696826 小时前
SIT1050 5V 供电,±40V 接口耐压,1Mbps 高速 CAN 总线收发器
单片机·嵌入式硬件
双翌视觉6 小时前
机器视觉的手机柔性屏贴合应用
智能手机·自动化·视觉检测·机器视觉
chinesegf6 小时前
手机能看、投屏 / 车机不能看与反向链接验证类似吗?
智能手机
生擒小朵拉6 小时前
STM32添加库函数
java·javascript·stm32
云伴枫轻舞6 小时前
我对 OTA 的理解随记,附GD32/STM32例程
stm32·单片机·嵌入式硬件
LS·Cui7 小时前
单片机按键示例功能
单片机
【ql君】qlexcel8 小时前
MCU上电到运行的全过程
单片机·嵌入式硬件·mcu·启动过程
搞一搞汽车电子8 小时前
S32K3平台eMIOS 应用说明
开发语言·驱动开发·笔记·单片机·嵌入式硬件·汽车