基于51单片机汽车自动照明灯超声波光敏远近光灯设计
1 系统功能介绍
本设计基于 STC89C52 单片机,利用光敏电阻模块和超声波模块实现了 汽车自动照明灯智能控制系统,并通过 LED 灯模拟车灯 来展示远近光灯的自动切换效果。
整个系统由 光照检测电路(光敏电阻)+ 超声波 HC-SR04 测距模块 + 高亮白色 LED 远近光灯 + 模式指示灯电路 + 拨动开关选择电路 + 按键手动控制电路 + 电源电路 组成。
主要功能如下:
-
光照检测功能:通过光敏电阻检测环境光强度,在白天光照强时关闭车灯;在夜间光照弱时自动开启远光灯,光照阈值可通过电位器调节。
-
模式切换功能:系统有 自动模式 和 手动模式,模式通过拨动开关选择,并有指示灯显示当前模式。
-
自动模式逻辑:
- 在夜间光照不足时车灯开启;
- 当超声波检测到前方距离小于 30cm 时,远光灯切换为近光灯;
- 当距离超过 30cm 时,近光灯自动切换回远光灯。
-
手动模式逻辑:
- 用户通过按键自由切换远光灯和近光灯;
- 模式切换灵活,便于应对复杂路况。
该系统可以有效提升车辆行驶安全性,模拟真实车辆远近光灯自动切换功能,同时结合模式切换满足用户多样化需求。
2 系统电路设计
2.1 单片机最小系统
STC89C52 单片机作为核心控制模块,负责传感器数据采集、逻辑运算、模式切换与 LED 控制。
-
主要作用:
- 采集光敏电阻模块的电压信号,判断环境光强;
- 采集 HC-SR04 超声波模块的测距数据,判断前方障碍物距离;
- 根据模式选择和输入信号,控制远近光灯 LED 的亮灭;
- 控制模式指示灯的点亮状态。
-
关键部分:晶振电路、复位电路、电源稳压电路,保证单片机稳定工作。
2.2 光照检测电路(光敏电阻)
-
基本原理:光敏电阻在光照强时电阻减小,光照弱时电阻增大。
-
设计方案:光敏电阻与电阻分压电路相连,输出电压随光强变化,通过单片机 ADC 口或模块比较器输入进行光照强度判断。
-
功能:
- 白天光照强 → 输出电压高 → 灯关闭;
- 夜晚光照弱 → 输出电压低 → 自动点亮远光灯。
-
阈值调节:通过电位器调节分压点,可以设定光照强弱判断的临界值。
2.3 超声波测距电路(HC-SR04)
-
模块原理:通过发射超声波信号并接收回波,利用时间差计算与前方障碍物的距离。
-
作用:
- 距离 < 30cm → 远光灯切换为近光灯,避免强光干扰前方车辆或物体;
- 距离 ≥ 30cm → 切换回远光灯,保证照明范围。
-
接口:
- Trig → 触发引脚(输出短脉冲);
- Echo → 接收回波引脚(输入,计算时间差)。
2.4 远近光灯 LED 电路
-
设计思路:
- 使用 高亮白色 LED 灯 模拟汽车前照灯;
- 远光灯:LED 全功率点亮;
- 近光灯:部分 LED 点亮或采用 PWM 降低亮度,模拟近光效果。
-
控制方式:通过单片机 I/O 口控制三极管或 MOS 管驱动 LED。
2.5 模式选择与指示灯电路
-
拨动开关:
- ON → 自动模式;
- OFF → 手动模式。
-
指示灯:
- 黄灯亮 → 自动模式;
- 绿灯亮 → 手动模式。
2.6 按键输入电路
-
功能:手动模式下用户通过按键选择远近光灯。
-
逻辑:
- 按键 1:切换到远光;
- 按键 2:切换到近光。
2.7 电源电路
- 电源设计:采用 +5V 稳压电路为单片机、超声波模块、LED 提供电源;
- 要求:电源稳定,电流充足,避免灯光工作时电源波动导致系统异常。
3 程序设计
3.1 主程序框架
#include <reg52.h>
#include "lcd.h"
#include "ultrasonic.h"
#include "light.h"
#include "key.h"
#include "relay.h"sbit MODE_SW = P3^0; //模式开关
sbit LED_AUTO = P3^1; //自动模式指示灯
sbit LED_MANU = P3^2; //手动模式指示灯float distance = 0;
unsigned char light_level = 0; //光照强度
bit mode_auto = 1; //默认自动模式void main()
{while(1){mode_auto = MODE_SW; //读取模式if(mode_auto){LED_AUTO = 0;LED_MANU = 1;Auto_Mode();}else{LED_AUTO = 1;LED_MANU = 0;Manual_Mode();}}
}
3.2 自动模式程序
void Auto_Mode(void)
{light_level = Light_Read(); //读取光照强度if(light_level < 50) //光照不足,夜间{distance = Ultrasonic_Read(); //读取超声波距离if(distance < 30){Near_Light_On();Far_Light_Off();}else{Far_Light_On();Near_Light_Off();}}else //白天,灯关闭{Far_Light_Off();Near_Light_Off();}
}
3.3 手动模式程序
void Manual_Mode(void)
{if(Key1_Pressed()){Far_Light_On();Near_Light_Off();}if(Key2_Pressed()){Near_Light_On();Far_Light_Off();}
}
3.4 光照检测程序
unsigned char Light_Read(void)
{unsigned int adc_value;adc_value = ADC_Read(0); //读取ADC0通道return (adc_value >> 2); //返回0~255范围光照值
}
3.5 超声波测距程序
float Ultrasonic_Read(void)
{unsigned int time = 0;float distance = 0;TRIG = 1;Delay10us();TRIG = 0;while(!ECHO); //等待高电平while(ECHO) time++; //计算高电平时间distance = (time * 0.017); //转换为cmreturn distance;
}
3.6 灯光控制程序
void Far_Light_On(void)
{P2 = 0x0F; //点亮远光LED
}void Far_Light_Off(void)
{P2 &= 0xF0;
}void Near_Light_On(void)
{P2 = 0x03; //点亮近光LED
}void Near_Light_Off(void)
{P2 &= 0xFC;
}
4 总结
本设计基于 STC89C52 单片机,结合 光敏电阻模块 与 超声波测距模块,实现了 汽车自动照明远近光灯系统。系统支持 自动/手动模式切换,并通过 LED 灯模拟远近光灯,功能包括:
- 白天灯关闭,夜晚自动开启远光;
- 夜晚遇到障碍物自动切换近光;
- 手动模式下可通过按键自由切换;
- 指示灯直观显示当前模式状态。
该系统既满足了驾驶过程中的自动化需求,也保留了人工干预的灵活性,具有良好的实用性与扩展性,可作为汽车智能照明系统的实验原型与研究基础。