第三章 有趣的交通灯(Arduino边做边学:从点亮Led到物联网)

本系列文章为作者原创,未经作者书面同意,不得转载!

第二个项目,我们来做一个交通灯。在第一个项目中,我们点亮了板载LED灯,可能很多盆友还是不过瘾,我们既没有动手设计电路图,连接元器件,也没有敲代码,这样就OK了,是不是感觉成功的喜悦来得有点太突然了?

没关系,第二个项目能够满足您以上的所有需求,呵呵!不过啊,咱们学习还得一步一步来,千万不要小看控制一盏LED灯,其实,您能够控制一盏LED灯,您就能控制一部马达(加一个继电器),既然能够控制一部马达了,您就能创作出很多东西。所以,最关键的是我们的想象力和我们运用知识的能力。说得有点多了,我们开始今天的项目吧!

1 项目背景

我想大家都看见过交通灯,就是马路上十字路口的红绿灯。如果您开过车,我想您一定仔细观察过交通灯,如果您还没有驾驶过车,您是否仔细观察过交通灯呢?交通灯包括三种个不同颜色的灯:红灯、黄灯和绿灯。


1723059-4edc28f0de84d340.png
交通灯.png

每个路口的红绿灯切换的时间并不是相同,这个是根据不同路口的车流情况来设定的,我们假设红绿灯切换的时长是30秒,那么三盏灯的闪动情况是这样的:红灯常亮30秒,红灯熄灭,绿灯常亮27秒,然后按照1秒1次的频率闪动3次(时长为3秒),绿灯熄灭,黄灯按照1秒一次的频率闪动3次(时长为3秒),黄灯熄灭,如此重复,见下面的时序表:

状态 时长(秒)
红灯 常亮 30
绿灯 常亮 27
绿灯 闪烁 3
黄灯 闪烁 3

2 所需元器件

元器件 型号 数量 备注
主控板 arduino Uno 1
LED灯 3 红黄绿各一个
电阻 220欧姆 3
面包板 1
杜邦线 7
数据线 Uno数据线 1

3 电路图

根据交通灯的项目需求,我们需要按照上面的时序表控制三个不同颜色的LED灯的开关,我们分别将LED灯的正极(较长一些的引脚,后面我们还会详细介绍一下LED灯)接入Uno的2、7、12引脚(当然您也可以接入其它数字引脚),LED灯的负极引脚串联一个220欧姆的限流电阻后接地(Uno上的GND引脚),由于Uno上面GND引脚有限,同时也是为了简化接线,我们使用了面包板上的电源轨来同时接入三个LED灯的负极。


1723059-0e9e89eee7fbd648.png
Untitled Sketch 2_bb.png

由于这是我们第一个电路图,所以本章对电路的基本组成部分做一个较为详细的介绍(这也是本系列文章的写作风格,那就是尽量不脱离项目来介绍某个知识点,而是将知识点放在项目中讲解,这样能够让那些刚刚入门的朋友能够在项目的实践过程中构建较为全面的知识体系,这也是本人对教育家杜威先生的“从做中学”教育理念的一种实践吧!),如果您确认对这部分内容已经很熟悉,您可以跳过这一节。

约翰·杜威(John Dewey,1859-1952):“所有的学习都是行动的副产品,所以教师要通过“做”,促使学生思考,从而学得知识。”

3.1 面包板

当您开始搭建一个电路时,面包板是最基本、最简单的元件之一。由于面包板上有很多小插孔,各种电子元器件可根据需要任意插入或拔出,免去了焊接的工序,节省了电路的组装时间,且元件可以重复使用,非常适合电路的组装、调试和学习。
面包板是这个样子的:


1723059-f0181634a7b5cc13.jpg
面包板.jpg

面包板这个名称听起来有点奇怪,电路跟面包有关系吗?您别不信,还真有关系。面包板的得名可以追溯到真空管电路的年代,当时的电路元器件大都体积较大, 人们通常通过螺丝和钉子将他们固定在一块切面包用的木板上进行连接,后来电路元器件体积越来越小,但面包板的名称沿用了下来。

3.1.1 面包板的规格

面包板有不同的规格,如170孔(3547mm),400孔(8555mm),800孔(165*55mm)等。如下图,从上到下依次为170孔、400孔和800孔面包板:

扫描二维码关注公众号,回复: 5180496 查看本文章
1723059-ed1bffc6d8bba176.jpg
面包板.jpg

每块面包板的四边都有凸起和凹槽,使同一大小规格的面包板可以进行拼接,可用空间变大。面包板背面一般都有不干贴,方便其粘贴固定在物体上。

3.1.2 结构以及内部构造

面包板使用热固性酚醛树脂制造,板底有金属条,在板上对应位置打孔使得元件插入孔中时能够与金属条接触,从而达到导电目的,一般将每5个孔用一条金属条连接。板子中央一般有一条凹槽,这是针对需要集成电路、芯片试验而设计的。板子两侧有两排竖着的插孔(电源轨),也是5个一组,为板子上的元件提供电源。

3.1.2.1 电源轨

在面包板的上下两侧分别有两列插孔,一般是作为电源引入的通路。上方第一行标有“+”的一列有5组插孔,每组5个(内部5个孔连通),均为正极。上方第二行标有“-”的一列有5组插孔,每组5个(内部5个孔连通),均为接地。面包板下方第一行与第二行结构同上。如需用到整个面包板,通常将“+”与“+”用导线连接起来,“-”与“-”用导线连接起来。


1723059-224eb5b0ee76a039.JPEG
电源轨.JPEG

800孔的电源板电源轨有两种类型,一种是整个电源轨全连通,面包板上的红蓝标识线为:一整条线,另一种是电源轨分为两部分,中间断开,我们在搭建电路时一定注意,如下图:


1723059-4f9bd655ed1bb715.jpg
电源轨说明.jpg

3.1.2.2 接线轨

连接孔分为上下两部分,是我们的主工作区,用来插接原件和跳线。在同一列中的5个插孔(在面包板的两端有字母标识,即a-b-c-d-e,f-g-h-i-j)是互相连通的;列和列(在面包板的上下两侧有数字标识,即1-30)之间以及凹槽上下部分(即e-f)是不连通的。

1723059-b6d152bcf4074ba9.JPEG
接线轨.JPEG

3.1.2.3 凹槽

在面包板的中间有一个长长的凹槽,其作用如下:

  • 表示上下两部分是断开的。

  • 凹槽中间距离为7.26mm,刚好插入标准窄体的DIP引脚集成电路芯片。


    1723059-a37177a5a3db19df.png
    凹槽1.png
  • 由于集成电路芯片引脚很多,一般不易取下来,如果暴力拔出很容易弄弯引脚,甚至折断引脚,这个凹槽刚好可以用镊子之类东西伸到集成电路下面,方便取出集成电路。


    1723059-7e5d50f76ecfb538.png
    凹槽2.png

3.1.3 如何在面包板上搭建电路

3.1.3.1 串联电路

串联电路图:


1723059-1ff0965b24b353fb.png
串联 02.png

我们在面包板上的连线:


1723059-0387e5acaccae1ea.png
串联 01.png

3.1.3.2 并联电路

并联电路图:


1723059-ba957888ee4f7ad3.png
并联电路 01.png

我们在面包板上的连线:


1723059-f75b6ac0e3a84e93.png
并联电路 02.png

实际运行效果:


1723059-da9fb95f11606648.png
并联 03.png

3.1.4 面包板使用及注意事项

    1. 安装分立元件时,应便于看到其极性和标志,将元件引脚理直后,在需要的地方折弯。为了防止裸露的引线短路,必须使用带套管的导线,一般不剪断元件引脚,以便于重复使用。一般不要插入引脚直径大于0.8mm的元器件,以免破坏插座内部接触片的弹性。
    1. 对多次使用过的集成电路的引脚,必须修理整齐,引脚不能弯曲,所有的引脚应稍向外偏,这样能使引角与插孔可靠接触。要根据电路图确定元器件在面包板上的排列方式,目的是走线方便。为了能够正确布线并便于查线,所有集成电路的插入方向要保持一致,不能为了临时走线方便或缩短导线长度而把集成电路倒插。
    1. 根据信号流程的顺序,采用边安装边调试的方法。元器件安装之后,先连接电源线和地线。为了查线方便,连线尽量采用不同颜色。例如:正电源一般采用红色绝缘皮导线面包板的使用负电源用蓝色,地线用黑线,信号线用黄色,也可根据条件选用其它颜色。
    1. 面包板宜使用直径为0.6mm左右的单股导线。根据导线的距离以及插孔的长度剪断导线,要求线头剪成45斜口,线头剥离长度约为6mm左右,要求全部插入底板以保证接触良好。裸线不宜露在外面,防止与其它导线断路。
    1. 连线要求紧贴在面包板上,以免碰撞弹出面包板,造成接触不良。必须使连线在集成电路周围通过,不允许跨接在集成电路上,也不得使导线互相重叠在一起,尽量做到横平竖直,这样有利于查线,更换元器件及连线。
    1. 最好在各电源的输入端和地之间并联一个容量为几十微法的电容,这样可以减少瞬变过程中电流的影响。为了更好地抑制电源中的高频分量,应该在该电容两端再并联一个高频去耦电容,一般取0.01 ~ 0.047μf的独石电容。
    1. 在布线过程中,要求把各元器件放置在面包板上的相应位置以及所用的引脚号标在电路图上,保证调试和查找故障的顺利进行。
    1. 所有的地线必须连接在一起,形成一个公共参考点。

3.1.5 布线原则

    1. 尽量减少连接点。增加一个连接点,相当于人为地增加了故障概率。
    1. 尽量避免立交桥。所谓的“立交桥”就是元器件或者导线骑跨在别的元器件或者导线上。初学者最容易犯这样的错误。这样做,一方面给后期更换元器件带来麻烦,另一方面,在出现故障时,零乱的导线很容易使人失去信心。
    1. 尽量牢靠。有两种现象需要注意:第一、集成电路很容易松动,因此,对于运放等集成电路,需要用力下压,一旦不牢靠,需要更换位置。第二、有些元器件管脚太细,要注意轻轻拨动一下,如果发现不牢靠,需要更换位置。
    1. 方便测试。5孔孤岛一般不要占满,至少留出一个孔,用于测试。
    1. 布局尽量紧凑,信号流向尽量合理。
    1. 布局尽量与原理图近似。这样有助于同学们在查找故障时,尽快找到元器件位置。
    1. 电源区使用尽量清晰。在搭接电路之前,首先将电源区划分成正电源、地、负电源3个区域,并用导线完成连接。

3.1.6 保护

    1. 尽量避免进水、碎屑以及粉状物进入插孔。
    1. 避免集成电路的粗暴插拔,以免管脚折在插孔内;不要将金属线折断在插孔内。
    1. 不要将太粗的导线、探针、管脚插入孔内。

(面包板介绍这部分内容参考了链接地址,在此对原作者表示感谢!)

3.2 LED灯

百度百科:
发光二极管简称为LED。由含镓(Ga)、砷(As)、磷(P)、氮(N)等的化合物制成。当电子与空穴复合时能辐射出可见光,因而可以用来制成发光二极管。在电路及仪器中作为指示灯,或者组成文字或数字显示。砷化镓二极管发红光,磷化镓二极管发绿光,碳化硅二极管发黄光,氮化镓二极管发蓝光。因化学性质又分有机发光二极管OLED和无机发光二极管LED。

3.2.1 原理

它是半导体二极管的一种,可以把电能转化成光能。


1723059-23021708e839e023.png
led1.png

3.2.2 极性

发光二极管的两根引线中较长的一根为正极,应接电源正极。


1723059-837c2c3847b2804d.png
led 2.png

3.2.3 LED单向导通性

LED只能往一个方向导通(通电),接线时一定要注意,否则有可能击穿LED,永久损坏LED。

3.2.4 应用

LED灯的应用非常广泛,如:汽车信号灯、交通信号灯、室外全色大型显示屏以及特殊的照明光源,下图是北京奥运会开幕式上LED的应用效果。


1723059-27a8508b3024c7f0.png
led 3.png

3.3 电阻

电阻器(Resistor)在日常生活中一般直接称为电阻。是一个限流元件,将电阻接在电路中后,电阻器的阻值是固定的一般是两个引脚,它可限制通过它所连支路的电流大小。

阻值不能改变的称为固定电阻器。阻值可变的称为电位器或可变电阻器。

电阻在电路图中用字母R来表示,单位为欧姆Ω。

3.4 杜邦线

杜邦线可用于不同元器件间的连接,可以非常牢靠地和插针连接,无需焊接,可以快速进行搭建电路。
杜邦线根据两端的接口类型,分为三种:

  • 公对公


    1723059-23280547bc44d388.jpg
    公对公.jpg
  • 公对母


    1723059-2046f6f51485be81.jpg
    母对公.jpg
  • 母对母


    1723059-fbe2ff31846250cc.jpg
    母对母.jpg

在选择杜邦线时请根据元器件引脚的类型进行选择,购买时,最好每种都买一些,方便使用。

4 程序代码

/*
 *名称:有趣的交通灯实验
 *
 *功能:红灯常亮30秒,红灯熄灭,绿灯常亮27秒,然后按照1秒1次的频率闪动3次,绿灯熄灭,黄灯按照1秒一次的频率闪动3次,黄灯熄灭,如此重复。
 *
 *作者:YXK
 *
 *时间:2018.5.24
 * 
 */


//setup函数在重新上电或按了复位后只运行一次
void setup() {
  // 初始化2、7、12引脚,并将其定义为输出引脚。
  pinMode(2, OUTPUT);   //绿灯
  pinMode(7, OUTPUT);   //黄灯
  pinMode(12, OUTPUT);  //红灯
}

// loop函数永远地循环重复执行
void loop() {
  digitalWrite(12, HIGH);   //将红灯点亮(HIGH代表高电压)
  delay(30000);             //保持30秒
  digitalWrite(12, LOW);    //将红灯熄灭(LOW代表低压)
  digitalWrite(2, HIGH);    //将绿灯点亮
  delay(27000);             //保持27秒钟
  digitalWrite(2, LOW);     //将绿灯熄灭并开始闪烁,频率为1秒
  delay(500); 
  digitalWrite(2, HIGH); 
  delay(500);
  digitalWrite(2, LOW);
  delay(500);
  digitalWrite(2, HIGH); 
  delay(500);
  digitalWrite(2, LOW);     
  delay(500); 
  digitalWrite(2, HIGH);
  delay(500);
  digitalWrite(2, LOW);     //绿灯熄灭,闪烁结束
  digitalWrite(7, HIGH);    //黄灯点亮,并开始闪烁,频率为1秒
  delay(500); 
  digitalWrite(7, LOW);
  delay(500);
  digitalWrite(7, HIGH); 
  delay(500);
  digitalWrite(7, LOW);
  delay(500);
  digitalWrite(7, HIGH); 
  delay(500);
  digitalWrite(7, LOW);     //黄灯熄灭,闪烁结束,开始下一个循环
  delay(500);
}

4.1 代码讲解

交通灯项目的程序看起来比上一个项目的程序长了很多,但实际上并没有新的函数,都是我们上一个项目运用过的三个函数,分别是:

  • 配置引脚输入输出状态函数:
 pinMode(2, OUTPUT);  //括号里面为函数参数
  • 引脚输出函数:
digitalWrite(2, LOW); //向数字2引脚写入LOW值,其电压将设定为低电平0V
digitalWrite(7, HIGH); //向数字7引脚写入HIGH值,其电压将设定为高电平5V
  • 时间延迟函数:
delay(500);  //参数为毫秒,500毫秒为0.5秒

结合程序中的注释,您是不是很容易的理解这段代码。
下面我们看看程序的执行效果吧!

5 执行效果

我们按照第三节的电路图搭建好实际电路,然后我们将Arduino Uno电路板连接好电脑,将程序上传到Uno上。
观察三个LED灯是不是按照我们的设计闪动的。


1723059-f4dec57bc3bfd875.png
交通灯01.png

6 扩展任务

我们今天做的交通灯只有一组(红黄绿),但实际上马路上的交通灯都是两组,控制两个方向,当一组的红灯亮时,另一组的绿灯亮,您是不是可以根据实际情况,设计两组交通灯,然后用Uno控制它们呢!

如果您喜欢本文,您可以点击一下下面的喜欢按钮,您也可以关注我,谢谢您的支持!

猜你喜欢

转载自blog.csdn.net/weixin_34224941/article/details/87212386