功能介绍:采用stm32单片机作为主控CPU,采用MQ7传感器采集CO浓度,采用DS18b20传感器采集温度,采用光敏传感器采集当前光照值,通过红外接近传感器自动感应打开抽烟机,当检测到CO浓度超过设置值或者温度超过设置值,两个设置值都可以通过按键进行更改,风扇打开进行排气并且蜂鸣器报警,当监测光照值比较低,自动开灯,并且抽烟机使用次数超过一定值,自动进行清洁功能,文末有资料分享:
37-基于stm32单片机智能厨房抽烟机设计(程序+原理图+元件清单全套资料)
程序打开办法:特别注意:下载资料包以后一定要先解压!!!(建议解压到桌面上,文件路径太深会导致程序打开异常),解压后再用keil5打开。
程序部分展示,有中文注释,新手容易看懂;
//硬件初始化
void Hardware_Init(void)
{
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);//设置中断优先级分组为组2:2位抢占优先级,2位响应优先级
delay_init(); //延时函数初始化
Usart1_Init(9600); //串口1初始化为115200
// Usart2_Init(115200); //串口2,驱动ESP8266用
LED_Init(); //LED初始化
}
int main(void)
{
unsigned char *dataPtr = NULL;
unsigned short timeCount = 30; //发送间隔变量
uint8_t status;
long int cardnum=0;
u16 adcx;
int temp,mq7,lux,temp1=25,mq=200,num=0;
Hardware_Init(); //初始化外围硬件
OLED_Init();
OLED_ColorTurn(0);
OLED_DisplayTurn(0);
OLED_ShowString(0,0," MQ7:",16); OLED_ShowString(70,0,"PPM",16);
OLED_ShowString(0,16,"TEMP:",16); OLED_ShowString(70,16,"C",16);
OLED_ShowString(0,32," LUX:",16); OLED_ShowString(70,32,"LUX",16);
OLED_Refresh();
KEY_Init();
Adc_Init(); LED_Init();
LED=1;
Q1=1;BEEP=1;LED=1;
while(1)
{
if(K1==0)//设置温度-
{
temp1--;
if(temp1<1) temp1=1;
}
if(K2==0)//设置温度+
{
temp1++;
if(temp1>99) temp1=99;
}
if(K3==0)//设置浓度-
{
mq--;
if(mq<1) mq=1;
}
if(K4==0)//设置浓度+
{
mq++;
if(mq>999) mq=999;
}
adcx=Get_Adc_Average(ADC_Channel_1,10);
mq7=(float)adcx/4096*330-100;//获取mq7浓度值
if(mq7<100) mq7=0; //浓度太小不显示
lux=333-(float)Get_Adc_Average(ADC_Channel_0,10)/4096*330;//获取光照强
temp=DS18B20_Get_Temp();//获取温度值
if(lux<150) LED=0;
else LED=1;
if(mq7>mq||temp>temp1)//浓度大于预设或者温度大于预设 蜂鸣器报警
{
Q1=BEEP=0;
num++;
}
else Q1=BEEP=1;
if(hw==0) //感应有人使用自动打开
{
Q1=0;
num++;
}
if(num>30) //使用次数超过30 自动清洁
{
num=0;
OLED_ShowNum(30,48,50,2,16);
OLED_ShowString(50,48,"C Clean",16);
OLED_Refresh();
delay_ms(3000); delay_ms(3000); delay_ms(3000);
OLED_ShowString(0,48," ",16);
}
OLED_ShowNum(40,0,mq7,3,16); OLED_ShowNum(100,0,mq,3,16);
OLED_ShowNum(40,16,temp,3,16); OLED_ShowNum(100,16,temp1,3,16);
OLED_ShowNum(40,32,lux,3,16);
OLED_ShowNum(0,48,num,2,16);
OLED_Refresh();
delay_ms(300);
}
}
下面是原理图展示: