STM32 外设驱动模块四:光敏电阻(LDR) 模块

发布于:2025-08-10 ⋅ 阅读:(20) ⋅ 点赞:(0)

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 配置步骤

  1. 打开 GPIOB 时钟
  2. 将 PB13 设置为上拉输入模式
  3. 使用 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 滤波
判断反向 软件取反或调节模块电位器方向
始终高/低 检查供电与接线是否正确


网站公告

今日签到

点亮在社区的每一天
去签到