基于单片机的超声波人体感应PWM自动调光灯设计与实现

基于单片机的超声波人体感应PWM自动调光灯设计与实现

点击链接下载设计资料:https://download.csdn.net/download/m0_51061483/92081426

1 系统功能介绍

本系统以单片机为核心控制单元,利用超声波测距传感器和光敏电阻传感器实现对人体距离与环境光照的实时监测,从而智能调节LED灯的亮度。系统采用PWM(脉宽调制)技术,通过改变输出信号的占空比控制LED的亮暗,实现柔和、节能且响应迅速的自动照明控制。

系统的设计目标是通过传感器检测外界环境条件与人体距离,在满足照明需求的同时有效降低能耗,尤其适用于走廊、楼道、卫生间等需要自动照明控制的场所。系统的主要功能如下:

  1. 人体感应与距离测量:通过超声波传感器实时测量人体与灯具的距离,距离越近,LED亮度越高;当人体离开或距离过远时,LED亮度逐渐降低直至熄灭。
  2. 光照强度检测:光敏电阻模块检测环境光强,根据白天和夜晚光照差异自动调整LED亮度,确保节能与舒适兼顾。
  3. PWM调光控制:单片机内部定时器产生PWM信号,根据距离和光照信号动态调整占空比,实现LED亮度的连续可调。
  4. 自动节能模式:在无人状态下自动关闭LED灯,减少能耗,提高系统的能源利用率。
  5. 平滑亮度变化:通过算法对PWM变化进行滤波和缓变控制,避免灯光突变导致的不适感。
  6. 自适应算法设计:根据不同环境亮度及距离自动调节亮度曲线,实现智能光照控制效果。

2 系统电路设计

系统的硬件电路主要由以下几个部分组成:单片机控制电路、超声波测距模块、光敏电阻模块、LED驱动电路、PWM输出电路与电源模块。

2.1 单片机控制电路设计

系统选用 STC89C52 单片机 作为核心控制芯片。STC89C52具有低功耗、高性能的特点,内部集成定时器、串口通信接口和丰富的I/O端口,适合处理多传感信号与PWM控制输出任务。

单片机的主要功能包括:

  • 采集超声波传感器的测距数据;
  • 读取光敏电阻模块的电压信号;
  • 执行PWM调光控制算法,输出PWM信号控制LED亮度;
  • 实现数据处理、逻辑判断与模式切换。

晶振电路采用12MHz晶振,保证系统运行的稳定性。复位电路采用上电自动复位与手动复位相结合的方式,确保系统在异常情况下能够重新启动。

2.2 超声波测距模块设计

系统使用 HC-SR04 超声波传感器 进行人体距离检测。该模块由发射端与接收端组成,通过测量声波从发射到返回的时间来计算与障碍物(人体)的距离。

其工作原理为:单片机输出一个10µs的高电平触发信号,HC-SR04 发出40kHz超声波脉冲;若前方有物体,声波会被反射回来,模块输出一段高电平信号,信号持续时间与距离成正比。距离计算公式如下:

距离(cm) = (高电平时间 × 声速) / 2

单片机利用定时器捕获回波脉冲时间,并据此计算出人体距离,实现精准检测。

2.3 光敏电阻模块设计

光敏电阻模块用于检测环境光照强度,其阻值随光照强度变化。当环境亮度增强时,电阻值减小,输出电压降低;当光线变暗时,输出电压升高。

通过将光敏电阻与固定电阻组成分压电路,单片机的ADC口读取分压信号,从而判断当前光照强度。该模块帮助系统在白天光照充足时自动降低LED亮度,夜间自动提升亮度,实现节能。

2.4 LED驱动与PWM输出模块设计

LED灯采用高亮度白光LED,通过NPN型三极管(如S8050)或MOSFET(如IRF540N)进行驱动控制。单片机输出PWM信号至驱动管的基极或栅极,根据占空比调整LED电流,从而实现亮度调节。

PWM波的占空比与亮度成正比,占空比越高,LED越亮。为了避免闪烁感,PWM频率设置在1kHz以上。

2.5 电源模块设计

系统采用DC 5V稳压供电。电源部分由电源适配器或USB接口提供输入,通过AMS1117-5.0稳压芯片输出稳定的5V电压,为单片机与传感器供电。电源输入端并联滤波电容,防止电压波动对系统造成影响。


3 系统程序设计

软件部分采用C语言编写,主要由主控制程序、超声波测距程序、光照检测程序、PWM控制程序和逻辑判断程序组成。系统运行流程如下:

  1. 初始化单片机、传感器与PWM模块;
  2. 循环读取超声波测距值与光照强度;
  3. 根据距离和光照信息计算目标亮度;
  4. 调整PWM占空比输出,实现LED亮度变化;
  5. 若检测到无人状态超过设定时间,则自动关闭LED。

3.1 主程序设计

主程序主要负责系统初始化、循环检测与控制逻辑。

c 复制代码
#include <reg52.h>
#include "hc_sr04.h"
#include "adc.h"
#include "pwm.h"

unsigned int distance;
unsigned int lightValue;
unsigned char pwmDuty;

void main() {
    HC_SR04_Init();
    ADC_Init();
    PWM_Init();
    while(1) {
        distance = Get_Distance();   // 获取人体距离
        lightValue = ADC_Read(0);    // 获取光照强度
        pwmDuty = Calculate_Brightness(distance, lightValue);
        PWM_SetDuty(pwmDuty);        // 输出PWM控制LED
    }
}

该主程序以循环形式执行测距与光照检测,根据实时数据动态计算LED亮度。


3.2 超声波测距程序设计

超声波测距模块通过定时器计算高电平持续时间,再根据声速计算出距离。

c 复制代码
#include <reg52.h>

sbit Trig = P2^0;
sbit Echo = P2^1;

unsigned int Get_Distance() {
    unsigned int time = 0;
    Trig = 1;
    Delay10us();
    Trig = 0;
    while(!Echo);
    while(Echo) time++;
    return (time * 0.017);  // 转换为厘米
}

程序通过时间测量实现高精度距离计算,保证系统对人体靠近的响应灵敏。


3.3 光照强度检测程序设计

通过ADC采集光敏电阻电压值,实现环境光照强度的测量。

c 复制代码
#include <reg52.h>

unsigned int ADC_Read(unsigned char channel) {
    // 模拟读取ADC值
    unsigned int value = 0;
    // 模拟光敏电阻输入读取逻辑
    value = (P1 & 0xFF);
    return value;
}

根据返回值,程序判断当前光照是否强烈,辅助调节LED亮度。


3.4 PWM控制程序设计

PWM模块利用定时器中断实现周期性信号输出,占空比根据人体距离和光照自动计算。

c 复制代码
#include <reg52.h>

sbit LED = P2^2;
unsigned char pwmDuty = 50;
unsigned char count = 0;

void Timer0_Init() {
    TMOD = 0x01;
    TH0 = 0xFC;
    TL0 = 0x18;
    ET0 = 1;
    EA = 1;
    TR0 = 1;
}

void Timer0_ISR() interrupt 1 {
    count++;
    if(count < pwmDuty) LED = 1;
    else LED = 0;
    if(count >= 100) count = 0;
}

void PWM_SetDuty(unsigned char duty) {
    pwmDuty = duty;
}

该模块实现PWM输出信号,占空比在0~100之间变化,从而控制LED亮度。


3.5 亮度计算逻辑程序设计

根据超声波测距与光照强度联合计算目标PWM占空比,使LED亮度平滑变化。

c 复制代码
unsigned char Calculate_Brightness(unsigned int distance, unsigned int light) {
    unsigned char duty;
    if(distance < 30) duty = 90;        // 人体靠近,亮度高
    else if(distance < 100) duty = 60;  // 中等距离,亮度中等
    else duty = 0;                      // 无人或过远,关闭灯光

    if(light > 700) duty /= 2;          // 光线强,降低亮度
    else if(light < 300) duty += 20;    // 光线弱,增加亮度

    if(duty > 100) duty = 100;
    return duty;
}

该算法将环境光照与人体距离融合,输出最优亮度值,实现智能化调光。


4 系统总结

基于单片机的超声波人体感应PWM自动调光灯系统通过传感器融合技术与PWM控制算法,实现了对人体活动与环境光照的双重感知与智能响应。系统在硬件设计上结构简单、功耗低、可扩展性强;在软件设计上采用模块化编程,逻辑清晰、实时性高。

本设计在智能家居、节能照明、公共场所自动照明等领域具有广泛应用价值。通过该系统,照明设备能够在确保舒适光照的同时有效节约能源,实现"以人为本"的智能照明控制目标。

相关推荐
玄奕子5 小时前
F280049C学习笔记之EPWM
单片机·嵌入式硬件·dsp开发·ti c2000·f280049c
三品吉他手会点灯8 小时前
stm32f103学习笔记-16-RCC(第2节)-讲解系统时钟配置函数SetSysClockTo72()
笔记·stm32·单片机·嵌入式硬件·学习
范纹杉想快点毕业9 小时前
100道关于STM32的问题解答共十万字回答,适用入门嵌入式软件初级工程师,筑牢基础,技术积累,校招面试。
驱动开发·单片机·嵌入式硬件·fpga开发·硬件工程
国科安芯10 小时前
多输出电压条件下同步整流效率测试与优化
网络·单片机·嵌入式硬件·安全
李宥小哥12 小时前
创建型设计模式1
stm32·嵌入式硬件·设计模式
std8602112 小时前
嵌入式软件与单片机的核心技术与应用
单片机·嵌入式硬件
Shylock_Mister12 小时前
弱函数:嵌入式回调的最佳实践
c语言·单片机·嵌入式硬件·物联网
bbxyliyang12 小时前
基于430单片机多用途定时提醒器设计
单片机·嵌入式硬件·51单片机
d111111111d13 小时前
STM32外设学习-ADC模数转换器(代码部分)四个模块,光敏,热敏,电位,反射式红外。
笔记·stm32·单片机·嵌入式硬件·学习