STM32 外设驱动模块四:光敏电阻(LDR) 模块
1. 模块简介
光敏电阻(LDR, Light Dependent Resistor)
是一种会随着光线强弱改变电阻值的元件。在 STM32 项目中,它常被用来感知环境光强,实现自动灯光控制、屏幕亮度调节、节能管理等功能。
常见用途:
- 晚上自动开灯,白天自动关灯
- 根据环境光自动调节屏幕亮度
- 光照触发的安防报警
- 教学和实验中的光线感知演示
2. 使用原理
2.1 工作原理
光敏电阻的阻值会随光照强度变化:
- 光线强 → 阻值变小
- 光线弱 → 阻值变大
在数字型光敏模块中,内部会用光敏电阻与电阻组成分压电路,再通过比较器芯片(如 LM393)判断光强是否高于设定阈值,并直接输出高/低电平给单片机读取。
这样,单片机只需要读取一个“0”或“1”就能知道当前是亮还是暗,不用做复杂的模拟信号计算。
2.2 硬件连接示意
原理图:
STM32 PB13 <----> 光敏模块 DO 输出
VCC (3.3V/5V) <--> 光敏模块 VCC
GND <-----------> 光敏模块 GND
实物图:
说明:
- DO 接口输出数字信号(0 或 1),阈值可通过模块上的电位器调节
- 高电平/低电平代表“亮”或“暗”,取决于模块电路设计
- 建议使用上拉输入模式,防止信号悬空
3. STM32 配置思路
3.1 需要用到的外设
外设名称 | 用途 |
---|---|
GPIOB | 读取数字输入值 |
3.2 配置步骤
- 打开 GPIOB 时钟
- 将 PB13 设置为上拉输入模式
- 使用
GPIO_ReadInputDataBit
读取当前电平
4. 标准库驱动代码
4.1 头文件
#include "stm32f10x.h"
4.2 初始化函数
void LightSensor_Init(void)
{RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);GPIO_InitTypeDef GPIO_InitStructure;GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU; // 上拉输入GPIO_InitStructure.GPIO_Pin = GPIO_Pin_13;GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;GPIO_Init(GPIOB, &GPIO_InitStructure);
}
4.3 读取光敏状态
uint8_t LightSensor_Get(void)
{return GPIO_ReadInputDataBit(GPIOB, GPIO_Pin_13);
}
4.4 使用示例
int main(void)
{LightSensor_Init();while(1){if(LightSensor_Get() == 0) {// 暗,执行开灯动作} else {// 亮,执行关灯动作}}
}
5. 应用扩展
功能 | 实现方式 |
---|---|
自动灯光控制 | 光暗变化触发继电器控制灯泡 |
节能模式 | 在光线强时自动关闭屏幕背光 |
安防触发 | 夜间光照异常触发报警 |
数据记录 | 使用 ADC 接口采集模拟量绘制光照变化曲线 |
6. 调试建议
问题现象 | 解决方法 |
---|---|
读值不稳 | 检查接线并适当增加 RC 滤波 |
判断反向 | 软件取反或调节模块电位器方向 |
始终高/低 | 检查供电与接线是否正确 |