我们在日常生活中一般会需要采集光照度来判断灯是否打开,应用范围非常广泛。本次来研究一下该模块的实现。
首先看一下模块的样子,如下图:
该模块有四个引脚,分别为VCC、GND、AO、DO,其中AO是模块的模拟输出,DO是模块的数字量输出。
我们分别验证该模块的数字量输出和模拟量输出,并通过标准库和HAL库实现。
单片机型号:STM32F103系列
光敏模块工作电压:3.3V-5V
标准库实现:
1.数字量实现光照度采集。
接线表设计:
模块(光敏模块)STM32的IO口设置的工作模式VCCVCC(3.3V)-GNDGND-DOPA0GPIO_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光照度强rn");
}
if(GPIO_ReadInputDataBit(GPIOA, GPIO_Pin_0) == 1)
{
USART1_printf(USART1, "n光照度弱rn");
}
DelayMS(1000);//延时1秒
}
实现效果: 提示:我们可以调节模块中的电位器调整对光照变化的灵敏度。
显然数字量的检测可以实现光照度,但光照度的变不能细化,因此我们需要AD转换,实现光照度精确采集,这样可以应用到很多场景。
2.模拟量实现光照度采集。
接线表设计:
模块(光敏模块)STM32的IO口设置的工作模式VCCVCC(3.3V)-GNDGND-AOPA0GPIO_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-AOPA0ADC1_IN0
-PA9TX(串口1通信)-PA10RX(串口1通信)实现效果:
大家需要可以留言,我发给大家,互相学习互相交流。
源码下载链接:(1条消息) 光敏电阻模块光照度采集(标准库和HAL实现)-电信文档类资源-CSDN下载
相关知识
STM32 HAL库实现GY302光照传感器驱动指南
基于STM32的智能农业灌溉系统设计与实现
STM32智能农业灌溉系统教程
STM32智能空气净化器控制系统开发与实践
基于STM32的农业病虫害检测检测系统:OpenCV、MQTT、Flask框架、MySQL(代码示例)
【STM32Cube
【免费】基于STM32的自动灌溉系统,该系统可以根据土壤湿度和天气预报来决定何时浇水,从而实现智能化的植物养护
基于STM32的温室环境监控系统设计与实现
STM32智能农田监测系统教程
基于STM32的智能宿舍安全管理系统:集成电流监测、烟雾探测与无线通信技术,实现高效用电管理与安全监控(详细流程)
网址: 【STM32学习】(28)STM32实现光照度采集(标准库和HAL库实现) https://m.huajiangbk.com/newsview1515683.html
上一篇: 最适合客厅摆放的3种花 气派美观 |
下一篇: 基于STM32单片机的光强温湿度 |