当前位置: 首页 > news >正文

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

1 系统功能介绍

本设计题目为 基于 51 单片机的红外避障车辆高速汽车测速仪表设计。系统以 STC89C52 单片机 为核心控制器,结合 红外避障传感器、LCD1602 液晶、蜂鸣器及电源模块,实现了一个简易的人体反应测试与测速系统。设计思想来源于物理学中的速度测量原理,即通过已知的两点之间的固定距离以及经过该距离所消耗的时间,进而计算出瞬时速度。

整个系统主要功能如下:

  1. 测速功能
    系统采用 两路红外避障传感器。当被测试对象经过第一个红外传感器时,系统记录起始时间;当对象经过第二个红外传感器时,系统记录结束时间。结合两传感器之间的固定间距(默认 1 米),系统实时计算速度并在 LCD1602 液晶 上显示。

  2. 提示功能
    为了确保被测人员或被测车辆明确知道测试已开始,当第一个红外避障传感器检测到遮挡时,蜂鸣器会鸣叫一声作为提示音。

  3. 数据显示功能
    LCD1602 液晶模块可实时显示测速结果,包括测速值以及提示信息,方便使用者查看。

  4. 人机交互功能
    测试过程中无需额外操作,系统自动检测与计算,使用便捷,功能直观。

通过该系统,能够实现一个低成本、稳定可靠的简易测速测试仪表,既可用于人体反应测试,也可应用于小车测速等教学实验中。


2 系统电路设计

系统硬件电路主要由以下几个部分组成:单片机核心电路、红外避障传感器电路、LCD1602 液晶显示电路、蜂鸣器电路、电源电路。以下逐一介绍各部分设计原理与功能。


2.1 STC89C52 单片机核心电路

本设计采用 STC89C52RC 单片机 作为控制核心,它是基于 8051 内核的 8 位单片机,具有以下特点:

  • 片内拥有 8KB Flash 程序存储器,足以容纳测速程序;
  • 提供丰富的 I/O 端口,可直接连接红外传感器、液晶显示与蜂鸣器;
  • 内置定时器/计数器,能够进行高精度时间测量,这是测速的关键环节;
  • 工作电压范围宽,兼容常见 +5V 电源系统。

单片机在系统中主要负责 传感器数据采集、时间计算、速度运算、数据显示与蜂鸣器提示


2.2 红外避障传感器电路

测速部分的关键在于 两个红外避障传感器。其基本工作原理如下:

  • 红外发射管持续发射红外光;
  • 当被测物体经过传感器前方时,遮挡红外光,导致光敏三极管输出电平变化;
  • 单片机检测到该电平变化,从而判定目标经过传感器的时刻。

设计中使用两个红外传感器,布置在直线通道上,间距固定为 1 米

  1. 第一个红外传感器:当检测到物体时,单片机立即记录起始时间,并触发蜂鸣器响一声作为提示。
  2. 第二个红外传感器:当检测到物体时,单片机记录结束时间,并计算两次时间差。

通过时间差和已知的距离,系统可计算速度:

v=st v = \frac{s}{t} v=ts

其中,s=1 ms = 1 \, \text{m}s=1mttt 为起始与结束的时间差,单位为秒。


2.3 LCD1602 液晶显示电路

LCD1602 液晶是本系统的人机交互接口,主要功能是 实时显示测速结果。其特点:

  • 一次可显示两行,每行 16 个字符;
  • 通过 4 位或 8 位并行方式与单片机通信;
  • 显示速度直观,刷新快,适合实时数据显示。

在本设计中,LCD 用于显示以下内容:

  • 欢迎界面或提示信息;
  • 实际测速结果,单位为 m/s

2.4 蜂鸣器电路

蜂鸣器用于在检测到被测物体经过 第一个传感器 时鸣叫一声,提示用户测试已开始。

  • 采用有源蜂鸣器,由单片机直接输出高低电平驱动;
  • 工作电压 5V,驱动简单;
  • 与 LCD1602、传感器等模块形成良好的交互效果。

2.5 电源电路

系统整体由 +5V 电源供电,电源部分应保证稳定性:

  • 使用常见的 7805 稳压芯片或 USB 5V 电源输入;
  • 适当增加电解电容与陶瓷电容滤波,确保传感器与单片机工作稳定。

3 程序设计

程序是整个测速系统的核心。系统采用 C 语言编写,并基于 Keil 编译环境,通过 STC-ISP 下载到单片机。程序设计包括:主程序、传感器检测程序、定时器计时程序、速度计算程序、LCD 显示程序、蜂鸣器程序 等。


3.1 主程序框架

#include <reg52.h>
#include "lcd1602.h"
#include "delay.h"sbit IR1 = P1^0;   // 第一个红外传感器
sbit IR2 = P1^1;   // 第二个红外传感器
sbit BEEP = P2^5;  // 蜂鸣器unsigned int start_time = 0;
unsigned int end_time = 0;
unsigned int speed = 0;
bit flag = 0;void main()
{LCD_Init();LCD_ShowString(0,0,"Speed Measure");LCD_ShowString(1,0,"Wait...");Timer0_Init();while(1){if(IR1 == 0 && flag == 0) // 第一个红外触发{start_time = TH0*256 + TL0;LCD_ShowString(1,0,"Start!");BEEP = 0; delay_ms(200); BEEP = 1;flag = 1;}if(IR2 == 0 && flag == 1) // 第二个红外触发{end_time = TH0*256 + TL0;speed = 1000 / ((end_time - start_time) / 12); // 距离=1m,12MHz时钟换算LCD_ShowNum(1,0,speed,4);LCD_ShowString(1,5,"cm/s");flag = 0;}}
}

3.2 定时器初始化程序

void Timer0_Init(void)
{TMOD |= 0x01;  // 定时器0,方式1TH0 = 0;TL0 = 0;TR0 = 1;       // 启动定时器
}

3.3 延时程序

void delay_ms(unsigned int ms)
{unsigned int i,j;for(i=ms;i>0;i--)for(j=110;j>0;j--);
}

3.4 LCD 显示程序(部分示例)

void LCD_ShowString(unsigned char x, unsigned char y, char *str)
{LCD_SetCursor(x,y);while(*str != '\0'){LCD_WriteData(*str);str++;}
}

3.5 蜂鸣器控制

蜂鸣器的控制非常简单,输出低电平即响,高电平关闭:

void Beep_Once(void)
{BEEP = 0;delay_ms(200);BEEP = 1;
}

4 总结

本设计基于 STC89C52 单片机,利用 红外避障传感器、LCD1602 液晶与蜂鸣器 构建了一个简易的 人体反应测速系统。系统以 定时器计时法为核心算法,结合两个红外传感器的检测,实现了 已知距离下的速度计算

设计的主要特点包括:

  1. 硬件电路简单,仅需单片机、红外传感器、液晶与蜂鸣器;
  2. 测速方法直观,通过两点定距法实现速度测量,物理意义明确;
  3. 数据显示直观,LCD1602 清晰显示测速结果;
  4. 提示功能完善,蜂鸣器在测试开始时给出提示音;
  5. 应用场景广泛,可用于小车测速、人体反应测试、教学实验。

本系统具有 低成本、易实现、稳定性好 的优点,为单片机教学与实验性研究提供了一个良好的实例。

http://www.dtcms.com/a/350226.html

相关文章:

  • AEB 强制来临,东软睿驰Next-Cube-Lite有望成为汽车安全普惠“破局器”
  • kubeadm join 命令无法加入node节点,ip_forward 内核参数没有被正确设置
  • IIS 安装了.netcore运行时 还是报错 HTTP 错误 500.19
  • k8s笔记03-常用操作命令
  • Qt开发:智能指针的介绍和使用
  • 君正T31学习(二)- USB烧录
  • 支持指令流水的计算机系统设计与实现
  • mysql绿色版本教程
  • 【python断言插件responses_validator使用】
  • 校园科研自动气象站:藏在校园里的 “科研小站”
  • Nginx零拷贝技术深度解析
  • 【 Python程序员的Ubuntu入门指南】
  • Python二进制、八进制与十六进制高级操作指南:从底层处理到工程实践
  • freqtrade进行回测
  • 关于熵减 - 电力磁力和万有引力
  • list容器的使用
  • 15、IWDG独立看门狗
  • MTK Android 14 通过属性控制系统设置显示双栏或者单栏
  • VUE 的弹出框实现图片预览和视频预览
  • (多线程)线程安全和线程不安全 产生的原因 synchronized关键字 synchronized可重入特性死锁 如何避免死锁 内存可见性
  • React Native核心技术深度解析_Trip Footprints
  • 电商商品管理效率低?MuseDAM 系统如何破解库存混乱难题
  • AR技术:航空维修工具校准的精准革命
  • 【python】if __name__ == ‘__main__‘的作用
  • 正则表达式 —— \s*
  • C语言运行时候出现栈溢出、段错误(Segmentation fault)、异常码解决?
  • 车灯最新测试标准测试设备太阳光模拟器
  • Kafka 在 6 大典型用例的落地实践架构、参数与避坑清单
  • 【Flink】运行模式
  • Rust Async 异步编程(五):async/.await