一:功能介绍:
1、系统组成:采用stm32f103c8t6核心板+DHT11温湿度+DS1302时钟模块+LCD1602显示屏+蜂鸣器+MQ135传感器+CH340USB模块+按键+LED
2、通过DHT11传感器采集温湿度,显示到LCD1602上面;
3、通过DS1302时钟模块读取当前时间,显示到LCD1602上面;
4、通过MQ135传感器检测车内空气质量,显示到LCD1602上面;
5、当空气质量浓度大于50(阈值程序可调),蜂鸣器报警提醒;
6、当温度大于30度(阈值程序可调),LED灯闪烁提醒;
7、通过CH340模块将数据通过串口上传到电脑串口助手;
二:实物演示视频
243-基于stm32单片机车内环境温湿度空气质量监测
三:程序代码展示(采用C语言编写,使用keil5编译,代码有中文注释,新手容易看懂)
void Display(void)
{
char xxx=0,yyy=0;
//T1 温度
WrByte1602(0,0,'T'); //.
WrByte1602(0,1,'='); //.
WrByte1602(0,2,AsciiCode[wendu%100/10]);
WrByte1602(0,3,AsciiCode[wendu%10]);
WrByte1602(0,4,' ');
//T2 湿度
WrByte1602(0,5,'H'); //.
WrByte1602(0,6,'='); //.
WrByte1602(0,7,AsciiCode[shidu%100/10]);
WrByte1602(0,8,AsciiCode[shidu%10]);
WrByte1602(0,9,' ');
//T3 浓度
WrByte1602(0,10,'N'); //.
WrByte1602(0,11,'='); //.
WrByte1602(0,12,AsciiCode[nongdu%1000/100]);
WrByte1602(0,13,AsciiCode[nongdu%100/10]);
WrByte1602(0,14,AsciiCode[nongdu%10]);
WrByte1602(0,15,' ');
xxx=0;yyy=1;
WrByte1602(yyy,xxx++,AsciiCode[shi%100/10]);
WrByte1602(yyy,xxx++,AsciiCode[shi%10]);
WrByte1602(yyy,xxx++,':');
WrByte1602(yyy,xxx++,AsciiCode[fen%100/10]);
WrByte1602(yyy,xxx++,AsciiCode[fen%10]);
WrByte1602(yyy,xxx++,':');
WrByte1602(yyy,xxx++,AsciiCode[miao%100/10]);
WrByte1602(yyy,xxx++,AsciiCode[miao%10]);
}
int main(void)
{
float vol;//ADC电压值
//时钟配置
SystemInit();
SystemCoreClockUpdate();
RCC_SYSCLKConfig(RCC_SYSCLKSource_HSI);
//引脚配置
GPIO_Configuration();
//LCD1602初始化
Init1602();
NVICConfig();
//RCC时钟开启
RCC_APB2PeriphClockCmd(RCC_APB2Periph_TIM1, ENABLE);
RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2, ENABLE);
RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3, ENABLE);
Usart1_Init(9600); //串口1初始化
DS1302_Init();
ADC_Set();
delay_ms(300);
//DS1302_Write_Time(); //ds1302时间校准
DS1302_Get_Time(time_data); //读取时间
shi=time_data[9]*10+time_data[10];
fen=time_data[11]*10+time_data[12];
miao=time_data[13]*10+time_data[14];
while (1)
{
vol = ADC_GetConversionValue(ADC1);
nongdu = (vol)*(3.3/4096)*100-20;
//读取温湿度
DHT11_receive(&shidu,&wendu);
DS1302_Get_Time(time_data); //读取时间
shi=time_data[9]*10+time_data[10];
fen=time_data[11]*10+time_data[12];
miao=time_data[13]*10+time_data[14];
//显示全部参数
Display();
//浓度大于50
if(nongdu>50 )
{
PBout(13)=1;//蜂鸣器提醒
}
else PBout(13)=0;//蜂鸣器关闭
//温度>30 LED闪烁提醒
if(wendu>30 )
{
PBout(12)=~PBout(12);
}
else PBout(12)=0;//否则关闭
printf("TEMP:%d\r\n",wendu); //串口发送温度
delay_ms(100);
printf("HUMI:%d\r\n",shidu); //串口发送湿度
delay_ms(100);
printf("nongdu:%d\r\n",nongdu); //串口发送浓度
delay_ms(100);
}
四:原理图文件展示(采用AD(Altium Designer)打开)
五:实物图展示:
六: 资料清单展示: