项目成品图片:
01
—
项目简介
1.功能详解
功能如下:
STM32F103C8T6单片机作为主控制器
DS18B20测量环境温度,当温度不在设置的上下限,则声光报警
PM2.5传感器测量粉尘浓度,当浓度大于设定最大值,则声光报警,并自动喷雾
可通过按键设置各阈值
通过OLED显示屏显示测量值
2.材料清单
STM32F103C8T6单片机
OLED 屏幕
DS18B20温度传感器
粉尘传感器
BT04A蓝牙模块
继电器
有源蜂鸣器
加湿器
02
—
原理图设计
03
—
PCB硬件设计
PCB图
04
—
程序设计
#include"sys.h"#include"stdio.h"#include"string.h"#include"stdlib.h"#include"math.h"#include"delay.h"#include"gpio.h"#include"key.h"#include"oled.h"#include"usart.h"#include"adc.h"#include"pm25.h"#include"ds18b20.h"
/**********************************变量定义**********************************/uint8_tkey_num =0;//按键扫描标志位uint8_tflag_display =0;//显示界面标志位uint32_ttime_num =0;//10ms计时short temp_value =0;//温度值u16 temp_max =40; //温度最大值u16 temp_min =10;//温度最小值u16 pm25_value =0; //粉尘值u16 pm25_max =200; //粉尘最大值_Bool flag_mode =0;//模式标志位externuint8_tusart1_buf[256];//串口1接收数组chardisplay_buf[32];//显示缓存区/**********************************函数声明**********************************/voidKey_function(void);//按键函数voidMonitor_function(void);//监测函数voidDisplay_function(void);//显示函数voidManage_function(void);//处理函数
/***********主函数*****/intmain(void){ NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);//配置中断优先分组Delay_Init(); //延时初始化 Gpio_Init(); //IO初始化Key_Init(); //按键初始化Oled_Init(); //OLED初始化Oled_Clear_All();//清屏Usart1_Init(9600); //串口1初始化
PM25_Init();//PM2.5初始化Adc_Init();//ADC初始化DS18B20_Init();//w温度初始化while(1){Key_function();//按键函数Monitor_function();//监测函数Display_function();//显示函数Manage_function();//处理函数
time_num++;//计时变量+1Delay_ms(10);if(time_num %10==0)LED_SYS = ~LED_SYS;if(time_num >=5000){time_num =0;}}}
/***********按键函数*****/voidKey_function(void){key_num =Chiclet_Keyboard_Scan(0);//按键扫描if(key_num !=0)//有按键按下{switch(key_num){case1: //按键1,切换设置界面flag_display++;if(flag_display >=4)flag_display =0;
Oled_Clear_All(); //清屏break;
case2: //按键2switch(flag_display){case0: //界面0:
break;
case1://界面1:温度最大值+1if(temp_max 99)temp_max++;break;
case2://界面2:温度最小值+1if(temp_min < temp_max-1)temp_min++;break;
case3://界面3:if(pm25_max 650)pm25_max++;break;
default:break;}break;
case3://按键3switch(flag_display){case0: //界面0:
break;
case1://界面1:温度最大值-1if(temp_max > temp_min+1)temp_max--;break;
case2://界面2:温度最小值-1if(temp_min >0)temp_min--;break;
case3://界面3:if(pm25_max >0)pm25_max--;break;
default:break;}break;
default:
break;}}}
/***********监测函数*****/voidMonitor_function(void){if(flag_display ==0)//测量界面{
pm25_value =Pm25_Get_Value(3);//获取PM2.5temp_value =DS18B20_Get_Temp();
if(time_num %30==0)//发送数据{UsartPrintf(USART1,"温度:%d.%dC\r\n",temp_value/10,temp_value%10);UsartPrintf(USART1,"粉尘:%dppm\r\n",pm25_value);}
if(USART1_WaitRecive() ==0)//如果接收到蓝牙数据{switch(usart1_buf[0]){case('A')://A:切换自动模式flag_mode =0;break;
case('B')://B:RELAY_JS = ~RELAY_JS;flag_mode =1;break;
default:
break;}USART1_Clear();}}}
/***********显示函数*****/voidDisplay_function(void){switch(flag_display)//根据不同的显示模式标志位,显示不同的界面{case0: //界面0:Oled_ShowCHinese(1,0,"温度:");sprintf(display_buf,"%d.%dC ",temp_value/10,temp_value%10);Oled_ShowString(1,6, display_buf);Oled_ShowCHinese(2,0,"粉尘:");sprintf(display_buf,"%dppm ",pm25_value);Oled_ShowString(2,6, display_buf);if(flag_mode ==0)//显示模式Oled_ShowCHinese(3,0,"模式:自动");elseOled_ShowCHinese(3,0,"模式:手动");break;
case1://界面1:显示设置温度最大值Oled_ShowCHinese(1,0,"设置温度最大值");if(time_num %5==0){sprintf(display_buf,"%d ",temp_max);Oled_ShowString(2,6, display_buf);}if(time_num %10==0){Oled_ShowString(2,6," ");}break;
case2://界面2:显示设置温度最小值Oled_ShowCHinese(1,0,"设置温度最小值");if(time_num %5==0){sprintf(display_buf,"%d ",temp_min);Oled_ShowString(2,6, display_buf);}if(time_num %10==0){Oled_ShowString(2,6," ");}break;
case3://界面3:Oled_ShowCHinese(1,0,"设置粉尘最大值");if(time_num %5==0){sprintf(display_buf,"%d ",pm25_max);Oled_ShowString(2,7, display_buf);}if(time_num %10==0){Oled_ShowString(2,7," ");}break;
default:
break;}}
/***********处理函数*****/voidManage_function(void){if(flag_display ==0) //测量界面{if(flag_mode ==0){if(pm25_value > pm25_max || temp_value > temp_max*10|| temp_value < temp_min*10)?//声光报警{if(time_num %?3?==?0){BEEP =~BEEP;LED =~ LED;}}else{BEEP =?0;LED =?1;}
if(pm25_value > pm25_max){RELAY_JS =1;}else{RELAY_JS =0;}}}else //设置界面{RELAY_JS =0;BEEP =0;LED =1;}}
05
—
实验效果
-
控制器
+关注
关注
114文章
17255浏览量
185486 -
矿井
+关注
关注
0文章
15浏览量
11462 -
STM32
+关注
关注
2296文章
11039浏览量
366714 -
监测系统
+关注
关注
8文章
2916浏览量
82703
发布评论请先 登录
如何在米尔-STM32MP257开发板上实现环境监测系统

评论