一,智能环境检测背景
智能环境检测技术的发展使得我们可以更准确地了解环境参数的变化,并能够对应采取相应的措施,如自动调节温度、湿度、二氧化碳等,以提供更舒适和健康的生活和工作环境。
二,本产品介绍
本产品基于物联网设计,利用 stm32f103c8t6制作的智能环境监测,有 二氧化碳传感器,温湿度传感器,人体红外传感器等实时数据将显示在TFT屏幕上。本产品设有人体红外警报,当有人经过时将会产生警报,声控功能 ,检测到有人说话时将会有灯亮,光敏功能,到黑夜将会有路灯亮起来。
1.二氧化碳传感器
二氧化碳是用于测量仪器的二氧化碳气体。CO 2传感器最常见的原理是红外气体传感器(NDIR)和化学气体传感器。测量二氧化碳对于监测室内空气质量,二氧化碳分析仪形式的肺功能以及许多工业过程非常重要。
2.温湿度传感器
温湿度传感器是一种用于测量和监测环境中的温度和湿度的设备。它能够实时采集环境中的温度和湿度数据,并将其转换成电信号或数字信号,供其他系统或设备进行分析和处理。
温湿度传感器通常由温度传感器和湿度传感器组成,通过两个传感器同时工作来获取环境的温湿度信息。
3.TFT显示
TFT显示相比OLED优势比较大,TFT有不同的颜色。在stm32f103c8t6中因为CMU较小,如果想显示比较大 的照片将需要更换 芯片 ,可以采用stm32f103ze,使用TFT必须使用取模工具。
本实验取模采用的设置是32*32
三,代码部分
此部分为mq2采用ADC1进行数据采集MQ2.C
#include <stdio.h>
#include "delay.h"
void MQ2_Init(void)
{
ADC_InitTypeDef ADC_InitStructure;
GPIO_InitTypeDef GPIO_InitStructure;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA |RCC_APB2Periph_ADC1, ENABLE );
RCC_ADCCLKConfig(RCC_PCLK2_Div6);
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_1;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AIN;
GPIO_Init(GPIOA, &GPIO_InitStructure);
ADC_DeInit(ADC1); //复位ADC1
ADC_InitStructure.ADC_Mode = ADC_Mode_Independent;
ADC_InitStructure.ADC_ScanConvMode = DISABLE; //模数转换工作在单通道模式
ADC_InitStructure.ADC_ContinuousConvMode = DISABLE; //模数转换工作在单次转换模式
ADC_InitStructure.ADC_ExternalTrigConv = ADC_ExternalTrigConv_None; //转换由软件而不是外部触发启动
ADC_InitStructure.ADC_DataAlign = ADC_DataAlign_Right; //ADC数据右对齐
ADC_InitStructure.ADC_NbrOfChannel = 1; //顺序进行规则转换的ADC通道的数目
ADC_Init(ADC1, &ADC_InitStructure); //根据ADC_InitStruct中指定的参数初始化外设ADCx的寄存器
ADC_Cmd(ADC1, ENABLE);
ADC_ResetCalibration(ADC1);
while(ADC_GetResetCalibrationStatus(ADC1)); //等待复位校准结束
ADC_StartCalibration(ADC1); //开启AD校准
while(ADC_GetCalibrationStatus(ADC1)); //等待校准结束
}
//获得ADC值
//ch:通道值 0~3
u16 Get_Adc(u8 ch)
{
ADC_RegularChannelConfig(ADC1, ch, 1, ADC_SampleTime_239Cycles5 );
ADC_SoftwareStartConvCmd(ADC1, ENABLE);
while(!ADC_GetFlagStatus(ADC1, ADC_FLAG_EOC ));
return ADC_GetConversionValue(ADC1);
}
u16 Get_Adc_Average(u8 ch,u8 times)
{
u32 temp_val=0;
u8 t;
for(t=0;t<times;t++)
{
temp_val+=Get_Adc(ch);
Delay_ms(5);
}
return temp_val/times;
}
infrared.c
#include "infrared.h"
#include "usart.h"
#include "TFT.h"
void Infrared_Init(void)
{
GPIO_InitTypeDef GPIO_InitStructure;//定义结构体变量
RCC_APB2PeriphClockCmd(GPIOB_RCC,ENABLE);
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
GPIO_InitStructure.GPIO_Pin = PIN ;
GPIO_InitStructure.GPIO_Speed= GPIO_Speed_50MHz;
GPIO_Init(PORT ,&GPIO_InitStructure);
}
void infrared_test(void)
{
if( Read_STATE() == RESET)
{
printf("NO People\n");
GPIO_ResetBits(GPIOB,GPIO_Pin_7);
// showhanzi(160,200,38); //解
// showhanzi(195,200,39); //除
showhanzi(160,200,24); //警
showhanzi(195,200,23); //报
}
else
{
printf("Light\r\n");
GPIO_SetBits(GPIOB,GPIO_Pin_7);
// showhanzi(160,200,24); //警
// showhanzi(195,200,23); //报
showhanzi(160,200,38); //解
showhanzi(195,200,39); //除
}
}
完整代码请私信小编(记着点赞关注一下小编)
四,成品展示
小编初学请多多指教