本设计的硬件构成:
STM32F103C8T6单片机最小系统板,LCD1602液晶屏,BMP180气压传感器,有源蜂鸣器,DHT11温湿度传感器,按键,GP2Y1010AUOF粉尘传感器,蓝牙模块组成。
功能介绍:
1、本设计可实时监测当前环境的温度、湿度、气压、海拔高度及PM2.5浓度;
2、LCD1602液晶屏有三个界面,第一界面当前温度值和湿度值,第二界面显示当前的气压值和海拔高度,第三个界面为显示当前的测到PM2.5浓度值;
3、使用GP2Y1010AUOF粉尘传感器实时检测空气中的PM2.5值并通过1602显示出来,检测更加准确。
4、当粉尘浓度值高于设定值时,蜂鸣器会发出声光报警;
5、通过蓝牙模块连接手机,可在手机APP上实时监控当前各个数据;
6、按键功能
(1)S1:切换界面;S2:设置键;S3:加一键;S4:减一键;
(2)通过S1键,可切换当前的显示界面;
(2)按S2:按下S2设置键, 依次进入预设PM2.5报警值的调节模式。
(3)按S2键,预设值加。
(4)按S3键,预设值减。
(5)设置成功后,按S4确定键退出,返回到正常模式。
主要物料清单及型号:
显示屏:LCD1602;
单片机:STM32F103C8T6;
温湿度传感器:DHT11;
蜂鸣器:5V有源蜂鸣器;
气压传感器:BMP180;
PM2.5传感器:GP2Y1010AUOF;
蓝牙模块:HC-05/06;
部分程序源码:
//=============================================================================
//函数名称:main
//功能概要:主函数
//参数说明:无
//函数返回:int
//============================================================================
int main(void)
{
u8 ID = 0;
u8 key=0;
u8 buffer[5],i=10;
u16 hum;
u16 temp;
u16 pm25;
u8 LED_state=0;
int ControlDelaytime=10;
delay_init(); //延时函数初始化
LED_GPIO_Config();//初始化LED
USART1_Config();
// ADC_DMA_Init();
BMP_Init();
BMP_ReadCalibrationData();
KEY_Init(); //初始化按键
//RTC_Init();
Adc_Init(); //ADC初始化
TIM3_Int_Init(49,7199);//50ms
Lcd_GPIO_init(); //初始化lcd引脚
Lcd_Init(); //初始化lcd屏幕
BEEP=1;
while (1)
{
key=KEY_Scan(0); //得到键值
KEY_Handle(key);
if(time5ms>=100 && set==0)
{
time5ms=0;
LED=LED_state;
if(LED_state==0)
LED_state=1;
else
LED_state=0;
ID = BMP_ReadOneByte(0xd0);
BMP_UncompemstatedToTrue();
if (dht11_read_data(buffer) == 0)
{
hum = (buffer[0]<<8) + buffer[1] ;
temp = (buffer[2]<<8) + buffer[3];
}
pm25 = Get_GP2Y_Average(20);
if(UI==0)
display_dht11(temp,hum);
else if(UI==1)
display_pressure_altitude(bmp180.p,bmp180.altitude);
else
display_pm25(pm25);
APP_data_refresh(temp,hum,bmp180.p,bmp180.altitude,pm25); //刷新APP数据
}
if(set==0)
{
if(pm_alarm<pm25)
BEEP=0;
else
BEEP=1;
}
}
}