目录
YH-LDR 是野火设计的光强传感器,使用一个光敏电阻作为采集源,使用 LM393 作为电压比较器,可以通过调节模块的滑变来采集不同强度的光强。不需要使用 ADC,模块输出的就是一个数字量的信号,操作简单。其外观见图 1-1。
图 1-1 YH-LDR 光敏传感器模块
表格 1-1 YH-LDR 模块引脚说明
编号 | 名称 | 说明 |
1 | VCC | 电源正(5V) |
2 | GND | 地线 |
3 | OD | 信号输出 |
模块通过光敏电阻将光强转换成电压信号,输入到 LM 393 的一个电压比较通道,然后 LM393 在输出比较结果,可以通过滑变调节比较的电压。有强时 DO 输出低电平,光弱时 DO 输出高电平。电源接 3V3 时高电平时 1.4V,此时 STM32 把此电平识别为低电平,电源接 5V 时,DO 输出的是 2.6V,此时 STM32 可以识别出是高电平,所以在测试时电源是需要接 5V 的。
LDR传感器,即光敏电阻传感器,是一种检测光线强度的传感器。它具有以下工作原理和输出特性:
工作原理:LDR传感器基于半导体材料的光敏效应,即在光照下,半导体的电阻会随之发生变化。当光强度增强时,LDR的电阻值降低;当光强度减弱时,LDR的电阻值增加。
输出特性:LDR传感器的输出特性取决于所使用的半导体材料和工作条件。通常情况下,LDR传感器的输出电压随着光强度的变化而发生变化,输出特性呈现非线性关系。此外,LDR传感器的输出信号也会受到温度、湿度等环境因素的影响,需要进行校准。
总的来说,LDR传感器是一种简单、实用的光敏传感器,被广泛应用于光照度检测、亮度控制等领域。
YH-LDR 输出为模拟量电压输出。本小节以野火 STM32 开发板为例子说明如何使用STM32 与 YH-LDR 模块 ADC 电压采集的电路连接。
单片机系统通过 ADC 通道引脚与 YH-LDR 模块连接,与模块连接时,只要通过模块引出的排针连接好如下四根线即可,2 个实验都可以通过串口调试助手显示当前的空气灰尘浓度值,见表格 2-1。
表格 2-1 单片机与 YH-LDR 模块连接引脚表
单片机系统 | YH-LDR模块 |
5V | VCC |
GND | GND |
IO | DO |
YH-LDR 模块是一种光敏电阻模块,它可以检测光线的强度并输出相应的电压信号。使用单片机系统可以对 YH-LDR 模块进行控制和读取光线的强度值。
下面是 YH-LDR 模块的通用控制流程:
连接硬件:将 YH-LDR 模块连接到单片机的 ADC 输入引脚上,连接电源和地线。
初始化 ADC:初始化 ADC,设置 ADC 输入引脚和参考电压等参数。
读取模块输出:使用 ADC 转换器读取 YH-LDR 模块的输出电压值,并将其转换为相应的光线强度值。
处理数据:根据需要,对光线强度值进行处理,如转换为百分比或比较大小等。
控制输出:根据光线强度值,控制相应的输出设备,如 LED 灯或继电器等。
循环控制:在一个循环中不断重复上述步骤,以持续监测和控制 YH-LDR 模块。
总之,使用单片机系统控制 YH-LDR 模块的基本思路是读取模块输出并根据光线强度控制相应的设备。具体实现需要根据具体应用场景进行调整。
代码案例:
引脚配置:
- //STM32上的LED1 GPIO为PB5
-
- #define LED1_GPIO_PORT GPIOB
- #define LED1_GPIO_CLK RCC_APB2Periph_GPIOB
- #define LED1_GPIO_PIN GPIO_Pin_5
-
- #define ON 0
- #define OFF 1
-
- /* 宏定义实现LED灯的设置*/
- #define LED1(a) if (a) \
- GPIO_SetBits(LED1_GPIO_PORT,LED1_GPIO_PIN);\
- else \
- GPIO_ResetBits(LED1_GPIO_PORT,LED1_GPIO_PIN)
-
- void LED_GPIO_Config(void)
- {
- GPIO_InitTypeDef GPIO_InitStructure;
- RCC_APB2PeriphClockCmd( LED1_GPIO_CLK, ENABLE);
-
- GPIO_InitStructure.GPIO_Pin = LED1_GPIO_PIN;
- GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
- GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
- GPIO_Init(LED1_GPIO_PORT, &GPIO_InitStructure);
- }
时钟配置:
- #define LDR_GPIO_CLK RCC_APB2Periph_GPIOC
- #define LDR_GPIO_PORT GPIOC
- #define LDR_GPIO_PIN GPIO_Pin_13
-
- void LDR_GPIO_Config(void)
- {
- GPIO_InitTypeDef GPIO_InitStructure;
- RCC_APB2PeriphClockCmd(LDR_GPIO_CLK,ENABLE);
-
- GPIO_InitStructure.GPIO_Pin = LDR_GPIO_PIN;
- GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPD;
- GPIO_Init(LDR_GPIO_PORT, &GPIO_InitStructure);
- }
-
- //检测功能
- uint8_t LDR_Test(GPIO_TypeDef* GPIOx,uint16_t GPIO_Pin)
- {
- if(GPIO_ReadInputDataBit(GPIOx,GPIO_Pin) == 1 ) //读取DO数据,如果高,则LDR设置OFF,否则设置ON
- return LDR_OFF;
- else
- return LDR_ON;
- }
主函数配置:
- int main(void)
- {
- LED_GPIO_Config();//LED配置
- LED2_OFF;//LED灯初始化熄灭
-
- LDR_GPIO_Config();//光敏配置
-
- while(1)
- {
- if (LDR_Test(LDR_GPIO_PORT,LDR_GPIO_PIN) == LDR_ON)
- LED2_ON;
- else
- LED2_OFF;
- }
- }