基于Arduino的双向交通灯系统

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

 

学  号        231        

姓  名       福福        

指导教师:赵志鹏

   --   7  2  

                                                     实训题目:交通灯系统

1   系统设计

    1.  设计要求
      1.  设计任务

   设计基于Arduino的双向交通灯系统,实现控制和方向显示功能

      1.  性能指标要求

1、基本要求

(1) 按照题目要求独立完成DF通灯状态(红、黄、绿)

     (3)每隔10秒钟切换一个方向,绿灯亮之前黄灯开始闪烁三次结束

     (4)通过点阵显示当前正在通行的方向

     (5)通过按键控制,调整通行时间

     (6)通过按键设置紧急状态(红灯全亮)

     

2、发挥部分

  1、设置人行道通行指示灯,并通过按键控制

2、紧急状态期间可通过蜂鸣器报警

3、设置倒计时时间

1.2 设计思路及设计框图

1.2.1设计思路

先设定点阵显示交通灯的通行方向,在面包板上做成DF通灯状态,接好剩下的按键和蜂鸣器。再设定灯的亮灭顺序(南北两个方向上的三盏灯根据要求显示亮灭),然后调用功能子函数实现按键控制通行时间和蜂鸣器紧急状态。

 1.2.2总体设计框图

基于Arduino的双向交通灯系统

2  各个模块程序的设计

1.对主函数编译调试,本次实训中主程序类似于流水灯的闪烁过程,然后进行面包板的连接和调试。通过USB将主程序烧进主控板,然后测试功能进行调试。

2.编写各个模块的程序,使用Arduino本身自带的模块功能以及库函数,程序编辑起来会有很提高。警报和控制时间那里由按键控制,如果按按键红灯会亮,并且蜂鸣器会响起,松开按钮返回循环;按第二个按键则调整通行时间。

基于Arduino的双向交通灯系统

图2-1程序流程图

4.关于程序的设计,主要关键部分:

1.点阵的数组定义:

#include<LedControl.h>//关于点阵的头文件

LedControl lc=LedControl(13,11,12,1);

强调声明点阵函数库,点阵就可以发挥作用。

2.点阵清屏:

  lc.shutdown(0,false);

  lc.setIntensity(0,3);

  lc.clearDisplay(0);

3.函数的声明:

int k1=0;
int k2=0;
int keypin1=10;
int keypin2=3;
int redpin = 4;
int yellowpin = 5;
int greenpin = 6;
int redpin2 = 7;
int yellowpin2 = 8;
int greenpin2 = 9;

void setup()
{
  lc.shutdown(0,false);
  lc.setIntensity(0,3);
  pinMode(keypin1,INPUT);
  pinMode(keypin2,INPUT);
  pinMode(redpin,OUTPUT);
  pinMode(yellowpin,OUTPUT);
  pinMode(greenpin,OUTPUT);
  pinMode(redpin2,OUTPUT);
  pinMode(yellowpin2,OUTPUT);
  pinMode(greenpin2,OUTPUT);
  }

3  调试过程

代码很长又麻烦,还有一些逻辑性的问题,解决一个问题所编写的程序代码较长,要检查和排除所有语法错误,调试过程要认真而专注。

测试是通过运行程序发现错误的过程,常见的错误有缺少程序大括号、结尾缺少分号、错误使用了中文符号、关键字错误、注释错误、库文件未加载、端口选择错误、串口被占用、驱动没有正确安装等等。调试则是确定测试中找到的错误性质并改正错误的过程。测试与调试通常交替进行,即测试——调试——再测试——再调试。

用尽可能少的测试数据发现更多的错误,选择合适的测试数据,使系统在运行时能执行到每条语句,以测试各指令是否正确。测试输入合法数据与非法数据时,程序的运行情况。对于合法数据,还要考虑数据的一般性与特殊性。

测试可按模块测试、组装测试和确认测试的步骤进行。

1.模块测试就是分别对各模块进行测试的过程。在编写一个模块后应立即对其进行测试,因为这时对模块记忆深刻,而且单个模块相对较小,所以容易构造测试数据,能方便地检查和改正错误。

2.组装测试就是把所有模块(应该是通过模块测试的模块)按预先制定的计划逐步组装和测试的过程。一般情况下,各模块之间要相互传递数据和控制信息,因此组装测试的主要任务是发现模块接口中的错误。

3.确认测试是最后一个步骤,一般在将软件交付用户之前,应确认软件是否确实满足用户的要求,通常使用接近实际的用例进行测试。

测试程序时,用Arduino程序的模块化可以随时查看变量或表达式的值,有时还可以将部分程序代码用模块直接修改,提高自己代码的正确性,以便压缩出错代码的范围。

4  功能测试

4.1 测试仪器与设备

用面包线把Arduino与面包板上的Led灯和点阵连接起来,通电之后查看各小灯和点阵亮灭情况,在电路连接正确的前提下灯亮,不亮则重新调试。将主程序烧录进开发版,测试主程序的运行情况,图片中灯亮表明运行情况良好,灯亮的同时点阵开始运行。

                        基于Arduino的双向交通灯系统

          

4.2 性能指标测试

该实验实现了交通灯的通灯状态(红、黄、绿),和每隔10秒钟切换一个方向,绿灯亮之前黄灯开始闪烁三次结束以及通过点阵显示当前正在通行的方向。通过子程序实现两个按键的控制功能,被调用函数开始循环,按键起控制作用。可蜂鸣器响而不受控制,按键紧急状态时全部灯都灭了,可能因为模块中语句循序有错误,也可能句法不全。具备了部分交通灯功能。

4.3 误差分析

5  实训心得体会

Arduino实验是开学之后才进行的,即使学了C语言也只是皮毛,注定了这次的实训不会很轻松。这次实训设计基于Arduino的双向交通灯系统,实现控制和方向显示功能,为了让我们巩固这学期所学的C语言程序设计的课本内容和Arduino实验开设的课程,拿到交通灯题目后看着就觉得好难,回来开始编写代码接电路时才发现才发现自己不会的的问题比想象的多。

本次实训主要运用Arduino开发版、8*8点阵、面包板, 把C语言的理论知识以及实际操作过程结合起来而成。这是我第一次做,自身经验不足、不够细心在操作时出现了许多问题,主要是不会。我发现自己对一些前面学过的知识还不够理解,没能好好的掌握。

本次实训,其实接电路并不怎么难,最难的是编写代码,真的好无从下手只能通过上网查资料书籍,然后又问同学,通过对比他们的设计过程,觉得书籍上的模块化设计思想省时而不易出错。我还尝试用Arduino图形化编程练过,觉得那个也不错,都不用自己写程序。后来我发现我自己的不足地方,逐渐地改变自己的设计思路,在面包板上将开发板、点阵、led、按键、蜂鸣器通过面包线连接起来,首先设定点阵的方向再编译南北方向的led灯再到两个按键控制的程序,顺着思路编写好代码。当程序烧录进去灯亮起的那一刻,我心理感到无比激动与自豪,心里非常的高兴。

通过本次实训,我更加深了对Arduino程序和c程序的理解,学会了在面包板的使用方法。即使这次实训不能完整的做出来,但我感觉到收获好大,这过程我遇到了好多不同的问题,暴露了我不足的知识点,经过自己的思考和动手操作,终化成为属于我自己的东西。曾认为很难的实训,现在也做好了,在今后的学习生活中一定要不懈努力不能遇到困难就退缩,要找出问题所在然后一一解决。在日后,自己所学的理论知识要和实践结合起来,提高自己的实际动手能力和独立思考能力。

6  参考文献

  1. 《C程序设计》/谭浩强著-清华大学出版社,2019.12
  2. Arduino程序设计基础(第二版)/陈吕洲主编-北京航空航天大学出版社,2015.3

附录

附录1:仿真波形图(部分模块)

附录2:程序清单文章来源地址https://www.toymoban.com/news/detail-465246.html

#include"LedControl.h"
LedControl lc=LedControl(13,11,12,1);
byte d[8]={
B00001000,
B00000100,
B00000010,
B11111111,
B11111111,
B00000010,
B00000100,
B00001000,};
byte h[8]={
B00010000,
B00100000,
B01000000,
B11111111,
B11111111,
B01000000,
B00100000,
B00010000,};
int k1=0;
int k2=0;
int keypin1=10;
int keypin2=3;
int redpin = 4;
int yellowpin = 5;
int greenpin = 6;
int redpin2 = 7;
int yellowpin2 = 8;
int greenpin2 = 9;

void setup()
{
  lc.shutdown(0,false);
  lc.setIntensity(0,3);

lc.clearDisplay(0);
  pinMode(keypin1,INPUT);
  pinMode(keypin2,INPUT);
  pinMode(redpin,OUTPUT);
  pinMode(yellowpin,OUTPUT);
  pinMode(greenpin,OUTPUT);
  pinMode(redpin2,OUTPUT);
  pinMode(yellowpin2,OUTPUT);
  pinMode(greenpin2,OUTPUT);
  }
  void loop()
  {
    k2=digitalRead(keypin2);
  if(k2==LOW)
  {
    k1=digitalRead(keypin1);
      if(k1==LOW)
      {
        lc.clearDisplay(0);
        for(int row=0;row<8;row++)
        lc.setRow(0,row,h[row]);
      digitalWrite(redpin,HIGH);

 digitalWrite(greenpin2,HIGH);
    delay(7000);
      digitalWrite(redpin,LOW);
      digitalWrite(yellowpin,HIGH);
    delay(500);
      digitalWrite(yellowpin,LOW);
    delay(500);
      digitalWrite(yellowpin,HIGH);
    delay(500);
     digitalWrite(yellowpin,LOW);
    delay(500);
     digitalWrite(yellowpin,HIGH);
    delay(500);
     digitalWrite(yellowpin,LOW);
    delay(500);
        lc.clearDisplay(0);
        for(int row=0;row<8;row++)
        lc.setRow(0,row,d[row]);   
      digitalWrite(greenpin2,LOW);
      digitalWrite(greenpin,HIGH);
      digitalWrite(redpin,LOW);
      digitalWrite(redpin2,HIGH);
      digitalWrite(yellowpin,LOW);
    delay(7000);
      digitalWrite(redpin2,LOW);
     digitalWrite(yellowpin2,HIGH);
    delay(500);
      digitalWrite(yellowpin2,LOW);
    delay(500);
      digitalWrite(yellowpin2,HIGH);
    delay(500);
     digitalWrite(yellowpin2,LOW);
    delay(500);
     digitalWrite(yellowpin2,HIGH);
    delay(500);
     digitalWrite(yellowpin2,LOW);
    delay(500); 
      digitalWrite(yellowpin2,LOW); 
      digitalWrite(greenpin,LOW);
      }
 else if(k1==HIGH)
       {
        lc.clearDisplay(0);
        for(int row=0;row<8;row++)
        lc.setRow(0,row,h[row]);
      digitalWrite(redpin,HIGH); digitalWrite(greenpin2,HIGH);
    delay(15000);
      digitalWrite(redpin,LOW);
      digitalWrite(yellowpin,HIGH);
    delay(500);
      digitalWrite(yellowpin,LOW);
    delay(500);
      digitalWrite(yellowpin,HIGH);
    delay(500);
     digitalWrite(yellowpin,LOW);
    delay(500);
     digitalWrite(yellowpin,HIGH);
    delay(500);
     digitalWrite(yellowpin,LOW);
    delay(500);
        lc.clearDisplay(0);
        for(int row=0;row<8;row++)
        lc.setRow(0,row,d[row]);   
      digitalWrite(greenpin2,LOW);
      digitalWrite(greenpin,HIGH);
      digitalWrite(redpin,LOW);
      digitalWrite(redpin2,HIGH);
      digitalWrite(yellowpin,LOW);
    delay(15000);
      digitalWrite(redpin2,LOW);
     digitalWrite(yellowpin2,HIGH);
    delay(500);
      digitalWrite(yellowpin2,LOW);
    delay(500);
      digitalWrite(yellowpin2,HIGH);
    delay(500);
     digitalWrite(yellowpin2,LOW);
    delay(500);
     digitalWrite(yellowpin2,HIGH);
    delay(500);
     digitalWrite(yellowpin2,LOW);
    delay(500); 
      digitalWrite(yellowpin2,LOW); 
      digitalWrite(greenpin,LOW);
     }
      }
     else if(k2==HIGH)
     
       digitalWrite(redpin,HIGH);
       digitalWrite(redpin2,HIGH);
       delay(5000);
        digitalWrite(redpin,LOW);
       digitalWrite(redpin2,LOW);
     
    
   
    }



到了这里,关于基于Arduino的双向交通灯系统的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

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

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

相关文章

  • 单片机设计基于单片机的交通灯控制系统的设计

      针对我国城市路况复杂的特点,在交通灯控制系统硬件设计方面以最小系统模块、电源模块、时间显示模块以及车流量检测模块为主要模块,不仅可以完成交通灯的顺序点亮,还可以实现倒计时、车流量检测等相关功能;软件设计方面通过检测程序的设定,来检测是否达

    2024年02月04日
    浏览(44)
  • 15-基于单片机的交通灯系统设计(原理图+仿真+说明书)

    资料包含:设计全套资料(精品) 原理图工程文件 原理图截图 仿真模型工程文件 仿真截图 说明书19236字 英文文献及翻译 答辩PPT visio流程图工程 资料链接 本设计是基于单片机的交通灯控制系统设计,通过对路口设置的交通指示灯和时间显示装置的控制,给行人和车辆的通

    2024年02月10日
    浏览(36)
  • 【毕业设计】15-基于单片机的交通灯系统设计(原理图+仿真+论文)

    本设计是基于单片机的交通灯控制系统设计,通过对路口设置的交通指示灯和时间显示装置的控制,给行人和车辆的通行提供便利。 1、设计定时器或采用相关的定时芯片给系统提供时间参考信号。 2、单片机依据时间信号,控制指示灯的亮灭控制车辆和行人的通行,同时显示

    2023年04月08日
    浏览(43)
  • 【毕业设计】基于PLC的十字路口交通灯控制系统设计【仿真+源码+论文】

    摘 要 本次设计的课题是基于PLC的十字路口交通灯控制系统设计,传统的十字路口交通灯多采用单片机集成电路作为控制系统,单片机系统虽然在功能上能够实现十字路口交通灯的各种控制需求,但是单片机控制系统在设计时需要数字电路与模拟电路的完美结合,这样的控制

    2024年02月08日
    浏览(60)
  • 【毕业设计】15-基于单片机的交通灯系统设计(原理图、仿真、源代码工程+答辩论文+答辩PPT)

    资料包含:毕业设计全套资料(精品) 原理图工程文件 原理图截图 仿真模型工程文件 仿真截图 答辩论文低重复率19236字 英文文献及翻译 答辩PPT visio流程图工程 本设计是基于单片机的交通灯控制系统设计,通过对路口设置的交通指示灯和时间显示装置的控制,给行人和车辆

    2024年02月04日
    浏览(40)
  • 交通灯控制系统

    一.实验目的 设计一个用于十字路口的交通灯控制器,能显示十字路口东西、南北两个方向的红、黄、绿的指示状态; 具有倒计时的功能,用两组数码管作为东西和南北方向的倒计时显示,主干道直行(绿灯)60秒后,左转(绿灯)40秒;支干道直行(绿灯)45秒后,左转(绿灯)30秒,在

    2024年02月11日
    浏览(47)
  • 基于单片机的交通灯设计

    本系统由单片机系统、键盘、LED 显示、交通灯演示系统组成。系统包括人行道、左转、右转、以及基本的交通灯的功能。系统除基本交通灯功能外,还具有倒计时、时间设置、紧急情况处理、分时段调整信号灯的点亮时间以及根据具体情况手动控制等功能。随着社会经济的发

    2024年02月06日
    浏览(82)
  • 基于FPGA的交通灯设计与实现

    EDA工具:Modelsim and Vivado ##一、产品要求: 该控制器用于主干道和支道公路交叉口,优先保证主干道通行,平时处于\\\"主干道绿灯,支道红灯\\\"状态,支道有车辆要穿过主干道时,信号灯改为\\\"主干道红灯,支道绿灯\\\",支道无车辆时,信号灯返回\\\"主干道绿灯,支道红灯\\\"状态。如

    2024年02月02日
    浏览(52)
  • 基于数电的交通灯控制器

    由一条主干道和一条支干道的汇合点形成十字交叉路口,为确保车辆安全、迅速地通行,在交叉路口的每个人口处设置了红、绿、黄三色信号灯。 (1)用红、绿、黄三色发光二极管作信号灯,用传感器或逻辑开关代替传感器做检测车辆是否到来的信号,设计制作一个交通灯

    2024年02月09日
    浏览(51)
  • 单片机交通灯控制系统

    一、实验目的 掌握单片机的综合应用设计。 二、实验仪器、材料 Keil软件、proteus软件 三、实验内容及要求 完成以下任务:十字路口的交通灯控制系统,四组灯对应十字路口的四个方向,用两位的数码管显示剩余的时间。 四、实验原理 五、实验过程及原始记录(包括原理图

    2024年02月11日
    浏览(40)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包