基于STM32的智能仓库温湿度监控系统设计

引言

本项目设计了一个基于STM32的智能仓库温湿度监控系统,能够实时监测仓库内的温度和湿度,并根据设定的阈值触发报警或启动风扇调节环境。该系统通过DHT11温湿度传感器获取环境数据,结合OLED显示屏、风扇和蜂鸣器,实现对仓库环境的智能化监控和调节。

环境准备

1. 硬件设备
  • STM32F103C8T6 开发板(或其他 STM32 系列)
  • DHT11 温湿度传感器
  • 风扇(用于温度过高时启动散热)
  • 蜂鸣器(用于超温或湿度报警)
  • OLED 显示屏(用于显示实时温湿度)
  • 面包板和杜邦线
  • USB-TTL 串口调试工具
2. 软件工具
  • STM32CubeMX:用于初始化 STM32 外设。
  • Keil uVision 或 STM32CubeIDE:用于编写和下载代码。
  • ST-Link 驱动程序:用于下载程序到 STM32。

项目实现

1. 硬件连接
  • DHT11 温湿度传感器连接:将 DHT11 的数据引脚连接到 STM32 的 GPIO(如 PA1),并接上拉电阻。
  • 风扇连接:将风扇通过继电器模块连接到 STM32 的 GPIO 引脚(如 PA2),用于控制风扇的开关。
  • 蜂鸣器连接:将蜂鸣器的控制引脚连接到 STM32 的 GPIO 引脚(如 PA3),用于报警提示。
  • OLED 显示屏连接:将 OLED 的 SDA 和 SCL 引脚连接到 STM32 的 I2C 接口(如 PB6 和 PB7),用于显示温湿度数据。
2. STM32CubeMX 配置
  • 打开 STM32CubeMX,选择你的开发板型号。
  • 配置系统时钟为 HSI,确保系统稳定运行。
  • 配置 GPIO 引脚用于控制风扇和蜂鸣器。
  • 配置 I2C 用于与 OLED 显示屏通信。
  • 生成代码,选择 Keil 或 STM32CubeIDE 作为工具链。
3. 编写主程序

在生成的项目基础上,编写温湿度检测、风扇控制、报警触发和 OLED 显示的代码。以下是智能仓库温湿度监控系统的基本代码示例:

#include "stm32f1xx_hal.h"
#include "dht11.h"
#include "oled.h"

// 温湿度报警阈值
#define TEMP_THRESHOLD_HIGH 30  // 温度超过30度时报警
#define HUM_THRESHOLD_HIGH 80   // 湿度超过80%时报警

// 定义引脚
#define FAN_PIN GPIO_PIN_2
#define BUZZER_PIN GPIO_PIN_3
#define FAN_PORT GPIOA
#define BUZZER_PORT GPIOA

// 函数声明
void Fan_Control(uint8_t state);
void Buzzer_Control(uint8_t state);
void Display_Status(uint8_t temperature, uint8_t humidity, uint8_t alarm);
void System_Init(void);

// 初始化系统
void System_Init(void)
{
    HAL_Init();
    SystemClock_Config();
    MX_GPIO_Init();
    MX_I2C1_Init();
    
    OLED_Init();
    DHT11_Init();
    OLED_ShowString(0, 0, "Warehouse Monitor");
}

// 控制风扇
void Fan_Control(uint8_t state)
{
    HAL_GPIO_WritePin(FAN_PORT, FAN_PIN, state ? GPIO_PIN_SET : GPIO_PIN_RESET);
}

// 控制蜂鸣器
void Buzzer_Control(uint8_t state)
{
    HAL_GPIO_WritePin(BUZZER_PORT, BUZZER_PIN, state ? GPIO_PIN_SET : GPIO_PIN_RESET);
}

// 显示状态
void Display_Status(uint8_t temperature, uint8_t humidity, uint8_t alarm)
{
    OLED_Clear();
    OLED_ShowString(0, 0, "Temp:");
    OLED_ShowNumber(48, 0, temperature, 2);
    OLED_ShowString(64, 0, "C");
    
    OLED_ShowString(0, 1, "Hum:");
    OLED_ShowNumber(48, 1, humidity, 2);
    OLED_ShowString(64, 1, "%");
    
    if (alarm)
    {
        OLED_ShowString(0, 2, "ALARM");
    }
    else
    {
        OLED_ShowString(0, 2, "Normal");
    }
}

int main(void)
{
    System_Init();
    
    uint8_t temperature = 0;
    uint8_t humidity = 0;
    uint8_t alarm = 0;
    
    while (1)
    {
        // 读取温湿度
        if (DHT11_Read(&temperature, &humidity) == 0)
        {
            // 根据温度和湿度的值进行风扇和报警控制
            if (temperature >= TEMP_THRESHOLD_HIGH || humidity >= HUM_THRESHOLD_HIGH)
            {
                Fan_Control(1);  // 开启风扇
                Buzzer_Control(1);  // 报警
                alarm = 1;
            }
            else
            {
                Fan_Control(0);  // 关闭风扇
                Buzzer_Control(0);  // 停止报警
                alarm = 0;
            }
            
            // 显示当前状态
            Display_Status(temperature, humidity, alarm);
        }
        
        HAL_Delay(2000);  // 每2秒检测一次
    }
}

 

4. 温湿度传感器读取

以下是 DHT11 温湿度传感器的读取代码示例:

#include "dht11.h"

// 初始化 DHT11
void DHT11_Init(void)
{
    // GPIO 初始化代码
}

// 读取温湿度数据
uint8_t DHT11_Read(uint8_t *temperature, uint8_t *humidity)
{
    // 模拟 DHT11 数据读取
    *temperature = 28;  // 假设读取到28度
    *humidity = 65;  // 假设湿度为65%
    
    return 0;  // 返回0表示读取成功
}
5. 风扇和蜂鸣器控制

以下是用于控制风扇和蜂鸣器的代码示例:

#include "gpio.h"

// 控制风扇
void Fan_Control(uint8_t state)
{
    HAL_GPIO_WritePin(FAN_PORT, FAN_PIN, state ? GPIO_PIN_SET : GPIO_PIN_RESET);
}

// 控制蜂鸣器
void Buzzer_Control(uint8_t state)
{
    HAL_GPIO_WritePin(BUZZER_PORT, BUZZER_PIN, state ? GPIO_PIN_SET : GPIO_PIN_RESET);
}

 

6. OLED 显示屏处理

OLED 显示屏用于显示实时的温湿度和系统状态:

#include "oled.h"

// 初始化 OLED
void OLED_Init(void)
{
    // OLED 初始化代码
}

// 显示字符串
void OLED_ShowString(uint8_t x, uint8_t y, char *str)
{
    // 在 OLED 显示指定字符串
}

// 显示数字
void OLED_ShowNumber(uint8_t x, uint8_t y, uint8_t num, uint8_t len)
{
    // 在 OLED 显示数字
}

// 清屏
void OLED_Clear(void)
{
    // 清除 OLED 显示
}

⬇帮大家整理了单片机的资料

包括stm32的项目合集【源码+开发文档】

点击下方蓝字即可领取,感谢支持!⬇

点击领取更多嵌入式详细资料

问题讨论,stm32的资料领取可以私信!

 

7. 系统工作原理
  • 环境监测:通过 DHT11 传感器,实时检测仓库内的温度和湿度情况,温湿度数据会通过 OLED 显示屏进行显示。
  • 自动调节:当仓库内的温度或湿度超出预设的阈值,系统自动开启风扇进行环境调节,同时启动蜂鸣器发出报警提示。
  • 状态显示:OLED 显示屏实时显示当前的温湿度数据和系统状态,包括是否存在报警情况。

常见问题与解决方法

1. 温湿度数据不准确
  • 检查 DHT11 的电源和数据引脚是否连接正确。
  • 确保 DHT11 的读取时序正确,避免延时不足导致数据读取错误。
2. 风扇无法控制
  • 检查继电器模块是否正确连接,确保继电器能够控制风扇的电源开关。
  • 确认风扇的电源是否正常供电,确保风扇可正常工作。
3. OLED 显示异常
  • 检查 OLED 的 SDA 和 SCL 引脚连接是否正确,确保 I2C 通信正常。
  • 确保 OLED 初始化过程正确,确保其能够正常工作并显示数据。

结论

通过本项目,我们设计了一个基于 STM32 的智能仓库温湿度监控系统,成功实现了对仓库环境的自动监控和调节。系统能够根据环境情况自动开启风扇进行调节,并通过蜂鸣器报警提示环境异常。该系统在仓库、实验室等需要环境监控的场合具有广泛的应用前景。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值