我爱编程Arduino与物联网

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

2018-05-23  本文已影响1415人  创客创未来

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

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

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

1 项目背景

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


交通灯.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灯的负极。


Untitled Sketch 2_bb.png

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

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

3.1 面包板

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


面包板.jpg

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

3.1.1 面包板的规格

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

面包板.jpg

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

3.1.2 结构以及内部构造

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

3.1.2.1 电源轨

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


电源轨.JPEG

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


电源轨说明.jpg

3.1.2.2 接线轨

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

接线轨.JPEG

3.1.2.3 凹槽

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

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

3.1.3.1 串联电路

串联电路图:


串联 02.png

我们在面包板上的连线:


串联 01.png

3.1.3.2 并联电路

并联电路图:


并联电路 01.png

我们在面包板上的连线:


并联电路 02.png

实际运行效果:


并联 03.png

3.1.4 面包板使用及注意事项

3.1.5 布线原则

3.1.6 保护

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

3.2 LED灯

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

3.2.1 原理

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


led1.png

3.2.2 极性

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


led 2.png

3.2.3 LED单向导通性

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

3.2.4 应用

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


led 3.png

3.3 电阻

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

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

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

3.4 杜邦线

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

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

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灯是不是按照我们的设计闪动的。


交通灯01.png

6 扩展任务

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

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

上一篇 下一篇

猜你喜欢

热点阅读