[教程资源]--[硬件教程]

好好搭搭Arduino编程--超炫七彩灯

2019-07-16 11:21:20  阅读10867


      昨天写的“好好搭搭Arduino编程--点亮LED”24小时点击量就达到了1097,说明大家对硬件编程的关注和渴望。这更激发我写作的信心,今天我们继续LED探索之旅。
      今天我们采用的器件在昨天的基础上增加了一个RGB七彩LED,元器件有:MB-102面包板、Arduino-Nano板、红色LED、RGB七彩LED、100欧电阻、连接线。工具:剥线钳、镊子。

 
      一.继续研究LED驱动方法。
      昨天我们采用D2端口来控制LED亮灭,在端口输出中LED串联了一个100欧电阻来限流,如下图:

      现在我们试验一下,如果不用这个限流电阻会怎么样呢?把电路改成下面所示:

      实验证明,也能正常使用。LED的工作电压是1.8V-2.1V,D2端口输出高电平应该是5V,5V的电压直接加在LED上应该烧坏了,为什么还能正常使用?不符合电路工作原理呀。
      实际上电路中不接限流电阻,LED直接接在D2端口上,D2端口上的输出电压不再是5V而是2V左右了。原因是:Arduino-Nano的芯片Atmega328的端口输出最大电流30ma左右,当电流大于30ma由于引脚内阻原因,端口电压下降而使电流不再增加。这种工作方式是非正常工作模式,容易损坏端口,不建议采用。但也有特殊例子,比如动态扫描显示模式,可以采用这种工作方式。由于动态扫描,LED通电时间短,对芯片不会有很大影响,能保证显示的亮度。
      之前电路我们是用D2端口输出高电平来控制LED,现在我们换一种接法,如下图:

      这种接法,点亮LED程序(源代码:点击打开)如下图:

      大家发现和原来相反了,端口输出高电平LED灭,端口输出低电平LED亮。可以这样分析,当D2端口输出高电平时,LED正极的电压是5V,LED的负极通过电阻与D2端口相连也是5V电压,LED两端电压差为0V,LED不导通,就不亮。如果D2端口输出低电平,LED的负极通过电阻接0V,LED导通发光。这种电路输出叫灌电流驱动 ,这种电路常用于89C51单片机,89C51单片机对外输出电流较小只有0.1ma,但灌入电流可以达到10ma左右,驱动LED就常用灌电流驱动了。当需要多个LED连接 组成器件如RGB彩灯、数码管等,需要把LED的公共极连接在一起,连接方法有正极连在一起和负极连在一起两种,多个LED正极连接一起就叫共阳极接法、负极 连接在一起就叫共阴极接法。共阳极接法就是采用灌电流驱动。
      大家试试用程序控制数字端口D0、D1的输出,D0、D1对应的板载灯是TX、RX,你会发现输出高电平时灭、输出低电平时亮,现在你就知道怎么回事了吧。这两个灯也是采用灌电流驱动方式的。
 
      二.点亮RGB彩灯
      RGB彩灯实物图和原理图如下:

      它实际有三个红、绿、蓝LED组成,三个LED的公共端是负极,负极连接在一起,那这个RGB-LED就是共阴RGB-LED。另一种连接方式就是共阳,三个LED的公共端是正极,正极连接在一起,这就是共阳RGB-LED。
      RGB彩灯共有四个引脚,最长的这个引脚就是公共引脚,公共引脚是第2脚,次长引脚是第3脚。共阴RGB-LED引脚顺序就是1-Rled(红色发光管)、2-GND、3-Gled(绿色发光管)、4-Bled(蓝色发光管)。
 
      点亮RGB-LED。
      如下图连接RGB-LED。

      我们给RGB-LED的1、3、4引脚分别加上5V电压,结果发现亮的只有红色发光二极管,绿色发光二极管和蓝色发光二极管没有如我们设计与想象的那样点亮。原因,如上面图连接,三个发光二极管是并联的,红色发光二极管的导通电压大概是2V左右,而绿色和蓝色发光二极管的导通电压是3V左右。当红色发光二极管接入电路后,并联电路中电压相等,绿色发光二极管和蓝色发光二极管的电压也是2V,没有达到绿色和蓝色发光二极管的导通电压,因此只有红色发光二极管点亮。
      正确接法就如下图:

      我们再次给RGB-LED的1、3、4引脚加上5V电压,就三种颜色LED都发光。
 
      程序控制RGB-LED。
      如下图连接RGB-LED:

      RGB-LED的1、3、4三个引脚接Arduino Nano的D3、D5、D6上(这样连接为了之后更炫的效果),我们用下面程序来控制这三个引脚。(源代码:点击打开)。

      RGB彩灯就可以按照我们的程序设计来发出不同色彩的光了。
 
三.超炫七彩灯
      RGB-LED的1、3、4接在Arduino Nano的D3、D5、D6引脚上,是由于D3、D5、D6引脚拥有PWM功能。看下图:

      上节课我们介绍Arduino Nano已说明,Nano的D3、D5、D6、D9、D10、D11都有PWM功能。PWM可以控制LED灯的亮度、电机的速度。我们可以看下图:

      第一个波形是50 %的时间导通,我们就称占空比为50 %。第二个波形33 %时间导通,占空比就是33 %。第三个波形25 %时间导通,点空比就是25 %。最后一个波形17 % 时间导通,占空比就是17 %。我们从图中可以理解,占空比100 %就相当于完全导通,占空比1 %就是只有完全导通输出能量的1 %了,我们更改占空比就可以调整输出的能量大小。外部接LED,表现形式就是LED的亮度随占空比变化了。
      下面我们试着用程序来控制占空比,调节LED的亮度。(源代码:点击打开)

      上图中就是用“设置PWM口输出”模块来控制引脚上的PWM波型,PWM的设置范围是0-255,有PWM功能的输出引脚有3、5、6、9、10、11。对没有PWM功能的引脚设置PWM值大于127时,就输出高电平;设置PWM值小于等于127时,就输出低电平,不会产生0-255的变化范围的波形。
      我们只要设置第3脚的PWM值,就能控制LED红色光的亮度;设置第5脚的PWM值,就能控制LED绿色光的亮度;设置第6脚的PWM值,就能控制LED发蓝色光的值。
     视频案例的源代码: 超炫七彩灯的源代码,点击打开
      本节课我们进一步学习了LED的使用,LED驱动还可以采用灌电流驱动方式。学习了RGB-LED的工作原理,用数字高低电平控制RGB-LED和采用PWM方式控制RGB-LED。采用PWM方式控制,可以做出超炫的七彩灯,可以生成24位的全彩色。

关于我们 | 联系我们
© 好好搭搭在线 浙ICP备19030393号-1 浙公网安备 33010402003970号