目录
1. YH-LDR模块说明
1.1 简介
1.2 YH-LDR 模块的引脚说明
1.3 LDR 传感器工作原理与输出特性
2. 使用单片机系统控制 YH-LDR 模块
2.1 通用控制说明
1. YH-LDR模块说明
1.1 简介
YH-LDR 是野火设计的光强传感器,使用一个光敏电阻作为采集源,使用 LM393 作为电压比较器,可以通过调节模块的滑变来采集不同强度的光强。不需要使用 ADC,模块输出的就是一个数字量的信号,操作简单。其外观见图 1-1。
图 1-1 YH-LDR 光敏传感器模块
1.2 YH-LDR 模块的引脚说明
表格 1-1 YH-LDR 模块引脚说明
编号 | 名称 | 说明 |
1 | VCC | 电源正(5V) |
2 | GND | 地线 |
3 | OD | 信号输出 |
1.3 LDR 传感器工作原理与输出特性
模块通过光敏电阻将光强转换成电压信号,输入到 LM 393 的一个电压比较通道,然后 LM393 在输出比较结果,可以通过滑变调节比较的电压。有强时 DO 输出低电平,光弱时 DO 输出高电平。电源接 3V3 时高电平时 1.4V,此时 STM32 把此电平识别为低电平,电源接 5V 时,DO 输出的是 2.6V,此时 STM32 可以识别出是高电平,所以在测试时电源是需要接 5V 的。
LDR传感器,即光敏电阻传感器,是一种检测光线强度的传感器。它具有以下工作原理和输出特性:
工作原理:LDR传感器基于半导体材料的光敏效应,即在光照下,半导体的电阻会随之发生变化。当光强度增强时,LDR的电阻值降低;当光强度减弱时,LDR的电阻值增加。
输出特性:LDR传感器的输出特性取决于所使用的半导体材料和工作条件。通常情况下,LDR传感器的输出电压随着光强度的变化而发生变化,输出特性呈现非线性关系。此外,LDR传感器的输出信号也会受到温度、湿度等环境因素的影响,需要进行校准。
总的来说,LDR传感器是一种简单、实用的光敏传感器,被广泛应用于光照度检测、亮度控制等领域。
2. 使用单片机系统控制 YH-LDR 模块
2.1 通用控制说明
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;
}
}
USB 转串口芯片 CH340_时光の尘的博客-CSDN博客
DHT11 数字湿温度传感器的原理和应用范例-CSDN博客
ET2046·低电压 I/O 触摸屏控制电路(SSOP16、QFN16)-CSDN博客
时光の尘_千题千解·Java面试宝典,Linux学习,嵌入式学习-CSDN博客