基于单片机的红绿灯智能控制系统设计

这篇具有很好参考价值的文章主要介绍了基于单片机的红绿灯智能控制系统设计。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

收藏和点赞,您的关注是我创作的动力

概要

  随着社会经济的快速发展以及人们生活水平的提高 ,机动车数量也在急剧增加 ,交通问题逐渐成为人们关注的重点对象,因城市发展所带来的交通拥堵等问题,利用智能交通来解决传统交通日渐出现的问题成为大势所趋。本设计基于传统交通,详细介绍了交通灯控制系统软件以及硬件的设计过程,并且使用 Proleus 软件对整体系统进行仿真,采用了单片机作为基础的开发模板,结合plc等其他技术进行交通的智能化的交通设计,可自动控制红绿灯的交替闪烁,观察车流情况自动改变倒计时的情况,已达到改善交通拥堵的情况。本设计是基于理想情况下设计的交通控制系统,基于实际道路情况的复杂程度,不同的车辆高度长度的和随机出现的行人以及出现交通事故等突发情况,本设计结合实际的交通系统还是存在一定难度,但该发展方向存在大量实际利益,是值得我们去探讨如何发展的,在硬件开发成熟后可以优先享用该成果。
  关键词:单片机;信号灯;智能交通

一、设计思路

  根据传统的交通信号控制系统,智能交通系统需要改善机动车的城市灯的红色,黄色和绿色,包括左右转向在内每个行驶方向的相互显示控制,通过车流量的测量装置,它也可以与十字路口和区域交通状况结合在一起。利用提供的信息,灵活更改每个信号指示器的时间,以实现道路网络上交通流量的最佳配置。这要求系统能够根据每个行车道的交通流反馈信息和相应的算法来设置信号时间,连接控制系统和控制中心以实现跨区域交通控制。假设东西方向的交通量较大,为了避免行人和车辆争抢交通资源,控制行人和车辆之间的交通流量,一般的,当车辆直行时,相应人行道的绿灯亮起,行人可以通过。虽然这种做法对交通利用率较高,但是会牺牲左右转弯车辆的通行效率。在转向信号的路口汽车左转时,人行道上的红灯亮,禁止行人通行,使汽车和行人不会争道,可以有效地预防交通事故,提高十字路口的通行能力。随着科技的演进,在一些发达国家已开始研发所谓的“智慧信号”。该信号可以依据各车辆的位置、速度及方向来试着与各车辆沟通,并提醒驾驶员灯号即将变换等资讯,然而仍有少部分的车辆并无与此类信号沟通的装备,使得部分驾驶员可能无法得知智慧信号所传达的资讯。
  智能交通信号灯负责人员和各种车辆的安全,红色,黄色和信号灯的全自动指挥的完成是城市道路交通智能的重点研究课题。在城市街道十字路口,为了确保交通管理和机动车安全,通常在每条道路上都有一组红色,黄色和绿色的交通信号灯,该红色信号灯一直亮着,表示禁止道路通过标志;灯亮,未通过该路面上的停车线的车辆将停止行驶,而已通过停车线的车辆则可以继续行驶;绿色信号灯亮起,表明该路面允许行驶。和传统的交通一样,交通信号控制系统,需要完成自动循环变化信号灯,在保障正常行车和行人的安全前提下,负责为各种车辆和非机动车提供更加智能人性化的出行体验,并完善了十字路口的城市道路交通自动化程度。在传统交通信号自动控制系统的基础上,智能交通信号自动控制系统基于单片机设计的智能控制系统,能完成以下功能:交通信号控制在十字路口,指挥通行方向和等待方向的两个路口的汽车。,两个方向的信号灯可以根据交通量自动调整通行时间。交通量大,通行时间长,交通量小,通行时间短;每次信号灯变绿时,在汽车驾驶离开路口前,统计该方向的交通流量。除了东西方向和南北方向上的红色,黄色和绿色信号灯外,每次打开带有倒计时功能的led灯、数字显像管等用于显示当前信号灯持续时间。

2.1设计原理

  本人选用了51单片机作为实现智能控制的单片机。每个方向的左转弯,直行,右转弯等信号均由双色LED灯泡实现。交通灯的倒计时显示是通过数字管实现的,该管通常由2位数字和8段组成。对于应用设计的微控制器,I / O端口的数量非常有限。为了节省单片机的I / O端口,使用多个74LS245芯片来控制不同驱动方向上的LED灯泡,并且每个方向上的灯数由BC7281B芯片控制。人机交互系统通过串口与外部系统相连,MAX232芯片更适合于操作要求。为了交通远程控制,需要可以远程收发的装置,此处以 XL02- 232AP1 无线串口收发模,作为模拟实现功能,在总设计系统中,以单片机作为最小系统,将芯片作为主控制器,用以控制其他模块协调工作;交通灯模块作为不同车道的目前通行情况的表示(红灯表示该车道停止前进,绿灯表示该车道可以优先通行,黄灯表示该车道的通行情况的过渡时间 );红绿灯倒计时显示模块和外部链接的键盘控制模块,需要人工进行参数修改,以达到不同情况的模拟,由单片机外接接口控制。
  在正常单片机运作周期中,红绿灯工作时,先主道绿灯亮起,同时辅道红灯亮,实现主道先行,该红绿灯常亮时间由人工设定(设定范围为00—99s),交通系统的开启受人工控制,按下键盘上启动键后,系统开始工作,按照预定的设计方案开始自动交替亮灯,同时开启红绿灯时间倒计时显示。当倒计时显示时问减为0时,原本亮起绿灯的道路转为黄灯闪烁,并维持2秒,亮起红灯的道路继续维持红灯2秒。倒计时显示又减为0时,黄灯道路转为红灯亮起,另一方向转为绿灯亮起,两者的维持时间仍由预先设定,当红绿灯的倒计时再次又减为0时,重复上述流程操作,时钟周期开始循环往复,以达到不同道路不断交替通行。
在该设计中,运用模糊检测原理用于检测车辆通过道路。模糊控制原理只是另一种模糊逻辑,而模糊逻辑不是两者之间推理的逻辑,这在传统意义上是不正确的。多值逻辑,但在承认事物属于真值之间的过渡时,他们还认为事物在形式具有其他形式。既无法精确获得信息,而通过大体特点推导出物体的大概,因此,如何处理不正确的模糊输入信息,是对有效降低模糊控制错误率,并仅仅需要较少的存储空间,就可以掌握信息的主要特征,并保证信息处理的实时性、多功能性和完整度。这样,隶属度用于定量描述宇宙中元素与宇宙概念之间的一致性程度。展开以便可以使用隶属函数表示模糊集。

2.2方案选择

  智能交通的系统主要以靠智能电路实现,利用不同元件的控制方案是多种多样的,有很多可以使用的器件,常见使用PLC、CPLD、单片机或纯电路设计等设计方案,不同的元件有各种的长处,需要结合实际需求进行选择。从控制的灵活性、实现的方便程度以及性价比等方面综合考虑,单片机有其他方案所没有的优势,能规避一部分其他元件使用配合上的弊端,加上我们的专业课程上有较为系统的学习过单片机,整体系统才用单片机作为控制的核心元件,模拟仿真不同情况下智能交通灯控制的情形,并对模拟的结果进行改良系统,达到预设的效果,从而实现经济、智能、简单的设计要求,也比较符合对硬件大小的预期。
软件采用汇编语言的系统进行仿真,采用Keil C51的集成汇编软件,将上述的软件编制导入汇编软件中,对软件程序进行编写,查找设计上的功能是否能正常实现,为了方便程序调试,本人采用Proteus仿真电路,模拟仿真所编写的程序,最初的程序在不同的红绿灯交替亮起是存在不少的问题,不同的控制叠加在一起时引起逻辑判断出现了问题,而且随着情况越发复杂,单片机的接口也有限,大量的判断需要优化整合到同一个程序判断中,之后便可以实现封装,调试或者生产pcb版等后续操作。

二、元件展示

3.1单片机展示

89C51是一种低压,高性能CMOS 8位微处理器,具有4K字节的闪存可编程可擦写只读存储器(FPEROM闪存可编程可擦写只读存储器),通常称为微控制器。 MCU的可擦除只读存储器可以重复擦除100次。该器件采用ATMEL高密度非易失性存储器制造技术制造,并且与行业标准的MCS-51指令集和输出引脚兼容。由于在单个芯片中结合了多功能8位CPU和闪存,ATMEL的89C51是高效的微控制器,而89C2051是其简化版本。
基于单片机的车辆闯红灯监控系统设计,单片机,单片机,嵌入式硬件

图3.1 单片机的内部逻辑结构示意图
基于单片机的车辆闯红灯监控系统设计,单片机,单片机,嵌入式硬件

表3.1 单片机的功能表
单片机的最小系统描述:时钟信号的产生:MCS-51芯片内部有一个高增益反相放大器,其输入端子是芯片引脚XTAL1,其输出端子是引脚XTAL 2 。在芯片外部,晶体振荡器和微调电容器连接在XTAL1和XTAL2之间,并形成了稳定的自激振荡器。这是微控制器的时钟振荡电路。触发器将频率除以2后,时钟电路产生的振荡脉冲变成微控制器的时钟脉冲信号。通常,电容C2和C3约为30pF,晶体的振荡频率为1.2-1-2MHz。如果晶体振荡频率高,则系统的时钟频率也高,并且单片机的操作速度也快。单片机的复位使CPU和其他功能组件处于特定的初始状态,并从该状态开始工作。微控制器的复位条件:必须在两个机器周期(即两个4个振荡周期)内向引脚9添加一个高电平。
AT89S51是美国ATMEL公司生产的最为广泛运用的CMOS8位单片微型计算机,具有低功耗和高性能的特点,可运用性很高,单个片中安置了4k bytes的可编程的Flash只读程序存储器,材料的选取十分严格,结合公司的加工工艺,不易对储存造成损害,兼容标准8051指令系统及引脚。AT89S51集合了Flash程序存储器于内部,使其可使用在线编程(ISP),又兼容传统方法进行编程,还存有通用8位微处理器于单片芯片中,ATMEL公司有着悠久的硬件加工历史,加工出来的成品功能强大,工艺精湛,价格低廉,AT89S51单片机是性价比十分高的一款热销型号,可灵活应用于各种控制领域。其与市面上其他产品兼容8K字节在系统可编程Flash存储器,拥有1000次的擦写周期和全静态操作的机能,覆盖0Hz~33Hz,设有三级加密程序存储器,外置32个可编程I/O口,可转换计时定时器3个,8个独立运作的终端源,配合全双工UART串行通道低功耗空闲和掉电模式、掉电后中断可唤醒、看门狗定时器、双数据指针、掉电标识符。
基于单片机的车辆闯红灯监控系统设计,单片机,单片机,嵌入式硬件

图3.2 单片机引脚示意图

三、 内容截图

基于单片机的车辆闯红灯监控系统设计,单片机,单片机,嵌入式硬件
基于单片机的车辆闯红灯监控系统设计,单片机,单片机,嵌入式硬件

基于单片机的车辆闯红灯监控系统设计,单片机,单片机,嵌入式硬件
基于单片机的车辆闯红灯监控系统设计,单片机,单片机,嵌入式硬件

四、 主要代码

程序源代码

#include<reg51.h>
sbit g1=P1^0; 	//位定义
sbit r1=P1^1; 
sbit y1=P1^2; 
sbit g2=P1^3; 
sbit r2=P1^4; 
sbit y2=P1^5; 
unsigned char f=0;
unsigned char nanbei_time=15;	 //定义南北的时间长度
unsigned char dongxi_time=11;    //定义东西的时间长度
unsigned char m; 
unsigned char code  t[]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x27,0x7F,0x6F}; 
void init_timer0(void) 	   //中断初始化函数
	{
  	TMOD=0x01;  
  	TH0=(65536-50000)/256;  
 	 TL0=(65536-50000)%256;  
 	 ET0=1;  
 	 EA=1;  
  	TR0=1; 
 	 } 
 void display(unsigned char x) 
 	 {  
  	unsigned char m,n;  
	m=x/10;  
	n=x%10;  
	P0=t[m];  
	P2=t[n]; 
	} 
void timer(void) interrupt 1 using 1  //中断服务函数
{
    TH0=(65536-50000)/256;
    TL0=(65536-50000)%256;
    f++;
    if(f==20)
    {
        f=0;
        m--;
    }
}
void main() 
{
	m=nanbei_time;
   	P1=0x00;  
	init_timer0(); 
   	while(1)  {  
  	 do   {   
	 display(m);   
   		g1=1;  
		r1=0;
        g2=0;
        r2=1;
        }
        while(m!=3);
        do
        {        
            if(m<=3)
            {
                y1=~y1;
				r1=0;
				g1=0;
                r2=1;
				g2=0;
                     }
        display(m);    
        		r1=0;
        g2=0;
        r2=1;
        }
        while(m!=3);
        do
        {        
            if(m<=3)
            {
                y1=~y1;r1=0;g1=0;
                r2=1;g2=0; 
             }
        display(m);    
        }
		while(m!=0);
		if(m==0)
{        m = dongxi_time;
		y1 = 0;
		y2 = 0;
    }
	do{
	display(m);
	g1 = 0;
	r1 = 1;
	g2 = 1;
	r2 = 0;
	}
	while(m!=3);
	do{
	      if(m<=3)
            {    
                r1=1,g1=0;
                y2=~y2,r2=0,g2=0;
          }
        display(m);
        }while(m!=0);
            if(m==0)
            {
                m=nanbei_time;
                y1=0;
                y2=0;
            }
    }
}
			




.         
#include<reg52.h>     
#include<math.h>  
#define uchar unsigned char
#define uint  unsigned int
#define ulang unsigned lang
static unsigned char count;
code unsigned char tab[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f}; 
         //共阴数码管 0-9
uchar smg[8];                 //定义缓冲区
uint  we,ns,h,j;   //ns代表南北,we代表东西
 
   
int aaa();   //东西红灯亮,南北绿灯,黄灯亮
int bbb();   //南北红灯亮,东西绿灯,黄灯亮
int eee();   //第一次完成显示,继续第二次初始化
void delay(unsigned int cnt)
{
 while(--cnt);
}
 
void display( )
{
                                 //取每一位的数字
            smg[0]=tab[we/10];     
       smg[1]=tab[we%10];
  smg[2]=0x00;             
            smg[3]=0x00;   
              smg[4]=0x00;
       smg[5]=0x00;            
                 smg[6]=tab[ns/10];  
  smg[7]=tab[ns%10];
}
void main()
{
     uchar i;
     TMOD |=0x01;  //定时器0 10ms in 12M crystal 用于计时
TH0=0xd8;     //初值
TL0=0xf0;
ET0=1;
TR0=1;
     EA =1;     
  display();
  while(1)
  {
    
for(i=0;i<8;i++)    //显示函数,因单片机而异
   {
      P0=smg[i];
 P2=i;
 delay(100);
   }
           ccc();     //进入交通灯控制程序
display( );    //扫描数码管
       }  
 
}
void timer() interrupt 1             //中断函数
{
   
   TH0=0xd8;                  //重新赋值
   TL0=0xf0;
   count++;
}
int aaa()       
{
          if(j<25)                 //东西红灯计数30秒,南北25秒绿灯亮
      {
      if(j==1) { we=30,ns=25; }
 ns--;
      we--;
      P1=0xde;
 return 0; } 
 
    if(25<=j<30)          //南北黄灯5秒
  {       
      if(j==26)  {  ns=5; } 
     P1=0xee;     
ns--; 
we--;   
return 0;    }
}
int bbb()
{
            if(h<25)   
      {                    //南北红灯30秒,东西绿灯25秒
      if(h==1) { we=25,ns=30; }
 ns--;
      we--;
       P1=0xf3;
 return 0; } 
 
    if(25<=h<30)           //东西黄灯5秒
  {       
      if(h==26)  {  we=5; } 
     P1=0xf5;     
ns--; 
we--;   
return 0;    }
 
     
 }
 int eee()      //一次周期交通灯显示完后,重新赋值,等待第二次
 {
  j=0;
 h=0;
 return 0;
 }
 int ccc()          //交通灯控制函数
 {
     
  if (count==100)       //定时一秒
    {
            count=0;
    j++;            //算法函数
 if ( (j>30)&&(j!=61))  { h++;      bbb();  return 0;   }
    if(j==61)   { eee(); return 0;}
               aaa();        return 0;   
   } 
 }
 


四、 文章目录

目 录

1 引言 1
1.1 本设计的目的、意义及应达到的技术要求 1
1.2 本设计在国内外的发展概况及存在的问题 2
1.3 本设计的中心要点 4
2 设计思路 5
2.1设计原理 6
2.2方案选择 7
2.2.1分析问题 7
3 元器件展示 8
3.1单片机展示 8
3.2汇编软件展示 10
4 系统设计流程概述 11
4.1设计流程概述 12
4.2汽车数量检查电路 13
4.3交通指示灯电路 13
4.4倒计时显示电路 14
4.5紧急处理电路 15
5 系统仿真 15
6 结论 20
参考文献 22
致谢 23
附录 24文章来源地址https://www.toymoban.com/news/detail-762322.html

到了这里,关于基于单片机的红绿灯智能控制系统设计的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 51单片机STM32交通灯红绿灯十字路口信号灯类设计功能要求汇总

    浏览必读: 使用搜索可以达到事半功倍的效果。 电脑浏览器CTRL+F可以使用搜索查找 功能说明: 1.四路交通灯,带有红绿灯倒计时,绿灯倒计时结束后转黄灯5秒,再转红灯。 2.紧急情况下按键紧急按钮,四路黄灯快闪。 3.可以动态设置红绿灯时间。 涉及知识点:按键扫

    2024年02月11日
    浏览(118)
  • AT89C51单片机红绿灯控制源代码(C语言版)附带Proteus电路图

    这个代码需要稍微改一下才能运行,看得懂的不超过1分钟应该能够搞好。看不懂的无法运行

    2024年02月07日
    浏览(44)
  • 基于OpenCV的红绿灯识别

    为了实现轻舟航天机器人实现红绿灯的识别,决定采用传统算法OpenCV视觉技术。 航天机器人的红绿灯识别主要基于传统计算机视觉技术,利用OpenCV算法对视频流进行处理,以获取红绿灯的状态信息。具体而言,该系统通过连接工控机摄像头读取视频流,将视频帧转换成HSV色彩

    2024年02月15日
    浏览(44)
  • 基于STM32的红绿灯设计

    基于protrus8设计电路原理图 先要思考明白十字路口红绿灯的逻辑 东西是一样的,南北是一样的。 东西红灯,南北就是绿灯,反之一样的,弄明白这些写代码就有思路了 中间的两个数码管是模拟真实红绿灯倒计时的用的,放置4个也行,但是为了方便观看就放一个了 下面放几

    2024年02月11日
    浏览(39)
  • 深度学习之基于Yolov5闯红灯及红绿灯检测系统

    欢迎大家点赞、收藏、关注、评论啦 ,由于篇幅有限,只展示了部分核心代码。    基于Yolov5的闯红灯及红绿灯检测系统是一种使用计算机视觉和深度学习技术实现的交通监控系统。它能够检测交通信号灯的状态(红灯、黄灯、绿灯),并识别车辆是否违反交通信号(闯红

    2024年02月06日
    浏览(39)
  • 【红绿灯识别】计算机视觉红绿灯识别【含GUI Matlab源码 2713期】

    ✅博主简介:热爱科研的Matlab仿真开发者,修心和技术同步精进,Matlab项目合作可私信。 🍎个人主页:海神之光 🏆代码获取方式: 海神之光Matlab王者学习之路—代码获取方式 ⛳️座右铭:行百里者,半于九十。 更多Matlab仿真内容点击👇 Matlab图像处理(进阶版) 路径规划

    2024年01月19日
    浏览(52)
  • 高德导航红绿灯为啥能读秒?

    文章来源:https://www.zhihu.com/question/545653479/answer/3098666967 每天工作其实就是负责自己片区的红绿灯,一大早就去校对时间,然后发布到后台。是的,统计出来的,而且还是人工统计,有误差请见谅 真的是很辛苦了!不过还是希望他们记录的时候好好记,因为有的路口真的不准

    2024年02月09日
    浏览(42)
  • 交通信号灯课程设计(红绿灯)

    一、设计指标 1.1对设计课题进行简要阐述        由一条主干道和一条支干道的汇合点形成十字交叉路口,为确保车辆安全、迅速地通行,在交叉路口的每个人口处设置了红、绿、黄三色信号灯。        (1)用红、绿、黄三色发光二极管作信号灯,用传感器或逻辑开关

    2024年02月09日
    浏览(53)
  • FPGA十字路口红绿灯控制器

    课程设计:十字路口红绿灯控制器 1.要求双方向8个灯的时序控制 2.要求显示倒计时 verilog hdl代码模块 测试程序模块 注意: 选择比较好的器件 测试文件命名为testbench.vt,否则不行。 采用BCD倒计时,经测试时序无错,代码结构清晰。 EDA课设,感谢论坛其他大佬的代码,基于

    2024年02月11日
    浏览(56)
  • 高德地图红绿灯读秒是怎么实现的?(一)

    关于这个读秒实现功能众说风云,目前有两种说法,一种说是靠大数据分析,一种说是靠交管部门数据。 我们先看一下 官方的回应 :可以自行去抖音看官方号的解释。 以下为原答: 有人说是接入了地方交管数据,其实政策难度很大且没必要。合理推测一下: 其实一个路口

    2024年02月02日
    浏览(40)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包