Arduino初学系列3:Arduino,按键,LED
- 格式:pdf
- 大小:571.18 KB
- 文档页数:6
3 Arduino,按键,LED
3.1 问题描述:如何采用Arduino控制器和按键同时控制LED的闪烁
在前面的2个例子中,都是简单地通过将程序烧录到Arduino控制板,然后由控制板来控制LED灯的闪烁,缺乏人情味。那能不能在Arduino控制的过程中,再加上与人的互动呢?答案是肯定的。在这个实验中,我们将增加一个新的材料按键按钮来和Arduino一起控制灯的闪烁。
3.2 所需材料
表3-1:所需材料
序号名称数量作用备注
1 Arduino软件1套提供IDE环境最新版本1.05
2 Arduino UNO开发板1块控制主板各种版本均可
3 USB线1条烧录程序随板子配送
4 杜邦线若干条连接组件
5 发光二极管(LED)1个 LED闪烁
6 电阻(10,200Ω)2个限流
7 多功能面包板1块连接
8 按键按钮1个开关
在进行实验之前,我们先介绍按键按钮的相关属性。
按键按钮
按键是一种经常使用的设备,通过按键可以输入指令和数据来控制电路的开与关,从而达到控制某些设备的运行状态。在本实验中,通过给按键输入高低电平来控制LED灯的闪烁。开关的种类繁多复杂,比如厨房用的单孔开关,卧房用的双控开关,楼道用的声控开关等等,均属于开关的范畴。在我们实验中,主要是用微型开关,但其种类也很多,如图3-1所示。
图3‐1 微型按键开关种类
在本实验中采用的微型开关大致为6*6*5mm的四脚开关。如图3-2所示。
图3-2 本实验用的按键
值得注意的是,1和2是一边的,3和4是一边的,中间有道痕分开。其原理如图3-3所示,当按键按下去时,1,2,3,4四个管脚接合在一起,2根导线连通,变成一根导线。电路导通,起到触发(关)作用。当松开按钮,1,2,3,4四个管脚断开,起到开的作用。
图3‐3 按键按钮原理图
3.3 实验原理图
当按键按钮按下,获取一个高电平,触发在Arduino控制下的LED闪烁。当然,我们也可以设置为按键按下是LED灯不亮,当松开按键时,LED灯闪烁,请看后面的代码分析。原理图如3-4所示,就是在实验1的基础上增加一个按键按钮。
其实际电路如图3-5所示。
图3-5 电路图
当我们按照图3-5接好电路后,运行Program 3。
01 //Program 3: 按键控制Arduino板上的LED灯
02
03 int led8=8;//设置LED位于Arduino的数字IO端口8
04 void setup()
05 {
06 pinMode(led8,OUTPUT);//设置数字端口8为输出模式
07 }
08 void loop()
09 {
10 int i;//为按键设置接收电压的变量i
11 i =analogRead(0);//读取模拟端口0处电压值赋给i
12 if (i >512)//设定门限值,若接收到的电压值大于512(即2.5V )
13 {digitalWrite(led8,HIGH);//设置数字端口8为高电平,即点亮led 灯 14 delay(2000);}//保持点亮状态2s
15 else
16 digitalWrite(led8,LOW);//若电压值低于512,端口8为低电平,led 灯熄灭 17
18 }
此时,当你按下按键时,LED 灯将被点亮。但是,当你松开按键(或者用手拿着杜邦线的一端),LED 灯还是亮的,如图3-6所示。
图3-6 手拿杜邦线,LED 灯亮
这主要是因为人体或者外界存在一定的干扰,使得即使没有按下按键LED 灯还是会亮。这是因为通常的按键所用开关为机械弹性开关,当机械触点断开、闭合时,由于机械触点的弹性作用,一个按键开关在闭合时不会马上稳定地接通,在断开时也不会一下子断开。因而在闭合及断开的瞬间均伴随有一连串的抖动。抖动时间的长短由按键的机械特性决定,一般为5ms ~10ms 。这是一个非常重要的参数,如图3-7所示。
图3-7 按键抖动现象
SmartArduino
SmartArduino
为了避免做出误判,必须消除这种现象,这就是按键消抖。消抖的方法有很多,主要从硬件和软件两个方面。但值得指出的是,即使我们将Program 3中的电压门限值设置为比512 (512是pwm值,我们将在下面的章节中详细介绍)还要大,抖动还是会出现。笔者试着将i设置为1000,还是会出现按键没有按下(或者手拿着杜邦线的一端),LED灯还是会亮。所以必须从原理上解决这一问题。
方法一、硬件消抖
首先,我们分析一下为什么会出现抖动现象。当按键没有按下(也即断开),如图3-5、3-6中,模拟端口A0断开还是有电压值(>512),说明外界或者人体是存在一定的干扰信号。这种干扰信号用电压值表示的话,是可能大于512的。所以会出现按键没有按下LED灯也会被触发点亮。所以,我们可以在图3-3所示的1和2或3和4之间并联一个所谓的下拉电阻。即可使得按键没有按下,外界的干扰电压被消耗在了下拉电阻上了,从而使得LED灯不会被点亮,在按键没有按下的情况下。增加下拉电阻后的电路如图3-8所示。从图中可以清楚地看出,当按键断开时,外界的干扰电压被屏蔽掉了。所以,按键断开LED灯不会被
点亮。当按图3-9连接电路图后,运行Program 3,按下按键,LED灯即可被点亮。
SmartArduino
图3-9 增加下拉电阻的电路图
补充:下拉电阻
如图3-10所示,上部的一个Bias Resistor电阻因为是接地,因而叫做下拉电阻,意思是将电路节点A的电平向低方向(地)拉。下拉电阻的主要作用是与上接电阻一起在电路驱动器关闭时给线路(节点)以一个固定的电平。
图 3-10 下拉电阻
第二种方法:软件消抖
软件消抖的原理:因为按键按下后,一般有5-10ms的抖动,所以可以通过软件设计延时5-10ms,让抖动在这段时间内消失。然后再检测是否还是为高电平,若是,则判断为高电平(在本例中按下为高电平)。在按键断开也是一样的原理。断开后延时5-10ms,若为低电平表示按键断开,若还为高电平,则表示没有断开。软件消抖的方法比较简单,就是通过延时5-10ms再进行判断,做出选择。这种方法比较适合于多按键的情形,因为布置下拉电阻还是比较繁琐。但是,有时候这种方法不一定准确,比如笔者在做这个实验时,就发现不接下拉电阻的话,不管延时多长时间,LED灯都一直是点亮状态。
一般来说,是将软件和硬件方法两种结合起来使用会有更好的效果。