本设计的硬件构成:
本设计由STM32单片机核心板+LCD1602液晶显示屏+MQ-7一氧化碳传感器+蜂鸣器+LM358运算放大器+ DHT11温湿度传感器+按键电路+蓝牙模块设计组成。
功能介绍:
1、本设计采用LCD1602显示屏作为系统的显示屏,用于显示当前检测的环境温度、湿度和CO浓度;设置状态下,显示各个参数的设置值。
2、温度、湿度数据的检测采用DHT11数字温湿度传感器;CO浓度采用MQ-7传感器,模拟型传感器,通过单片机ADC对模拟信号进行转换,最终转化为CO浓度。
3、系统三个按键功能分别为:按键1:设置键,按下后进入CO浓度报警值设置,再按下进入温度报警值设置,再按下进入湿度报警值设置;按键2为设置状态下的加1键,非设置状下CO浓度清零键;按键3为设置状态下的减一键。
4、如果系统检测温度、湿度、CO浓度其中一个超过设置值时,蜂鸣器开启报警;如均在设定值以内,蜂鸣器关闭。
5、蓝牙模式实现系统与手机APP的互联;手机连接蓝牙模块,可实时查看系统的各个参数的数据。
主要物料清单及型号:
显示屏:LCD1602;
单片机:STM32F103C8T6;
温湿度传感器:DHT11;
蜂鸣器:5V有源蜂鸣器;
一氧化碳传感器:MQ-7;
蓝牙模块:HC-05/06;
部分程序源码:
//=============================================================================
//函数名称:main
//功能概要:主函数
//参数说明:无
//函数返回:int
//============================================================================
int main(void)
{
u8 key=0;
delay_init(); //延时函数初始化
uart_init(9600);
KEY_Init(); //初始化按键
Adc_Init(); //ADC初始化
TIM3_Int_Init(49,7199);//50ms
Lcd_GPIO_init(); //初始化lcd引脚
Lcd_Init(); //初始化lcd屏幕
Lcd_Puts(0,0," WELCOME ");
LED_GPIO_Config();//初始化LED
BEEP=0;
delay_ms(500);
BEEP=1;
delay_ms(500);
while (1)
{
if(set==0)
key=KEY_Scan(0); //得到键值
else
key=KEY_Scan(1); //得到键值
KEY_Handle(key);
if(Res=='A')
{
Res=0;
if(refresh_en==1)
{
refresh_en=0;
printf("Stop Refresh!!\r\n"); //APP停止刷新当前状态
}
else
refresh_en=1;
}
if(time5ms>=300 && set==0)
{
time5ms=0;
if (dht11_read_data(buffer) == 0)
{
hum = buffer[0];
temp = buffer[2];
}
CO_Value = Get_CO_Average(20);
if(CO_Value>CO_Cali)
CO_Value=CO_Value-CO_Cali;
else
CO_Value=0;
if(set==0)
display(CO_Value,temp,hum);
if(refresh_en==1)
APP_data_refresh(); //刷新APP数据
if(warn_flag>0 && set==0) //是否为报警状态
{
if(warn_flag%2==0) //蜂鸣器报警
{
BEEP=0; //开启蜂鸣器
}
else
BEEP=1; //关闭蜂鸣器
warn_flag++;
}
else
{
warn_flag=0;
BEEP=1;
}
}
if(set==0) //如果为非设置状态,进入报警判断
{
if(co_alarm<CO_Value) //判断一氧化碳浓度报警值
{
if(warn_flag==0)
{
warn_flag=1;
warn_type=2;
}
}
else
{
warn_type=0;
warn_flag=0;
warn_en=0;
}
}
}
}