【STM32项目开源】STM32单片机厂房环境安全监测

目录

一、设计背景和意义

1.1设计背景:

1.2设计意义:

二、实物展示

三、硬件功能介绍

[2.1 硬件清单:](#2.1 硬件清单:)

[2.2 功能介绍:](#2.2 功能介绍:)

四、软件设计流程图

五、硬件PCB展示

六、软件主函序展示

七、单片机实物资料

[资料获取 查看主页介绍:兆龙电子单片机设计](#资料获取 查看主页介绍:兆龙电子单片机设计)


一、设计背景和意义

1.1设计背景:

在工业厂房安全生产管控、化工车间环境风险预警、仓储厂房温湿度管控、精密加工车间洁净度监测及小微企业厂房安全巡检的背景下,多参数精准监测、风险智能预警、多场景便捷管控、数据可追溯管理成为厂房环境安全监测类产品的核心需求。传统厂房环境监测方式存在明显局限:一方面,高端工业环境管控系统(如定制化厂房安全中控平台、工业级多参数监测网关、品牌成套商用环境预警设备)功能虽全但成本高昂,部署复杂且需专业人员上门调试与后期维护,难以普及到中小微企业厂房、小型加工车间、仓储库房及乡镇工业作坊等场景,且系统生态封闭性强,不同品牌、不同协议的监测设备与预警终端兼容性差,无法与厂区管理终端、安全巡检系统、机智云物联网平台灵活联动,更换或升级成本高,无法满足不同人群(如厂房管理员、安全巡检员、小微企业主、车间操作工)的便捷监测与安全管控需求;另一方面,普通简易环境监测装置(如传统单一气体检测仪、基础款温湿度计、手动巡检记录表单)虽操作简单、价格低廉,但功能单一,仅能实现基础的单参数监测或人工记录,缺乏多维度环境参数联动监测、风险智能研判、监测数据存储、远程数据同步及设备故障状态提醒(如传感器失效、数据传输中断、设备低电量)等功能,无法满足现代化工业生产场景下对全面覆盖、智能响应、便捷高效的环境安全监测与风险管控需求。

现有关厂房环境安全监测方案还存在功能割裂与集成度低的问题:部分高端工业环境管控系统虽具备多维度环境监测与安全联动功能,但依赖复杂的软硬件架构与专属生态维护,后期使用成本高,难以覆盖预算有限的中小微企业、乡镇工业作坊或小型仓储厂房的监测场景;而低成本监测装置又在功能完整性与智能化上存在欠缺,无法实现监测数据与厂区终端、移动 APP、机智云物联网平台的实时联动,导致风险预警延迟、参数监测误差偏大、个性化需求(如化工车间有毒气体超标预警、仓储厂房高温防火预警、精密车间洁净度管控)无法满足等问题,无法为厂区安全生产(如精准把控环境风险、及时处置安全隐患)及高效开展安全管理(如追溯环境异常数据、排查设备故障隐患)提供可靠支撑。基于此,本设计以 STM32 单片机为核心,融合高精度环境采集与辅助模块(如气体传感模块、温湿度监测模块、粉尘浓度检测模块、声光预警模块)、LCD 显示模块、数据存储模块及基于机智云的物联网通信与异常提醒模块,构建低成本、高集成度的 STM32 单片机厂房环境安全监测系统 - 机智云版,以解决传统厂房环境监测方式操作繁琐、智能化程度低、功能单一及环境安全管控效率低的问题。

1.2设计意义:

从使用体验与厂房环境安全监测精细化管控效率角度,该系统突破了传统厂房环境监测方式的局限:一是实现了多维度环境参数监测与全场景安全联动(如支持有毒有害气体浓度实时采集、温湿度精准监测、粉尘浓度检测、设备运行状态监控,联动机智云物联网通信模块、异常声光预警模块、厂房安全智能响应模块),无需工作人员手动巡检记录、频繁核对环境参数或排查设备运行状态,减少环境监测的繁琐性与安全管控的延迟性;二是配备 OLED 实时显示模块,直观呈现当前气体浓度 / 温湿度 / 粉尘含量、系统运行状态(正常 / 异常)及预警类型,同时支持数据自动存储(可通过机智云平台传输至移动 APP / 厂区安全管理平台 / 小微企业安全生产管控平台),方便厂区管理员与安全巡检员长期追溯环境异常历史数据、设备运行记录,也为优化厂区安全管控方案、排查环境风险隐患及多车间规模化安全监测提供完整数据支撑;三是新增个性化环境风险预警与自动响应功能,当监测到环境异常状态(如有毒气体超标、温湿度超出安全阈值、粉尘浓度过高、传感器失效),系统根据状态类型自动触发对应执行动作(同时通过声光预警模块反馈预警 / 响应信息与设备当前工作状态,机智云同步推送至关联移动终端),并联动安全执行模块完成智能操作(如联动 "有毒气体超标预警",自动开启车间排风系统、关闭危险区域阀门、记录异常时间与气体参数,同步更新安全台账),无需人工现场干预即可实现厂房环境安全监测的精细化管控,大幅提升了环境监测的便捷性与厂区安全生产管理的高效性。

从技术实践与成本控制角度,本设计以 STM32 单片机为核心,充分利用其低功耗、高性价比的优势,搭配低成本的高精度环境采集模块及通用外围模块,在保证监测管控精度(核心环境参数监测准确率可控制在 98% 以上,预警响应与联动执行时间可控制在 0.5 秒以内)的前提下,有效降低了系统整体成本,相比同功能的高端工业环境管控系统成本降低 40%-60%,更易普及到中小微企业厂房、小型加工车间、仓储库房、乡镇工业作坊及精密加工车间等场景。同时,系统支持模块化扩展(如后续可新增多车间环境联动监测功能、多人分级安全管理权限功能、基于机智云的远程手动校准与参数设置功能),为后续功能升级预留了空间,具备良好的灵活性与可扩展性。

**二、**实物展示

下方为实物演示视频

演示视频https://www.bilibili.com/video/BV1P6nXzbEU9/?spm_id_from=333.1387.upload.video_card.click&vd_source=2a672ca4e8794dca68cbe6d047b42ca5

下方为实物展示图片

三、硬件功能介绍

2.1 硬件清单:

  • STM32F103C8T6

  • OLED显示

  • DS1302时钟模块

  • 声光报警

  • 继电器控制电路

  • USB台灯

  • 风扇

  • 水泵

  • 火焰传感器

  • MQ-2烟雾传感器

  • 降压模块

  • WIFI模块

2.2 功能介绍:

(1) 环境信息采集与显示

温湿度:使用DHT11传感器进行采集。

空气安全:通过MQ-7传感器监测烟雾/一氧化碳浓度。

火焰监测:利用火焰传感器判断明火。

实时时间:由DS1302时钟模块提供。

状态显示:数据与时间均在OLED屏幕上直观显示。

(2) 智能控制

烟雾超标:自动启动风扇进行通风。

发现明火:自动启动水泵进行灭火。

非法闯入:通过门磁模块触发报警。

声光报警:蜂鸣器在异常状态下发出警报。

(3) 交互与远程控制

参数设置:可通过按键设定各类报警阈值。

手动控制:支持按键手动控制水泵、风扇、灯光等装置。

远程交互:可通过手机APP接收实时环境数据,并远程控制报警开关。

四、软件设计流程图

五、硬件PCB展示

六、软件主函序展示

复制代码
 while (1)
  {
	  if(HAL_GPIO_ReadPin(GPIOB,GPIO_PIN_0) == 0 || HAL_GPIO_ReadPin(GPIOB,GPIO_PIN_1) == 0 || HAL_GPIO_ReadPin(GPIOB,GPIO_PIN_15) == 1)//   뾯  ģʽ
	  {
		  if(jingbflag)
		  {
		  jingbao =1;//        
		  if(HAL_GPIO_ReadPin(GPIOB,GPIO_PIN_0) == 0)//   ־   
		  {
			  huo = 22;//    ״̬ Ż 
		  HAL_GPIO_WritePin(GPIOA,GPIO_PIN_7,GPIO_PIN_SET);
		  OLED_Clear();
		  OLED_ShowCHinese(47,0,10);
		  OLED_ShowCHinese(64,0,11);
		  OLED_ShowCHinese(0,2,21);
		  OLED_ShowCHinese(17,2,22);//
		  OLED_ShowCHinese(34,2,23);//
		   showhuo();//  ʾ    ͼƬ
		  }
		  else//    ״̬    
		  {
			  huo = 11;
		  }
		  if(HAL_GPIO_ReadPin(GPIOB,GPIO_PIN_1) == 0)//ú      
		  {
			  mei = 22;
			  		  HAL_GPIO_WritePin(GPIOA,GPIO_PIN_7,GPIO_PIN_SET);
					  OLED_Clear();
					  OLED_ShowCHinese(24,0,10);//  ʾ    
					  OLED_ShowCHinese(41,0,11);
					  OLED_ShowCHinese(0,2,49);
					  OLED_ShowCHinese(17,2,50);//
					  OLED_ShowCHinese(34,2,51);//
			          OLED_ShowCHinese(51,2,52);//
			          showmei();//  ʾй©ͼƬ
		  }
		  else
		  {
			  mei = 11;
			  }
		  if(HAL_GPIO_ReadPin(GPIOB,GPIO_PIN_15) == 1)//        
		  {
			  ren =22;
			  HAL_GPIO_WritePin(GPIOA,GPIO_PIN_7,GPIO_PIN_SET);
		  			  OLED_Clear();
					  OLED_ShowCHinese(24,0,10);
					  OLED_ShowCHinese(41,0,11);//  ʾ    
			  		  OLED_ShowCHinese(0,2,12);
					  OLED_ShowCHinese(17,2,13);//
					  OLED_ShowCHinese(34,2,14);//
			          OLED_ShowCHinese(51,2,15);//
		              showman();//  ʾ    ͼƬ
		  }
		  else
		  {
			  ren =11;
		  }
	  }
	  }
	  else//    ģʽ
	  {
		  huo = 11;
		  mei = 11;
		  ren = 11;
		  if(jingbao == 1)
		  {
			  OLED_Clear();
			  jingbao = 0;//       
		  }
		HAL_GPIO_WritePin(GPIOA,GPIO_PIN_7,GPIO_PIN_RESET);
		rt = dht11_read(buf);
		OLED_ShowCHinese(0,6,7);//  ʾ ¶Ⱥ   
		OLED_ShowCHinese(15,6,8);
		OLED_ShowChar(28,6,':');
		OLED_ShowCHinese(68,6,9);//  ʾʪ Ⱥ   
		OLED_ShowCHinese(83,6,8);
		OLED_ShowChar(96,6,':');
	  	OLED_ShowNum(35,6,buf[2],2,16);//  ʾ ¶   ֵ
		OLED_ShowCHinese(50,6,48);
		OLED_ShowChar(57,6,'C');
		OLED_ShowNum(104,6,buf[0],2,16);//  ʾʪ    ֵ
        OLED_ShowChar(121,6,'%');
		showtime();
	  }
	  if(rxok==1)//  ȡʱ     
	  {
		  if(rxdata[4]=='#')
		  {
			  if(strstr(rxdata,"111")!=NULL)
			  {
				  LEDON;
			  }
			  if(strstr(rxdata,"222")!=NULL)
			  {
				  LEDOFF;
			  }
		  }
		  else if(rxdata[8]=='#')
		  {
				times[0] = atoi(strjw);
			    strjw = strtok(NULL,"-");
				times[1] = atoi(strjw);
			  if(times[1]==(hahastr[bootclass]-4))
			  {
				HAL_FLASH_Unlock();
				f.TypeErase = FLASH_TYPEERASE_PAGES;
				f.PageAddress = 0x08007C00;
				f.NbPages = 1;
				HAL_FLASHEx_Erase(&f, &PageError);
				HAL_FLASH_Program(FLASH_TYPEPROGRAM_HALFWORD ,0x08007C00,times[0]);
				f.TypeErase = FLASH_TYPEERASE_PAGES;
				f.PageAddress = 0x08007800;
				f.NbPages = 1;
				HAL_FLASHEx_Erase(&f, &PageError);
				HAL_FLASH_Program(FLASH_TYPEPROGRAM_HALFWORD ,0x08007800,bootclass+1);
				HAL_FLASH_Lock();	
				bootclass = *(volatile u8*)0x08007800;
				bootconst = *(volatile u8*)0x08007C00;
        switch(times[0])//   ÷ 
		  {
			  case 0  : time_buf[1]=0x00;break;
			  case 1  : time_buf[1]=0x01;break;
			  case 2  : time_buf[1]=0x02;break;
			  case 3  : time_buf[1]=0x03;break;
			  case 4  : time_buf[1]=0x04;break;
			  case 5  : time_buf[1]=0x05;break;
			  case 6  : time_buf[1]=0x06;break;
			  case 7  : time_buf[1]=0x07;break;
			  case 8  : time_buf[1]=0x08;break;
			  case 9  : time_buf[1]=0x09;break;
			  case 10 : time_buf[1]=0x10;break;
			  case 11 : time_buf[1]=0x11;break;
			  case 12 : time_buf[1]=0x12;break;
			  case 13 : time_buf[1]=0x13;break;
			  case 14 : time_buf[1]=0x14;break;
			  case 15 : time_buf[1]=0x15;break;
			  case 16 : time_buf[1]=0x16;break;
			  case 17 : time_buf[1]=0x17;break;
			  case 18 : time_buf[1]=0x18;break;
			  case 19 : time_buf[1]=0x19;break;
			  case 20 : time_buf[1]=0x20;break;
			  case 21 : time_buf[1]=0x21;break;
			  case 22 : time_buf[1]=0x22;break;
			  case 23 : time_buf[1]=0x23;break;
			  case 24 : time_buf[1]=0x24;break;
			  case 25 : time_buf[1]=0x25;break;
			  case 26 : time_buf[1]=0x26;break;
			  case 27 : time_buf[1]=0x27;break;
			  case 28 : time_buf[1]=0x28;break;
			  case 29 : time_buf[1]=0x29;break;
			  case 30 : time_buf[1]=0x30;break;
			  case 31 : time_buf[1]=0x31;break;
			  case 32 : time_buf[1]=0x32;break;
			  case 33 : time_buf[1]=0x33;break;
			  case 34 : time_buf[1]=0x34;break;
			  case 35 : time_buf[1]=0x35;break;
			  case 36 : time_buf[1]=0x36;break;
			  case 37 : time_buf[1]=0x37;break;
			  case 38 : time_buf[1]=0x38;break;
			  case 39 : time_buf[1]=0x39;break;
			  case 40 : time_buf[1]=0x40;break;
			  case 41 : time_buf[1]=0x41;break;
			  case 42 : time_buf[1]=0x42;break;
			  case 43 : time_buf[1]=0x43;break;
			  case 44 : time_buf[1]=0x44;break;
			  case 45 : time_buf[1]=0x45;break;
			  case 46 : time_buf[1]=0x46;break;
			  case 47 : time_buf[1]=0x47;break;
			  case 48 : time_buf[1]=0x48;break;
			  case 49 : time_buf[1]=0x49;break;
			  case 50 : time_buf[1]=0x50;break;
			  case 51 : time_buf[1]=0x51;break;
			  case 52 : time_buf[1]=0x52;break;
			  case 53 : time_buf[1]=0x53;break;
			  case 54 : time_buf[1]=0x54;break;
			  case 55 : time_buf[1]=0x55;break;
			  case 56 : time_buf[1]=0x56;break;
			  case 57 : time_buf[1]=0x57;break;
			  case 58 : time_buf[1]=0x58;break;
			  case 59 : time_buf[1]=0x59;break;
			  default : time_buf[5]=0x01;
		  }
		  ds1302_write_time2();
	  }
		  }
		  else
		  {
		  strjw = strtok(rxdata,"-");// ָ     
		  strjw = strtok(NULL,"-");
		  times[0] = atoi(strjw);
		  strjw = strtok(NULL,"-");
		  times[1] = atoi(strjw);
		  switch(times[0])//      
		  {
			 // case 0 : time_buf[2]=0x00;break;
			  case 1 : time_buf[2]=0x01;break;
			  case 2 : time_buf[2]=0x02;break;
			  case 3 : time_buf[2]=0x03;break;
			  case 4 : time_buf[2]=0x04;break;
			  case 5 : time_buf[2]=0x05;break;
			  case 6 : time_buf[2]=0x06;break;
			  case 7 : time_buf[2]=0x07;break;
			  case 8 : time_buf[2]=0x08;break;
			  case 9 : time_buf[2]=0x09;break;
			  case 10 : time_buf[2]=0x10;break;
			  case 11 : time_buf[2]=0x11;break;
			  case 12 : time_buf[2]=0x12;break;
			  default : time_buf[2]=0x01;
		  }

七、单片机实物资料

资料获取 查看主页介绍:兆龙电子单片机设计

相关推荐
木子啊1 小时前
优雅接管异常:打造安全的用户体验
安全·ux
chengpei1471 小时前
Ender-3S加装3DTouch实现自动网床校准
单片机·嵌入式硬件·3d打印
开源能源管理系统1 小时前
MyEMS开源能源管理系统:开源赋能、智控减碳,引领工业能源管理新变革
开源·能源·能源管理系统·零碳工厂
智驱力人工智能1 小时前
景区节假日车流实时预警平台 从拥堵治理到体验升级的工程实践 车流量检测 城市路口车流量信号优化方案 学校周边车流量安全分析方案
人工智能·opencv·算法·安全·yolo·边缘计算
B2_Proxy2 小时前
如何使用代理服务解决“您的 ASN 被阻止”错误:全面策略分析
网络·爬虫·网络协议·tcp/ip·安全·代理模式
墨染青竹梦悠然2 小时前
基于Django+vue的图书借阅管理系统
前端·vue.js·后端·python·django·毕业设计·毕设
松涛和鸣2 小时前
DAY69 Practical Guide to Linux Character Device Drivers
linux·服务器·arm开发·数据库·单片机·嵌入式硬件
乾元2 小时前
下一代检测:基于自编码器(Autoencoder)的异常流量检测
运维·网络·人工智能·深度学习·安全·安全架构
bai5459362 小时前
STM32 CubeIDE 超声波测距
stm32·单片机·嵌入式硬件