一:功能介绍:
1、系统组成:采用stm32f103c8t6核心板+SGP30传感器+MQ137氨气传感器+DHT11温湿度传感器+OLED显示屏+蓝牙HC05模块+继电器+按键+水泵+风扇
2、通过DHT11传感器采集温湿度,显示到OLED上面;
3、通过MQ137传感器检测氨气浓度,显示到OLED上面;
4、通过SGP30传感器检测CO2浓度,显示到OLED上面;
5、当温度、湿度、CO2浓度大于对应的阈值(程序可以调整),打开风扇通风;
6、当温度低于阈值(程序可调),开启加热(LED灯模拟)
7、当湿度低于阈值(程序可调),打开水泵进行抽水;
8、可以通过按键手动打开风扇和水泵;
9、全部数据通过蓝牙模块上传到手机APP;
二:实物演示视频
256-基于stm32单片机CO2氨气温湿度检测蓝牙上传数据
三:程序代码展示(采用C语言编写,使用keil5编译,代码有中文注释,新手容易看懂)
int main(void)
{
u32 sgp30_dat;
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);//设置中断优先级分组为组2:2位抢占优先级,2位响应优先级
delay_init();
uart_init(9600);
SGP30_Init(); //初始化SGP30
delay_ms(100);
SGP30_Write(0x20,0x08);
sgp30_dat = SGP30_Read();//读取SGP30的值
CO2Data = (sgp30_dat & 0xffff0000) >> 16;
TVOCData = sgp30_dat & 0x0000ffff;
OLED_Init();
OLED_ColorTurn(0);
OLED_DisplayTurn(0);
OLED_ShowString(0,0,"TEMP:",16); OLED_ShowString(70,0,"C",16);
OLED_ShowString(0,16,"HUMI:",16); OLED_ShowString(70,16,"%",16);
OLED_ShowString(0,32," CO2:",16); OLED_ShowString(90,32,"PPM",16);
OLED_ShowString(0,48," NH3:",16); OLED_ShowString(90,48,"PPM",16);
OLED_Refresh();
Adc_Init(); DHT11_Init();
LED_Init();
LED=0;Q1=Q2=1;
while(CO2Data == 400 && TVOCData == 0)
{
SGP30_Write(0x20,0x08);
sgp30_dat = SGP30_Read();//读取SGP30的值
CO2Data = (sgp30_dat & 0xffff0000) >> 16;//取出CO2浓度值
TVOCData = sgp30_dat & 0x0000ffff; //取出TVOC值
printf("正在检测中...\r\n");
}
while(1)
{
mq137=Get_Adc_Average(ADC_Channel_1,10)-280;
if(mq137<0) mq137=0;
DHT11_Read_TempAndHumidity ( & DHT11_Data );//获取传感器湿度
SGP30_Write(0x20,0x08);
sgp30_dat = SGP30_Read();//读取SGP30的值
CO2Data = ((sgp30_dat & 0xffff0000) >> 16)-400;//取出CO2浓度值
TVOCData = sgp30_dat & 0x0000ffff; //取出TVOC值
OLED_ShowNum(50,0,DHT11_Data .temp_int,2,16);//显示温度数据
OLED_ShowNum(50,16,DHT11_Data .humi_int,2,16);//显示湿度
OLED_ShowNum(50,32,CO2Data,4,16);//显示CO2
OLED_ShowNum(50,48,mq137,4,16);//显示mq137
OLED_Refresh();
if(DHT11_Data .temp_int>25||DHT11_Data .humi_int>90||CO2Data>100||mq137>100) Q1=0;//温度湿度CO2过高 开风扇通风
else Q1=1;
if(DHT11_Data .temp_int<10) LED=0;//温度过低 开启加热 led灯模拟
else LED=1;
if(DHT11_Data .humi_int<30) Q2=0;//湿度低于30 开启洒水电机
else Q2=1;
if(K1==0) Q1=0;
if(K2==0) Q2=0;
printf("CO2:%dppm\r\n",CO2Data);//蓝牙上传数据
printf("WENDU:%d C\r\nSHIDU:%d \r\n",DHT11_Data .temp_int,DHT11_Data .humi_int);//蓝牙上传数据
printf("NH3:%dppm\r\n",mq137);//蓝牙上传数据
}
}
四:原理图文件展示(采用AD(Altium Designer)打开)
五:实物图展示:
六: 资料清单展示: