2025/12/26 7:24:33
网站建设
项目流程
江苏优化网站关键词,文化类网站建设方向,上海优化网站方法,滦平住房和城乡建设厅网站基于(单片机/STM32)的实验室环境检测系统
程序
功能如下#xff1a;
(1)温湿度检测功能:采集实验室的温度和湿度参数。(2)烟雾检测功能:采集当前实验室环境的烟雾浓度。
(3)空气质量检测功能:采集当前环境的空气#xff0c;对有害气体进行检测。
(4)显示功能:实时显示实验室温…基于(单片机/STM32)的实验室环境检测系统 程序 功能如下 (1)温湿度检测功能:采集实验室的温度和湿度参数。 (2)烟雾检测功能:采集当前实验室环境的烟雾浓度。 (3)空气质量检测功能:采集当前环境的空气对有害气体进行检测。 (4)显示功能:实时显示实验室温湿度、烟雾浓度、空气质量、排风扇开启状态。 (5)排烟示警功能:当检测到实验室内环境的烟雾或有害气体浓度高于设定值时打开排风扇并且将报警信息传到手机APP。 (6)按键功能:按键设置烟雾浓度、有害气体浓度的上限。 (7)手机APP显示功能:通过WiFi模块将数据空气质量、烟雾浓度、窗和门口开启状态等上传到APP并显示。实验室里总有些看不见摸不着的东西在搞事情——比如突然飙升的温湿度或者偷偷摸摸超标的有害气体。今天咱们用STM32搞个环境监测系统给实验室装上电子感官顺手撸点代码把这些隐患揪出来。先上硬菜——温湿度检测怎么玩。DHT11这货虽然精度不算顶尖但胜在接线简单。注意读取数据时要卡准时序就像跟傲娇的网友聊天发消息的节奏不能错void DHT11_Read(uint8_t *temp, uint8_t *humi) { GPIO_InitTypeDef gpio; // 拉低18ms触发信号 DHT11_OUT_LOW(); Delay_ms(18); // 切换输入模式准备读取 GPIO_Mode_IN_FLOATING(gpio); // 等待传感器回应 while(DHT11_IN() 1); while(DHT11_IN() 0); while(DHT11_IN() 1); // 40位数据接收... }这段代码里最骚的操作是GPIO模式动态切换输出完立即切输入像极了渣男变脸的速度。记得在数据位读取时用微秒级延时卡时间窗口不然传感器传过来的摩斯电码就变乱码了。烟雾警报触发逻辑更有意思MQ-2传感器的模拟信号经过ADC转换后得做个滑动滤波才靠谱#define SMOKE_THRESHOLD 800 // 浓度阈值 uint16_t smoke_filter() { static uint16_t buf[5] {0}; uint32_t sum 0; // 循环队列更新数据 for(uint8_t i4;i0;i--) buf[i] buf[i-1]; buf[0] ADC_GetValue(ADC1, ADC_CHANNEL_5); for(uint8_t i0;i5;i) sum buf[i]; return sum/5; } void check_smoke() { uint16_t avg smoke_filter(); if(avg SMOKE_THRESHOLD) { FAN_CTRL(ON); Buzzer_Alert(); ESP8266_Send(ALERT:SMOKE LEVEL CRITICAL!); } }这里用了个简易滑动窗口滤波比直接读单次值稳多了。当浓度超标时不仅启动排风扇还通过WiFi模块发报警信息整套动作行云流水。OLED显示屏驱动要玩点花样用自定义字符让数据显示更生动void display_env() { OLED_ShowString(0,0,Lab Monitor); // 温湿度显示带图标 OLED_DrawBMP(0,16,16,16, temp_icon); OLED_ShowNum(24,16,Temp,2,16); OLED_DrawBMP(64,16,16,16, humi_icon); OLED_ShowNum(88,16,Humi,2,16); // 空气质量进度条 OLED_ShowString(0,32,AIR:); Draw_ProgressBar(32,32, AQI_Level); // 风扇状态动画 if(FAN_Status) OLED_DrawBMP(96,48,16,16, fan_anim[frame%4]); }自己画的温度计、水滴图标比纯文字带感多了动态风扇图标用四帧循环转起来比老板画的饼还圆润。手机端数据上传得讲究效率我直接让ESP8266走HTTP短连接每30秒打包上传一次void upload_data() { char post_data[128]; sprintf(post_data,temp%.1fhumi%.1fsmoke%daqi%d, Temp, Humi, Smoke_Level, AQI); ESP8266_Send(ATCIPSTART\TCP\,\api.lab.com\,80); ESP8266_Send(ATCIPSEND%d, strlen(post_data)38); ESP8266_Send(POST /update HTTP/1.1\r\nHost: api.lab.com\r\nContent-Length:%d\r\n\r\n%s, strlen(post_data), post_data); }虽然没上MQTT这种专业协议但胜在实现简单。注意TCP连接每次用完要记得关闭不然模块内存泄漏起来比水龙头漏水还快。整套系统跑起来后实验室就像有了个电子门神。哪天要是闻到焦糊味先别急着跑路掏出手机看下是不是哪个憨憨把泡面煮炸了。代码里还埋了个彩蛋——当连续三次检测异常时会自动抓取传感器数据生成曲线图发到管理邮箱这可比在实验室门口贴随手关电源的标语管用多了。