基于STM32的空气质量检测系统:实时显示温湿度、甲醛及PM2.5,超限报警并手机查看

基于STM32的温湿度、甲醛、PM2.5空气质量检测系统采集设计资料,联系赠送答辩模板等全套资料。 主要功能: 使用STM32为主控制器,可采集当前环境下的温湿度、甲醛、PM2.5值,当采集值超过预设阀值时,蜂鸣器自动报警。 采集到的温湿度、甲醛、PM2.5会显示在LCD1602显示屏上,且自动上传至上位机(手机),可以在手机查收采集到的各种参数。 可通过三个按键任意设置报警阀值。 功能在图1,具体内容图2,实物图3 注意事项: [1]由于资料包的特殊性 [2]单片机采用STM32,不改别的单片机 [3]APP不支持修改

最近在实验室折腾了个空气质量检测系统,能测温湿度、甲醛和PM2.5,超标了还会哔哔叫。这玩意儿用STM32F103C8T6当大脑,成本不过百来块,但功能倒是挺全乎。给大家看看我是怎么把传感器、显示屏和手机APP串起来的。

先说传感器这块,DHT11负责温湿度,这货虽然精度一般但胜在便宜。甲醛检测用的ZE08B电化学模块,注意这玩意儿需要预热3分钟才能稳定。PM2.5传感器选的GP2Y1010,遇到个坑------必须用PWM控制LED光源,不然数据飘得亲妈都不认识。

c 复制代码
//DHT11数据读取核心代码
void DHT11_Read(uint8_t *temp, uint8_t *humi) {
    GPIO_InitTypeDef gpio;
    //拉低总线18ms
    HAL_GPIO_WritePin(DHT11_GPIO_Port, DHT11_Pin, GPIO_PIN_RESET);
    delay_ms(18);
    //切换输入模式等响应
    gpio.Pin = DHT11_Pin;
    gpio.Mode = GPIO_MODE_INPUT;
    gpio.Pull = GPIO_PULLUP;
    HAL_GPIO_Init(DHT11_GPIO_Port, &gpio);
    //等待80us低电平响应
    while(HAL_GPIO_ReadPin(DHT11_GPIO_Port, DHT11_Pin) == GPIO_PIN_RESET);
    //...后续处理40位数据
}

LCD1602显示这块有个骚操作------自己画了个甲醛的图标字符。注意这个屏的驱动电压要和STM32的3.3V电平匹配,我加了个74HC245做电平转换,不然显示会花屏。数据显示刷新率控制在1秒/次,太快了会闪得眼瞎。

报警阈值设置用了三个贴片按键,长按进入设置模式这个逻辑坑了我一晚上。关键点在于要防抖处理+状态机实现,存阈值时记得用FLASH模拟EEPROM,掉电才不会丢数据:

c 复制代码
//按键状态机伪代码
void Key_Handler() {
    static uint8_t state = 0;
    if(HAL_GPIO_ReadPin(KEY_GPIO_Port, KEY_Pin) == GPIO_PIN_RESET) {
        if(state == 0) {
            state = 1;
            key_press_time = HAL_GetTick();
        } else if((HAL_GetTick() - key_press_time) > 1000) {
            enter_setting_mode();  //长按1秒进设置
            state = 2;
        }
    } else {
        if(state == 1) {
            short_press_action();  //短按处理
        }
        state = 0;
    }
}

手机通信这part最魔幻,本来想用蓝牙模块,结果发现某宝买的HC-05固件锁了AT指令。最后改用ESP8266走TCP直连,在APP inventor上搓了个简易接收端。注意STM32的串口中断接收缓冲区要开够大,不然数据包会被截断:

c 复制代码
//数据上传帧格式
void Send_To_APP() {
    char buf[32];
    sprintf(buf, "T:%.1f H:%.1f F:%.2f P:%d\r\n", 
           temperature, humidity, formaldehyde, pm25);
    HAL_UART_Transmit(&huart1, (uint8_t*)buf, strlen(buf), 1000);
}

实测发现甲醛传感器在高温环境下容易误报,后来加了温度补偿算法。有个邪门现象------当PM2.5传感器和蜂鸣器同时工作时,ADC采集值会漂移,最后在蜂鸣器控制线加了个74HC14施密特触发器才解决。

整套系统打样时犯了个低级错误,把STM32的OSCIN和OSCOUT接反了,导致芯片死活不启动。现在资料包里已经更新了正确的PCB文件,需要完整工程源码的哥们儿可以留言,顺手把毕设答辩模板也塞进去了,改改LOGO就能直接用。

相关推荐
lingggggaaaa3 个月前
小迪安全v2023学习笔记(七十八讲)—— 数据库安全&Redis&CouchDB&H2database&未授权&CVE
redis·笔记·学习·算法·安全·网络安全·couchdb
一只小灿灿4 个月前
CouchDB 从入门到精通:构建高效的分布式文档数据库
数据库·分布式·couchdb
Zhao·o6 个月前
Couchbase 可观测性最佳实践
linux·couchdb
我最厉害。,。6 个月前
数据库安全&Redis&CouchDB&H2database&未授权访问&CVE 漏洞
数据库·redis·couchdb
Мартин.9 个月前
[Meachines] [Medium] Canape Git+cPickle-RCE+KTOR扫描+CouchDB+pip权限提升
git·pip·couchdb
田猿笔记1 年前
如何通过 Nginx 实现 CouchDB 集群的负载均衡并监控请求分发
nginx·负载均衡·couchdb
Atopos`1 年前
Dubbo,Zookeeper,NSF,Druid,CouchDB未授权访问漏洞(附带修复方法)
安全·zookeeper·dubbo·couchdb·未授权访问·nsf
Aaron_9451 年前
Apache CouchDB: 一个开源的文档型数据库
开源·apache·couchdb
小狗学士1 年前
cve_2017_12635-CouchDB垂直权限绕过
couchdb