基于51单片机红外避障车辆高速汽车测速仪表设计

发布于:2025-09-04 ⋅ 阅读:(16) ⋅ 点赞:(0)

1. 系统功能介绍

本设计基于STC89C52单片机,结合红外避障传感器、LCD1602液晶显示模块、蜂鸣器和电源电路,构建了一套高速汽车测速仪表系统。该系统的设计目标是通过红外传感器检测目标物体(如小车或人体)经过的时间,并利用单片机计算目标速度,从而实现测速与提示功能。

在本系统中,两个红外避障传感器被放置在一条直线上,相距 1 米。当目标物体依次通过两个红外传感器时,单片机会自动记录两个传感器触发的时间差,并结合默认的 1 米距离计算速度。测得的速度会实时显示在 LCD1602 液晶屏上。与此同时,为了增强用户体验,当第一个传感器检测到障碍物时,蜂鸣器会短促鸣叫一次,用于提示测试开始。

系统的主要功能包括:

  1. 利用红外避障传感器实时检测目标经过的时刻。
  2. 自动计算目标速度,并在 LCD1602 上显示速度数据。
  3. 蜂鸣器提示功能,增强交互体验。
  4. 电源电路提供稳定电压,确保系统可靠运行。

该系统设计不仅可以用于小车测速实验,还能够扩展到人体反应速度测试、运动训练监测等应用场景。


2. 系统电路设计

系统电路由以下几个部分构成:STC89C52 单片机核心电路、红外避障传感器电路、LCD1602 液晶显示电路、蜂鸣器电路以及电源电路。各模块之间通过单片机的 I/O 口进行连接与数据交互。

2.1 STC89C52 单片机电路

STC89C52 单片机是系统的核心控制单元,负责数据采集、计算与控制输出。其内部包含 8KB Flash、512B RAM、丰富的 I/O 接口资源,以及定时器/计数器模块,非常适合本类测速应用。在本设计中,单片机主要完成以下任务:

  • 接收红外传感器的检测信号。
  • 利用定时器测量目标通过两个传感器的时间差。
  • 根据时间差与已知距离计算目标速度。
  • 将速度数据通过 LCD1602 显示。
  • 控制蜂鸣器发出提示音。

2.2 红外避障传感器电路

本设计中采用 2 个红外避障传感器,分别作为测速起点与终点。每个传感器通过红外发射与接收实现对物体遮挡的检测。当目标物体经过时,传感器输出电平发生变化,单片机捕捉到该信号后即可进行时间记录。

传感器的特性:

  • 响应速度快,适合动态测速场景。
  • 输出 TTL 电平,可直接与单片机 I/O 口连接。
  • 工作电压 5V,与系统电源兼容。

2.3 LCD1602 液晶显示电路

LCD1602 模块用于显示实时测速数据。该液晶屏可以显示两行字符,每行 16 个字符,完全满足速度值与提示信息的显示需求。在本系统中,LCD1602 显示内容包括:

  • 测得的速度值(单位:m/s)。
  • 状态提示,如“等待目标”、“测速中”、“速度=xxx m/s”。

LCD1602 的接口为并行方式,通常占用 8 个数据口和 3 个控制口。在本设计中通过 4 位数据口简化连接,减少单片机 I/O 占用。

2.4 蜂鸣器电路

蜂鸣器作为声音提示装置,在第一个红外传感器检测到目标时短促鸣叫,提示测速开始。蜂鸣器采用有源蜂鸣器,单片机只需输出高电平即可驱动发声。为了保护单片机 I/O 口,电路中通常串联一个小电流限流电阻。

2.5 电源电路

系统电源采用 5V 稳压电源,为单片机、传感器、液晶和蜂鸣器提供电能。电路设计中增加电容滤波与稳压模块,以确保电压稳定,避免因电源波动导致系统异常。


3. 系统程序设计

系统程序采用模块化设计,主要分为:红外传感器采集模块、定时器测速模块、LCD1602 显示模块、蜂鸣器控制模块以及主程序逻辑控制。通过合理的模块划分,程序结构清晰,便于调试与维护。

3.1 红外传感器采集模块

红外传感器与单片机 I/O 口相连,当检测到目标遮挡红外光时,输出电平发生变化。单片机通过外部中断捕获这一变化,从而记录事件发生的时间点。

程序中采用外部中断 0 和外部中断 1 分别对应两个传感器。当第一个传感器触发时,记录起始时间并启动计时;当第二个传感器触发时,记录结束时间并关闭计时。

#include <reg52.h>
sbit IR1 = P3^2;   // 红外传感器1
sbit IR2 = P3^3;   // 红外传感器2
unsigned int startTime = 0, endTime = 0;
bit startFlag = 0;

void EX0_ISR(void) interrupt 0 {
    startTime = TH0*256 + TL0;  // 记录起始时间
    startFlag = 1;
}

void EX1_ISR(void) interrupt 2 {
    endTime = TH0*256 + TL0;    // 记录结束时间
    startFlag = 0;
}

3.2 定时器测速模块

定时器用于计算目标经过两点的时间差。系统设定定时器 0 为计时器模式,精度设置为 1 微秒。在传感器触发时分别读取计数器值,利用时间差和固定距离计算速度:

速度计算公式:

v = S / t

其中:

  • S = 1 m(传感器间固定距离)
  • t = (endTime - startTime) × 计时器分辨率
float getSpeed() {
    unsigned int deltaT = endTime - startTime;
    float time = deltaT * 1e-6;   // 转换为秒
    float speed = 1.0 / time;     // 距离默认为1m
    return speed;
}

3.3 LCD1602 显示模块

LCD1602 用于显示测速结果和提示信息。程序中首先初始化 LCD,再根据不同状态输出不同信息。当测速完成后,液晶实时显示速度值。

void LCD_ShowSpeed(float speed) {
    char buffer[16];
    sprintf(buffer, "Speed: %.2f m/s", speed);
    LCD_Write_String(0, 0, buffer);
}

3.4 蜂鸣器控制模块

蜂鸣器在第一个传感器触发时发声,提醒用户开始测速。发声时间较短,大约 200 毫秒。

sbit BEEP = P2^5;

void Beep_Alert() {
    BEEP = 0;        // 低电平启动蜂鸣器
    DelayMs(200);
    BEEP = 1;        // 关闭蜂鸣器
}

3.5 主程序逻辑

主程序负责系统的整体运行,包括初始化外设、等待传感器触发、计算速度以及显示结果。

void main() {
    float speed;
    LCD_Init();
    Timer0_Init();
    EX0_Init();
    EX1_Init();
    LCD_Write_String(0,0,"Waiting...");

    while(1) {
        if(startFlag == 1) {
            Beep_Alert();
        }
        if(startFlag == 0 && endTime > startTime) {
            speed = getSpeed();
            LCD_ShowSpeed(speed);
        }
    }
}

4. 总结

本设计通过 STC89C52 单片机结合红外避障传感器、LCD1602 液晶和蜂鸣器,成功实现了一套高速汽车测速仪表系统。系统能够实时采集物体通过时间,并计算出速度结果,直观显示在液晶屏上,同时蜂鸣器提示增强了交互体验。

设计过程中,单片机作为核心控制器,充分发挥了其定时器与中断资源的优势,实现了高精度的时间测量;红外传感器保证了检测的灵敏性和可靠性;LCD1602 模块则为结果展示提供了清晰界面。整体设计简单可靠,具有良好的扩展性和应用价值,不仅适用于小车测速实验,也可以在体育训练、反应测试等领域推广使用。


网站公告

今日签到

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