基于STM32设计的工地环境实时监测与控制系统

基于STM32设计的工地环境实时监测与控制系统设计

一、项目开发背景

随着城市化进程的推进,工地建设和拆迁作业逐渐增多,工地环境的空气污染、噪声污染等问题越来越严重。为了改善工地周边居民的生活环境和施工人员的工作环境,工地环境实时监测与控制系统应运而生。该系统通过实时监测空气中的PM2.5、噪声、温湿度等环境参数,将数据上传至云端平台进行存储和分析,从而实现对环境的实时监控和智能控制。

此外,本项目通过控制加湿系统降低空气中的粉尘浓度,确保工地作业环境符合安全和健康标准。通过将监测数据上传至云端服务器,项目还能够提供全面的环境可视化展示,便于施工方和管理方进行数据分析与决策。

二、设计实现的功能

1. 支持检测空气中的PM2.5含量

系统通过使用夏普PM2.5传感器检测空气中的PM2.5浓度,并实时反馈到本地LCD显示屏,同时上传到云平台进行进一步分析。

2. 支持检测环境的噪声

通过噪声检测传感器检测周围环境的噪声水平,转换为电压信号,经过处理后得到噪声值,实时显示在LCD屏幕上并上传至云端。

3. 本地实时显示数据

采用1.44寸LCD显示屏,实时显示PM2.5浓度、噪声级别、温湿度值等环境数据,方便现场人员实时查看。

4. 数据上云并可视化展示

系统通过WIFI连接到华为云物联网服务器,实时上传采集到的环境数据。然后通过搭建自有的后端服务器,使用Python的socket模块从华为云获取数据,并通过Flask框架构建Web应用,展示环境监测数据的可视化大屏。

5. 设备端数据传输使用WIFI+MQTT协议

设备端(STM32)通过ESP8266模块连接WiFi,并使用MQTT协议将监测数据传输到华为云物联网平台。MQTT协议轻量且高效,非常适合物联网环境下的数据传输。

6. 加湿系统控制

当PM2.5浓度超过设定范围时,系统自动控制加湿器工作,通过继电器驱动喷洒水雾,降低空气中的粉尘浓度。

7. 支持环境温度和湿度检测

系统通过SHT30传感器实时监测环境的温度和湿度,数据通过STM32处理后显示在LCD上,并上传至云端平台。

三、项目硬件模块组成

  1. 主控芯片:STM32F103RCT6
    • 负责处理所有传感器的信号,控制加湿器,并进行数据上传。
    • 支持GPIO、ADC、UART等接口,适用于本项目的各项需求。
  2. PM2.5传感器(夏普)
    • 采用红外光散射原理,实时检测空气中的PM2.5浓度。
  3. 噪声传感器
    • 模拟输出,通过转换为电压信号来表示噪声的强度。
  4. LCD显示屏(1.44寸)
    • 用于实时显示环境数据,包括PM2.5浓度、噪声、温湿度等。
  5. ESP8266 WiFi模块
    • 提供无线连接功能,将设备端数据通过WiFi传输到云端。
  6. 继电器模块
    • 用于控制加湿器的开关,响应PM2.5浓度的变化,启动喷水加湿。
  7. SHT30温湿度传感器
    • 精度高,稳定性好,用于检测环境的温度和湿度。
  8. 电源模块(USB供电)
    • 提供稳定的5V电源,确保系统运行。

四、设计思路

1. 硬件设计

  • 主控芯片STM32F103RCT6通过GPIO和ADC接口与PM2.5传感器、噪声传感器、SHT30温湿度传感器进行数据采集。
  • 通过UART接口与ESP8266通信,进行WiFi连接和MQTT协议数据传输。
  • LCD显示屏通过SPI接口与STM32连接,用于实时显示环境参数。
  • 使用继电器控制加湿器,当PM2.5浓度超标时启动加湿器,保持工地环境的稳定。

2. 软件设计

  • 使用Keil5开发环境编写STM32的控制程序,程序包括传感器数据采集、加湿器控制、LCD显示更新、WiFi连接、MQTT数据上传等功能。
  • 在后端,使用Python的socket模块建立与云服务器的通信,通过Flask框架提供Web界面,展示云端环境数据。

3. 数据上传和可视化

  • STM32通过ESP8266模块上传数据到华为云物联网平台,数据格式采用JSON。
  • 后端服务器通过MQTT协议从华为云获取实时数据,使用Flask框架展示数据,并通过前端大屏进行实时数据可视化。

五、系统功能总结

功能模块 具体内容
环境监测 检测PM2.5、噪声、温湿度等环境数据
本地显示 LCD显示屏实时显示各项监测数据
数据上传 通过WiFi将数据上传至华为云物联网平台
数据展示 使用Flask框架搭建Web应用,展示实时环境数据
MQTT协议 设备端与云平台使用MQTT协议进行数据传输
加湿器控制 根据PM2.5浓度自动控制加湿器,降低空气中的粉尘浓度
后端服务器 使用Python和Flask框架搭建后端服务器,支持数据获取与展示
可视化大屏 提供前端大屏显示,实时显示环境数据

六、使用的模块的技术详情介绍

1. PM2.5传感器(夏普)

  • 工作原理:通过红外光散射原理检测空气中的颗粒物(如PM2.5)。
  • 输出信号:通过数字信号输出PM2.5的浓度,单位为µg/m³。
  • 精度:±10%(标准测试条件下)。

2. 噪声传感器

  • 工作原理:根据声音的强度变化,输出与噪声大小成比例的电压信号。
  • 输出信号:模拟电压输出。
  • 测量范围:一般为30dB至120dB。

3. SHT30温湿度传感器

  • 工作原理:通过电容式湿度传感器和温度传感器芯片实现高精度的温湿度检测。
  • 输出信号:通过I2C总线输出温度(°C)和湿度(%RH)值。
  • 精度:温度±0.3°C,湿度±2%RH。

4. ESP8266 WiFi模块

  • 技术特点:支持WiFi协议、TCP/IP协议栈,具有独立的处理能力,可以作为WiFi终端连接到网络。
  • 功能:用于无线数据传输,支持MQTT协议。

5. 继电器模块

  • 用于控制电气设备(如加湿器),响应系统的控制信号。

6. LCD显示屏

  • 技术特点:1.44寸的彩色LCD显示屏,分辨率128x128像素。
  • 用途:实时显示环境数据,便于现场人员查看。

七、总结

本项目设计了一个基于STM32的工地环境实时监测与控制系统,涵盖了空气质量、噪声、温湿度的检测与展示,数据上云并可视化展示,通过控制加湿器自动调节空气质量。系统结合硬件和软件的设计,实现了环境监测与控制的智能化与自动化,提升了工地环境的安全性和舒适度,具有较高的实用价值。

八、STM32代码设计

其他子模块(如PM2.5传感器、噪声传感器、SHT30温湿度传感器、LCD显示、WiFi模块ESP8266等)的驱动和功能已经写好,只需要在main.c中整合这些模块,实现系统的整体功能。为了简化代码,重点展示如何初始化和使用这些模块。

c 复制代码
#include "stm32f1xx_hal.h"
#include "lcd.h"
#include "pm25.h"
#include "noise_sensor.h"
#include "sht30.h"
#include "wifi.h"
#include "mqtt.h"
#include "relay.h"

// 定义外部传感器和硬件接口
extern PM25_TypeDef pm25_sensor;    // PM2.5传感器实例
extern NoiseSensor_TypeDef noise_sensor;  // 噪声传感器实例
extern SHT30_TypeDef sht30_sensor;  // 温湿度传感器实例
extern Relay_TypeDef relay;         // 继电器控制实例
extern WifiModule_TypeDef wifi_module;  // ESP8266 WiFi模块
extern MQTT_Client_TypeDef mqtt_client;  // MQTT客户端

// 定义全局变量
float pm25_value = 0.0;    // 存储PM2.5浓度值
float noise_value = 0.0;   // 存储噪声值
float temperature = 0.0;   // 存储温度值
float humidity = 0.0;      // 存储湿度值

// 功能声明
void SystemClock_Config(void);
void MX_GPIO_Init(void);
void MX_USART1_UART_Init(void);
void MX_I2C1_Init(void);
void MX_SPI1_Init(void);

// 主程序
int main(void)
{
    // 初始化硬件
    HAL_Init();
    SystemClock_Config();
    MX_GPIO_Init();
    MX_USART1_UART_Init();
    MX_I2C1_Init();
    MX_SPI1_Init();

    // 初始化外设
    LCD_Init();      // 初始化LCD显示屏
    PM25_Init(&pm25_sensor);  // 初始化PM2.5传感器
    NoiseSensor_Init(&noise_sensor);  // 初始化噪声传感器
    SHT30_Init(&sht30_sensor);  // 初始化SHT30温湿度传感器
    Relay_Init(&relay);    // 初始化继电器
    Wifi_Init(&wifi_module);  // 初始化WiFi模块
    MQTT_Init(&mqtt_client);  // 初始化MQTT客户端

    // 连接WiFi网络
    if (Wifi_Connect(&wifi_module)) {
        printf("WiFi Connected.\n");
    } else {
        printf("WiFi Connection Failed!\n");
    }

    // 连接MQTT服务器
    if (MQTT_Connect(&mqtt_client)) {
        printf("MQTT Connected.\n");
    } else {
        printf("MQTT Connection Failed!\n");
    }

    // 主循环
    while (1)
    {
        // 1. 获取环境数据
        pm25_value = PM25_Read(&pm25_sensor);  // 读取PM2.5浓度
        noise_value = NoiseSensor_Read(&noise_sensor);  // 读取噪声值
        SHT30_Read(&sht30_sensor, &temperature, &humidity);  // 读取温湿度

        // 2. 显示数据到LCD
        LCD_Clear();
        LCD_DisplayString("PM2.5: %.2f µg/m³", pm25_value);
        LCD_DisplayString("Noise: %.2f dB", noise_value);
        LCD_DisplayString("Temp: %.2f C", temperature);
        LCD_DisplayString("Humidity: %.2f %%", humidity);

        // 3. 控制加湿器(如果PM2.5超标)
        if (pm25_value > 100.0) {  // 如果PM2.5浓度超过100 µg/m³,启动加湿器
            Relay_SetState(&relay, RELAY_ON);  // 打开加湿器
        } else {
            Relay_SetState(&relay, RELAY_OFF);  // 关闭加湿器
        }

        // 4. 上传数据到云端
        char payload[256];
        snprintf(payload, sizeof(payload), 
                 "{\"pm25\": %.2f, \"noise\": %.2f, \"temperature\": %.2f, \"humidity\": %.2f}", 
                 pm25_value, noise_value, temperature, humidity);
        
        // 发布数据到MQTT服务器
        MQTT_Publish(&mqtt_client, "environment/data", payload);

    }
}

代码解析

  1. 硬件初始化:
    • main()函数的开头,通过HAL_Init()初始化HAL库,然后调用各个硬件初始化函数初始化GPIO、串口、I2C和SPI接口。
    • 初始化LCD、PM2.5传感器、噪声传感器、SHT30传感器、WiFi模块和MQTT客户端。
  2. 环境数据采集:
    • 使用传感器驱动函数(如PM25_Read()NoiseSensor_Read()SHT30_Read())从相应的传感器获取PM2.5浓度、噪声值、温湿度值。
  3. 数据展示:
    • 使用LCD显示模块在LCD上显示PM2.5、噪声、温湿度数据。
  4. 加湿器控制:
    • 根据PM2.5浓度的阈值(如100 µg/m³),判断是否需要启动加湿器,通过Relay_SetState()函数控制继电器开关。
  5. 数据上传:
    • 将读取的环境数据通过JSON格式上传至MQTT服务器。调用MQTT_Publish()将数据发布到指定的MQTT主题上。

以上代码展示了如何将各个子模块(传感器、WiFi、MQTT、继电器等)整合在一个STM32项目中,完成实时环境监测、数据展示、数据上传和控制加湿器的功能。

相关推荐
编程|诗人17 分钟前
Java语言的网络编程
开发语言·后端·golang
老大白菜26 分钟前
用python 进行雷电接口检测
开发语言·后端·golang
2401_8984106934 分钟前
CSS语言的多线程编程
开发语言·后端·golang
Stimd1 小时前
【重写SpringFramework】第三章小结(chapter 3-16)
java·后端·spring
Code花园1 小时前
Bash语言的编程范式
开发语言·后端·golang
2401_898410691 小时前
MDX语言的网络编程
开发语言·后端·golang
代码驿站5201 小时前
Bash语言的正则表达式
开发语言·后端·golang
编程|诗人1 小时前
Bash语言的数据库编程
开发语言·后端·golang
xiangzhihong81 小时前
Spring Boot整合Minio实现文件上传
java·spring boot·后端
Code花园3 小时前
Bash语言的文件操作
开发语言·后端·golang