STM32学习(28)STM32实现光照度采集(标准库和HAL库实现)

Posted 书盲

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了STM32学习(28)STM32实现光照度采集(标准库和HAL库实现)相关的知识,希望对你有一定的参考价值。

我们在日常生活中一般会需要采集光照度来判断灯是否打开,应用范围非常广泛。本次来研究一下该模块的实现。

首先看一下模块的样子,如下图:

     

                                                                                                              

 

该模块有四个引脚,分别为VCC、GND、AO、DO,其中AO是模块的模拟输出,DO是模块的数字量输出。

我们分别验证该模块的数字量输出模拟量输出,并通过标准库HAL库实现。

单片机型号:STM32F103系列

光敏模块工作电压:3.3V-5V

标准库实现:

       1.数字量实现光照度采集。

         接线表设计:

 

模块(光敏模块)STM32的IO口设置的工作模式
VCCVCC(3.3V)-
GNDGND-
DOPA0

GPIO_Mode_IPU

(上拉输入模式)

-PA9TX(串口1通信)
-PA10RX(串口1通信)

 

      代码片段:
 

/****************************************
函数名称:void illuminanceDetectionRead_DO(void)
函数参数:无参
函数返回值:无
函数功能:光照度状态读取
创建作者:王艇
创建时间:2021.5.21
联系方式:
修改作者:
修改时间:
修改说明:
****************************************/
void illuminanceDetectionRead_DO(void)
{
	if(GPIO_ReadInputDataBit(GPIOA, GPIO_Pin_0) == 0)
	{
		USART1_printf(USART1, "\\n光照度强\\r\\n");
	}
	if(GPIO_ReadInputDataBit(GPIOA, GPIO_Pin_0) == 1)
	{
		USART1_printf(USART1, "\\n光照度弱\\r\\n");
	}
	DelayMS(1000);		//	延时1秒
}

      实现效果:                       提示:我们可以调节模块中的电位器调整对光照变化的灵敏度。

                                                                                          

        显然数字量的检测可以实现光照度,但光照度的变不能细化,因此我们需要AD转换,实现光照度精确采集,这样可以应用到很多场景。

        2.模拟量实现光照度采集。

           接线表设计:

模块(光敏模块)STM32的IO口设置的工作模式
VCCVCC(3.3V)-
GNDGND-
AOPA0

GPIO_Mode_AIN

(模拟输入模式)

-PA9TX(串口1通信)
-PA10RX(串口1通信)


     

/****************************************
函数名称:void illuminanceInitConfig(void)
函数参数:无参
函数返回值:无
函数功能:光敏模块ADC初始化配置
创建作者:王艇
创建时间:2021.5.21
联系方式:
修改作者:
修改时间:
修改说明:
****************************************/
void illuminanceInitConfig_AO(void)
{
	GPIO_InitTypeDef GPIO_InitStructure;
	ADC_InitTypeDef ADC_InitStructure;
	
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_ADC1,ENABLE);
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);

	GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0;
	GPIO_InitStructure.GPIO_Speed = GPIO_Speed_2MHz;
	GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AIN;
	GPIO_Init(GPIOA, &GPIO_InitStructure);
	
	// 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_InitStructure.ADC_NbrOfChannel = 1;
	ADC_Init(ADC1, &ADC_InitStructure);

	ADC_RegularChannelConfig(ADC1, ADC_Channel_0, 1, ADC_SampleTime_13Cycles5);    

	ADC_Cmd(ADC1, ENABLE);   
	ADC_ResetCalibration(ADC1);
	/* Check the end of ADC1 reset calibration register */
	while(ADC_GetResetCalibrationStatus(ADC1));
	ADC_StartCalibration(ADC1);
	/* Check the end of ADC1 calibration */
	while(ADC_GetCalibrationStatus(ADC1));
}
/****************************************
函数名称:void illuminanceDetectionRead_AO(void)
函数参数:无参
函数返回值:无
函数功能:光照度状态读取
创建作者:王艇
创建时间:2021.5.21
联系方式:
修改作者:
修改时间:
修改说明:
****************************************/
u16 illuminanceDetectionRead_AO(void)
{
	u16 ADC_VALUE = 0;
	
	
	ADC_SoftwareStartConvCmd(ADC1,ENABLE);
	ADC_VALUE = ADC_GetConversionValue(ADC1);
	while(ADC_GetFlagStatus(ADC1, ADC_FLAG_EOC) == RESET);
	return ADC_VALUE;
}

 实现效果:

                                                                                 

HAL库实现:

           1.数字量采集光照度:

               接线表设计:

模块(光敏模块)STM32的IO口设置的工作模式
VCCVCC(3.3V)-
GNDGND-
DOPA0

输入模式(上拉)

-PA9TX(串口1通信)
-PA10RX(串口1通信)

 

                                                                                  

                                                                                                  

                                           

 

          实现效果:

                                                                                      

 

            2.模拟量采集光照度:

               接线表设计:

模块(光敏模块)STM32的IO口设置的工作模式
VCCVCC(3.3V)-
GNDGND-
AOPA0

ADC1_IN0

-PA9TX(串口1通信)
-PA10RX(串口1通信)

 

 

           实现效果:

                                                                                              

 

大家需要可以留言,我发给大家,互相学习互相交流。

 

源码下载链接:(1条消息) 光敏电阻模块光照度采集(标准库和HAL实现)-电信文档类资源-CSDN下载

 

以上是关于STM32学习(28)STM32实现光照度采集(标准库和HAL库实现)的主要内容,如果未能解决你的问题,请参考以下文章

STM32实现光照强度传感器(BH1750)(标准库与HAL库实现)

STM32CubeMX学习教程之硬件I2C读取光照度

毕业设计 基于STM32单片机无线ZIGBEE智能大棚土壤湿度光照检测

STM32学习(30)STM32实现18B20温度采集(标准库和HAL库实现)

STM32基础入门

STM32+BH1750光敏传感器获取光照强度