admin管理员组

文章数量:1531662

2024年3月30日发(作者:)

SmartArduino

1. Arduino控制LED灯闪烁

QQ:123433772

1.1 问题描述:如何利用Arduino控制板子上的LED灯不停地闪烁?

通过这个非常简单的Arduino控制实验,将对Arduino的编程环境及其语言有所了解。

其原理非常简单,就是Arduino板子上本身带有的LED灯,其对应的端口为控制板上的13

端口。利用Arduino控制板不断地使13端口的电压由低到高(或由高到低)循环变化。从

而使得其对应的LED灯由暗到亮(或由亮到暗)的变化,LED灯如此看起来就是在不停地

闪烁。当然,我们也可以在Arduino控制板的其它端口另外添加一个LED灯来实现此实验

的目的,但需要更多的材料。

1.2 所需装备

为了实现Arduino控制板13端口的LED灯不停地闪烁,只需要以下装备:

表1-1:所需材料

序号

1

2

3

4

5

6

7

名称

Arduino软件

Arduino UNO开发板

USB线

杜邦线

发光二极管(LED)

电阻

面包板

所需材料

数量 作用

1套 提供IDE环境

1块 控制主板

1条 烧录程序

若干条 连接组件

1个 LED闪烁

220欧 限流

备注

最新版本1.05

各种版本均可

随板子配送

可选

可选

可选

可选

(1) Arduino软件

目前,Arduino的IDE (Integrated Development Environment)集成开发环境官网已经

更新到1.05版本,可在官网/en/Main/Software下载到。安装完成后即可

使用。由于后面的实验都是基于此版本进行的,在后面将不再提此开发平台;

(2) Arduino UNO开发板

由于开源,Arduino的开发板有很多,大小、颜色虽不同,但完成的主要功能都是

一样的。随便选择一块即可,主要有如图1-1所示。其主要功能介绍请参考认识Arduino

部分内容.

(3) USB线

一般这是随Arduino控制板一起配送的,其主要作用是将代码烧录到Arduino控制板中,

如图1-2所示。

总体上来说,这条USB线两端口分别是USB-A口和USB-B口。但其实USB的接口类

型种类繁多。在本文中仅给出与此条USB线相关的接口类型介绍,如图1-3所示。

SmartArduino

图1-3(a) USB-A插头(Plug) 图1-3(b) USB-A插座(Receptacle)

图1-3(c) USB-B插头(Plug) 图1-3(d) USB-B插座(Receptacle)

其实,对于USB接口类型的定义非常复杂,具体请参照USB官网的介绍。

另外,如果LED灯接在其他端口的话,则需要增加1个LED灯和一公一母的杜邦线。

增选材料:

(4) 杜邦线

杜邦线是美国杜邦公司生产的有特殊效用的缝纫线。后来此概念用到电子工业上来,如

图1-4所示。杜邦线可用于实验板的引脚扩展,增加实验项目等。而且可以非常牢靠地和插

针连接,不需要焊接就可以快速进行电路试验。在各类电路实验中频繁使用。

图1-4 杜邦线

(5) 发光二极管

对于LED(Light Emitting Diode),又称发光二极管。它能直接将电能转化为可见光的

固态半导体。LED灯的发光原理较为复杂,咱们将在电子元器件部分较为详细地介绍此部

分内容。常见的发光二极管的管脚有直脚和弯脚的,如图1-5(a)所示。那么如何判别LED

管脚的正负性呢?总体原则是管脚长一端接正极,另一端接负极。那要是LED两个管脚的

长度一样怎么办呢?也很简单辨别。总体辨别方法如下所示。

SmartArduino

图1-5(a) LED灯管脚 图1-5(b) LED灯结构

1) 总体原则:发光二极管长脚为正,短脚为负。

2) 晶片判别:如果管脚长度一样长,则可根据LED里面的晶片判别,如图1-5(b)所示。

发光二极管里面大点所对应管脚为负极,小点为正极。

3) 万用表测量:假设红表笔接“+”,黒表笔接“-”;在测发光二极管时,低阻档测不出

来。可用RX10K档来测量。当两表笔接触二极管的两极,如果电阻较小,则黑表笔

所接是正极。若电阻值较大,则黑表笔所接是负极。

(6) 限流电阻220

(欧姆)

咱们先抛出这样一系列问题:为什么需要限流电阻?没有是否可以?一定需要电阻,那

么其阻值到低要选多大的?

要回答这些问题,我们需要先了解发光二极管的一些参数和特性。

主要参数

通过查阅相关资料,咱们知道普通发光二极管的电压参数:正向饱和压降为1.6~2.1V,

正向工作电流为5~20mA。对于LED灯来说,还有一个非常重要的参数,就是最大反向电

压,其值为5V,而咱们实验中控制电路提供的电压为5V。

重要极限特性

1)最大允许功耗:就是允许加在LED等两端的正向电压与流过它的电流乘积的最大值。

如果超过此值,LED等将发热,甚至损坏;

2)最大正向直流电流:允许加在LED等两端的最大的正向工作电流。超过此值,LED

灯可能被损坏或击穿;

3)最大反向电压:允许加在LDE两端的最大反向电压。超过此值,发光二极管可能被

击穿损坏。

另外,发光二极管也会受工作环境温度的影响,当低于或高于某一温度时,发光二极管

将不能正常工作。而且,在后面额实验中我们还要利用LED灯的一个重要特性:V-I特性。

当发光二极管的正向电压小于某一值(叫阈值)时,电流极小,不发光。当电压超过某一值

后,正向电流随电压迅速增加,发光。所以,我们在后面的实验中,我们将可以通过Arduino

控制LED灯的亮暗程度。

现在,我们应该能够轻易地回答上面的问题了。因为咱们Arduino主板提供的电压为

5V,所以有可能会超过LED灯的极限值。所以通过增加限流电阻,主要目的就是为了控制

LED灯两端的电压(包括反向电压)、电流或功耗。接下来,咱们计算一下限流电阻的阻值。

所以,为了使LED灯能正常工作,我们在其正常工作范围选择工作电压和电流,从而

可计算出限流电阻的阻值来。假设Arduino主板能提供的总电压为5V,工作电压选择

U=1.7V,工作电流I=15mA。那么限流电阻R=(5-U)/I=(5-1.7)/0.015=220

(7) 面包板

面包板是专门为无焊接电子电路实验设计的,利用它可以高效方便地搭建实验所需要的

各种电路。对于面包板的使用比较简单。首先如图1-6所示。面包板可以分为上、中、

下三个部分。其中上下两部分相同为窄带部分。中间部分为宽带部分。在使用时,对于

窄带部分是每一行的电压相同,而对于宽带部分是每一列的电压相等。掌握这一点,对

于咱们搭建电路结构非常有帮助。

SmartArduino

图1-6 面包板结构

1.3 搭建实验环境

这一小节是本次实验的重点部分,主要讲了如何搭建软、硬件实验平台。

1.3.1 硬件环境

为了能更加清晰地表示通过实验实现咱们的想法,一般应先在纸上画一个实验的原理

图,在具体操作实验时,就可以安装所画的草稿原理图搭建真实的实验平台。在这里,我们

采用fritzing软件(此软件可在其官网/download/下载)首先给出该实验的

原理图,如图1-7所示。注:虽然原理图非常简单,但为了读者方便,在这还是给出其原理

图。注意:接电路元器件时我们最好能够按照电路的走向来布置咱们的元器件。这样不容易

出错或者少接元器件。

SmartArduino

图1-7 点亮单个LED灯原理图

从图1-7中,咱们可以明显看出需要哪些实验器材了,如图1-8实物所示。

图1-8 实验所需材料

安照图1-7的原理图,很容易搭建本实验的电路图,如图1-9所示。

图1-9 实验真实电路图

1.3.2 软件环境

在首次实验之前,我们需要进行一些简单的设置。当咱们将USB线插入电脑时,电脑会自

动安装驱动程序(本次亲测实验系统为windows 7)。为了验证主板是否故障,一种非常简

单的方法就是选择Arduino自带的例子进行测试,也是第一种最简单点亮LED灯的方法。

1)打开Arduino软件,选择File→Examples→→Blink,如图1-10所示。

SmartArduino

图1-10 简单测试程序

2)选择Arduino平台上的快捷菜单Upload,如图1-11所示。

图1-11 代码Upload(上传)至Arduino

3)选择端口,咱们选择COM 4口,如图1-12。那为什么选择COM4而不是COM3呢?那

我们就需要查看一下到底哪个端口才对应Arduino主板上的端口了。咱们进入“计算机”(或

“我的电脑”)→右击鼠标,选择弹出菜单最后一项“属性”→点击进入“设备管理器”→再双击

“端口(COM和LPT)”,就可以看到Arduino主板原来选择的端口是COM4,如图1-13。

SmartArduino

图1-12 选择COM4

图1-13 找到COM4端口

或者,我们也可以在Arduino软件平台上选择。首先我们需要选择Arduino板子的类型,选

择Tools→Board→选择“Arduino Uno”(我们实验的主板就是这个板子,选择此项时要看咱

们在实验时具体选择Arduino主板的型号),然后再选择Tools→Serial Port→选择COM4。

为什么是COM4?请返回步骤3)。

4)测试结果。若一切顺利,恭喜你,第一个程序实验成功了。你会发现Arduino主板上有

个比较小的LED灯在不停的闪烁,如图1-14所示。为什么会闪烁?闪烁的频率是多少?。。。。

你是不是很多很多为什么要问?别急,后面的程序解析会告诉你。这也是我们第一种最简单

点亮单个LED灯的方法,只要一根USB数据线和一块Arduino主板即可完成。简单吧!这

个简单的例子也可以用来测试你所搭建的软件平台和Arduino主板是否有问题。如果有问

题,LED灯将不会亮。请查看常见故障分析部分。

另外,第一种点亮LED灯的程序与第二种方法是一样的,只是点亮的灯不一样。没错,就

是这句“int led = 13;”说明点亮的是主板上13号灯。后面这种方法我们是随机选了一个8号

灯来点亮。

SmartArduino

图1-14 闪烁的LED

第二种方法:

按照图1-9的方法,我们也可以点亮一个灯,那咱们是不是有个疑问:为什么要那么复杂地

采用这种方法来点亮LED灯呢?其实,这种方法更为灵活,咱们想5号LED灯亮,那咱们

就接Arduino主板上的5号灯,而且咱们还可以方便地更换LED灯的颜色等等。在这,咱

们随机选了8号端口,按图1-9接好电路后,我们开始写程序了,如下Program1所示。

/*

Program1:使连接在8号端口的LED灯以每隔1秒钟的频率不停地闪烁。

*/

// 在本实验中,随机选取8号端口作为LED的输出端口。

// 在使用8号端口之前,我们必须先对它定义。

int Led8 = 8; //定义8号端口

// Void语句块是整个程序的初始化过程,所有需要初始化的内容放在此处

void setup() {

// 初始化Led8为输出端口。

pinMode(Led8, OUTPUT);

}

// loop语句块的作用是让程序一直执行。

void loop() {

digitalWrite(Led8, HIGH); // 点亮Led8 (HIGH 表示高电平,可点亮LED灯。)

delay(1000); // 点亮Led8后,延迟1000ms,也即1s。再执行下面语句

digitalWrite(Led8, LOW); // 使Led8熄灭。

delay(1000); // Led8熄灭后,再延迟1s,返回执行。

}

SmartArduino

图1-15 Program1上传至Arduino主板示意图

将上传Program1的代码拷贝至Arduino的集成开发环境(IDE)后,直接点击上传(upload)

后,若出现在状态栏显示“Done uploading”,表示上传结束并成功。此时,与Arduino主板

连接的8号端口LED灯将以1s的频率不停地闪烁。

代码解析

从这个实例中,我们可以发现:

1) 这个基本的Arduino程序主要有三大块:

i) 变量定义部分:在端口8使用之前,需定义给该端口定义,相当于变量在使用前需

定义一样。定义变量的类型我们在前面Arduino基本语法中定义过。

ii) 初始化部分:有关程序的初始化部分用语句块void setup() {…}来定义。用pinMode

定义端口模式。比如,本实验用pinMode定义led8为输出端口。

iii) 程序执行循环部分:用语句块void setup() {…}来实现。在语句块中,语句

digitalWrite(led8, HIGH)表示向led8输出高电平(HIGH)信号,也即点亮接在8

号端口的LED灯。类似的,LOW表示输出低电平,使LED灯熄灭。语句delay(1000)

是前一状态延迟1000ms,也即1s。

2)相关说明:其中int,void是系统的关键字,loop(),digitalWrite(),delay(),pinMode()

是系统为实现某项功能定义的系统函数,OUTPUT,HIGH,LOW

是系统定义的数值。Led8是

用户自定义的变量。特别需要注意的是,系统定义的关键字和系统定义的数值,他们对大

小写敏感,也即不能随便改变他们的大小写。对于数字信号来说,其值只有高低

(HIGH/LOW)之分,相当于计算机中的0和1.

1.4 本章要点

1) 连接Arduino主板的USB数据线两头分别是USB-A口和USB-B口。

2) LED灯正负性的总体判定准则是:长脚接正极,短脚接负极。若两脚长度一样,看发光

二极管里面,大点接负极,小点接正极。

3) 为了防止LED灯杯击穿,需要串联一个限流电阻。

4) 面包板两边为窄带,中间为宽带。其中窄带的每一行电压相等,宽带是每一列电压相等。

了解这些对于咱们正确布置电路很有帮助。

5) 在做实验之前,先分析电路,画出电路图,然后按照电路图结构动手布置电路。

6) 可以通过Arduino平台自己提供的简单例子(如Blink)测试搭建的实验环境是否正常。

7) 在实验过程中,注意选择的Arduino控制板类型和与Arduino控制板连接的端口号是否

正确。

8) Arduino软件平台对系统自带的关键字、系统函数和常数值大小写敏感。特别注意。

9) 数字信号的数值是离散的,且只有高低(HIGH,LOW)之分。

10) delay()函数里面的数值单位是毫秒(ms)。

SmartArduino

本文标签: 实验端口需要二极管发光