飞道的博客

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

379人阅读  评论(0)

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

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

     

                                                                                                              

 

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

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

单片机型号:STM32F103系列

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

标准库实现:

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

         接线表设计:

 

模块(光敏模块) STM32的IO口 设置的工作模式
VCC VCC(3.3V) -
GND GND -
DO PA0

GPIO_Mode_IPU

(上拉输入模式)

- PA9 TX(串口1通信)
- PA10 RX(串口1通信)

 

      代码片段:
 


  
  1. / **** **** **** **** **** **** **** **** **** ****
  2. 函数名称:void illuminanceDetectionRead _DO(void)
  3. 函数参数:无参
  4. 函数返回值:无
  5. 函数功能:光照度状态读取
  6. 创建作者:王艇
  7. 创建时间:2021.5.21
  8. 联系方式:
  9. 修改作者:
  10. 修改时间:
  11. 修改说明:
  12. ****************************************/
  13. void illuminanceDetectionRead_DO(void)
  14. {
  15. if(GPIO_ReadInputDataBit(GPIOA, GPIO_Pin_0) == 0)
  16. {
  17. USART1_printf(USART1, "\n光照度强\r\n");
  18. }
  19. if(GPIO_ReadInputDataBit(GPIOA, GPIO_Pin_0) == 1)
  20. {
  21. USART1_printf(USART1, "\n光照度弱\r\n");
  22. }
  23. DelayMS(1000); // 延时1秒
  24. }

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

                                                                                          

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

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

           接线表设计:

模块(光敏模块) STM32的IO口 设置的工作模式
VCC VCC(3.3V) -
GND GND -
AO PA0

GPIO_Mode_AIN

(模拟输入模式)

- PA9 TX(串口1通信)
- PA10 RX(串口1通信)


     


  
  1. / **** **** **** **** **** **** **** **** **** ****
  2. 函数名称:void illuminanceInitConfig(void)
  3. 函数参数:无参
  4. 函数返回值:无
  5. 函数功能:光敏模块ADC初始化配置
  6. 创建作者:王艇
  7. 创建时间:2021.5.21
  8. 联系方式:
  9. 修改作者:
  10. 修改时间:
  11. 修改说明:
  12. **** **** **** **** **** **** **** **** **** ****/
  13. void illuminanceInitConfig _AO(void)
  14. {
  15. GPIO_InitTypeDef GPIO _InitStructure;
  16. ADC_InitTypeDef ADC _InitStructure;
  17. RCC_APB2PeriphClockCmd(RCC _APB2Periph_ADC1,ENABLE);
  18. RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);
  19. GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0;
  20. GPIO_InitStructure.GPIO_Speed = GPIO_Speed_2MHz;
  21. GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AIN;
  22. GPIO_Init(GPIOA, &GPIO_InitStructure);
  23. // ADC1 工作模式配置
  24. ADC_InitStructure.ADC_Mode = ADC_Mode_Independent;
  25. ADC_InitStructure.ADC_ScanConvMode = DISABLE;
  26. ADC_InitStructure.ADC_ContinuousConvMode = DISABLE; //单次转换
  27. ADC_InitStructure.ADC_ExternalTrigConv = ADC_ExternalTrigConv_None;
  28. ADC_InitStructure.ADC_DataAlign = ADC_DataAlign_Right;
  29. ADC_InitStructure.ADC_NbrOfChannel = 1;
  30. ADC_Init(ADC1, &ADC_InitStructure);
  31. ADC_RegularChannelConfig(ADC1, ADC_Channel_0, 1, ADC_SampleTime_13Cycles5);
  32. ADC_Cmd(ADC1, ENABLE);
  33. ADC_ResetCalibration(ADC1);
  34. /* Check the end of ADC1 reset calibration register */
  35. while(ADC_GetResetCalibrationStatus(ADC1));
  36. ADC_StartCalibration(ADC1);
  37. /* Check the end of ADC1 calibration */
  38. while(ADC_GetCalibrationStatus(ADC1));
  39. }

  
  1. / **** **** **** **** **** **** **** **** **** ****
  2. 函数名称:void illuminanceDetectionRead _AO(void)
  3. 函数参数:无参
  4. 函数返回值:无
  5. 函数功能:光照度状态读取
  6. 创建作者:王艇
  7. 创建时间:2021.5.21
  8. 联系方式:
  9. 修改作者:
  10. 修改时间:
  11. 修改说明:
  12. ****************************************/
  13. u16 illuminanceDetectionRead_AO(void)
  14. {
  15. u16 ADC_VALUE = 0;
  16. ADC_SoftwareStartConvCmd(ADC1,ENABLE);
  17. ADC_VALUE = ADC_GetConversionValue(ADC1);
  18. while(ADC_GetFlagStatus(ADC1, ADC_FLAG_EOC) == RESET);
  19. return ADC_VALUE;
  20. }

 实现效果:

                                                                                 

HAL库实现:

           1.数字量采集光照度:

               接线表设计:

模块(光敏模块) STM32的IO口 设置的工作模式
VCC VCC(3.3V) -
GND GND -
DO PA0

输入模式(上拉)

- PA9 TX(串口1通信)
- PA10 RX(串口1通信)

 

                                                                                  

                                                                                                  

                                           

 

          实现效果:

                                                                                      

 

            2.模拟量采集光照度:

               接线表设计:

模块(光敏模块) STM32的IO口 设置的工作模式
VCC VCC(3.3V) -
GND GND -
AO PA0

ADC1_IN0

- PA9 TX(串口1通信)
- PA10 RX(串口1通信)

 

 

           实现效果:

                                                                                              

 

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

 

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

 


转载:https://blog.csdn.net/XiaoCaiDaYong/article/details/117108810
查看评论
* 以上用户言论只代表其个人观点,不代表本网站的观点或立场