【雕爷学编程】Arduino动手做(56)---8路LED跑马灯模块
37款传感器与模块的提法,在网络上广泛流传,其实Arduino能够兼容的传感器模块肯定是不止37种的。鉴于本人手头积累了一些传感器和模块,依照实践出真知(一定要动手做)的理念,以学习和交流为目的,这里准备逐一动手试试做实验,不管成功与否,都会记录下来---小小的进步或是搞不定的问题,希望能够抛砖引玉。
【Arduino】108种传感器模块系列实验(资料+代码+图形+仿真)
实验五十六: 8路LED流水的灯跑马灯模块SUNLEPHANT
发光二极管
简称为LED。由含镓(Ga)、砷(As)、磷(P)、氮(N)等的化合物制成。当电子与空穴复合时能辐射出可见光,因而可以用来制成发光二极管。在电路及仪器中作为指示灯,或者组成文字或数字显示。砷化镓二极管发红光,磷化镓二极管发绿光,碳化硅二极管发黄光,氮化镓二极管发蓝光。因化学性质又分有机发光二极管OLED和无机发光二极管LED。
LED发光原理
它是半导体二极管的一种,可以把电能转化成光能。发光二极管与普通二极管一样是由一个PN结组成,也具有单向导电性。当给发光二极管加上正向电压后,从P区注入到N区的空穴和由N区注入到P区的电子,在PN结附近数微米内分别与N区的电子和P区的空穴复合,产生自发辐射的荧光。不同的半导体材料中电子和空穴所处的能量状态不同。当电子和空穴复合时释放出的能量多少不同,释放出的能量越多,则发出的光的波长越短。常用的是发红光、绿光或黄光的二极管。发光二极管的反向击穿电压大于5伏。它的正向伏安特性曲线很陡,使用时必须串联限流电阻以控制通过二极管的电流。限流电阻R可用下式计算:
R=(E-UF)/IF
式中E为电源电压,UF为LED的正向压降,IF为LED的正常工作电流。发光二极管的核心部分是由P型半导体和N型半导体组成的晶片,在P型半导体和N型半导体之间有一个过渡层,称为PN结。在某些半导体材料的PN结中,注入的少数载流子与多数载流子复合时会把多余的能量以光的形式释放出来,从而把电能直接转换为光能。PN结加反向电压,少数载流子难以注入,故不发光。这种利用注入式电致发光原理制作的二极管叫发光二极管,通称LED。 当它处于正向工作状态时(即两端加上正向电压),电流从LED阳极流向阴极时,半导体晶体就发出从紫外到红外不同颜色的光线,光的强弱与电流有关。
LED的优点主要有:
1、节能,比白炽灯节能80%以上,比节能灯节能50%以上。
2、体积小,重量轻,不怕震动。
3、光效高,是白炽灯15m/w的8倍,是荧光灯50 Lm/w的2倍多。
4、光色可选择,LED光源的发光颜色和色温都可以灵活应用。
5、.方向性好,LED发光角度可以灵活调整。
6、环保:没有节能灯所含的汞等有害物质。
7、.冷光源无紫外线和红外线,故没有热量,没有辐射。
8、寿命长,寿命可达5万-10万小时比传统光源寿命长10-50倍以上。
9、.响应速度快,纳秒级。
LED的缺点:
1、散热问题,LED在电致光的过程中另外一部分能量转化成热量,如无法及时散发出去,PN结的结温将会升高,加速芯片和封装树脂的老化,使芯片失效,影响LED的使用寿命与发光表现。
2、防水性能差,是户外使用的一个致命弱点光源内部吸水后内部金属氧化影响输出或产生内应力、荧光粉吸潮变色,光色漂移。
3、成本较高.光源.散热器.电源.高透灯罩/透镜/反射罩.四者成本集体推高LED成本。
4、需要驱动器提供恒流电源,驱动器寿命是影响灯具寿命的重要因素。
5、半导体器件,对静电影响比较敏感,易被静电击穿PN结导致漏电流或死灯。
LED发光二极管特性
1、极性
发光二极管的两根引线中较长的一根为正极,应接电源正极。有的发光二极管的两根引线一样长,但管壳上有一凸起的小舌,靠近小舌的引线是正极。
LED单向导通性,LED只能往一个方向导通(通电),叫作正向偏置(正向偏压),当电流流过时,电子与空穴在其内复合而发出单色光,这叫电致发光效应,而光线的波长、颜色跟其所采用的半导体材料种类与掺入的元素杂质有关。具有效率高、寿命长、不易破损、开关速度高、高可靠性等传统光源不及的优点。白光LED的发光效率,在近几年来已经有明显的提升,同时,在每千流明的购入价格上,也因为投入市场的厂商相互竞争的影响,而明显下降。虽然越来越多人使用LED照明作办公室、家具、装饰、招牌甚至路灯用途,但在技术上,LED在光电转换效率(有效照度对用电量的比值)上仍然低于新型的荧光灯,是国家以后发展民用的去向。
2、适合做光源与信号显示器
与白炽灯泡和氖灯相比,发光二极管的特点是:工作电压很低(有的仅一点几伏);工作电流很小(有的仅零点几毫安即可发光);抗冲击和抗震性能好,可靠性高,寿命长;通过调制通过的电流强弱可以方便地调制发光的强弱。由于有这些特点,发光二极管在一些光电控制设备中用作光源,在许多电子设备中用作信号显示器。把它的管心做成条状,用7条条状的发光管组成7段式半导体数码管,每个数码管可显示0~9,10个阿拉伯数字以及A,B,C,D,E,F等部分字母(必须区分大小写)。
3、主要参数
LED的光学参数中重要的几个方面就是:光通量、发光效率、发光强度、光强分布、波长。
4、发光效率和光通量
发光效率就是光通量与电功率之比,单位一般为lm/W。发光效率代表了光源的节能特性,这是衡量现代光源性能的一个重要指标。
5、发光强度和光强分布
LED发光强度是表征它在某个方向上的发光强弱,由于LED在不同的空间角度光强相差很多,随之而来我们研究了LED的光强分布特性。这个参数实际意义很大,直接影响到LED显示装置的最小观察角度。比如体育场馆的LED大型彩色显示屏,如果选用的LED单管分布范围很窄,那么面对显示屏处于较大角度的观众将看到失真的图像。而且交通标志灯也要求较大范围的人能识别。
6、波长
对于LED的光谱特性我们主要看它的单色性是否优良,而且要注意到红、黄、蓝、绿、白色LED等主要的颜色是否纯正。因为在许多场合下,比如交通信号灯对颜色就要求比较严格,不过据观察我国的一些LED信号灯中绿色发蓝,红色的为深红,从这个现象来看我们对LED的光谱特性进行专门研究是非常必要而且很有意义的。
直针8路流水灯、跑马灯模块单片机外扩模块
模块规格:
1.PCB尺寸:47mm(长)*19mm(宽)*1.6mm(厚)
2.LED:5mm红发红发光二极管
3.排阻阻值470欧姆或者1000欧姆
模块电原理图
/* 【Arduino】168种传感器模块系列实验(56) 实验五十六: 8路LED流水灯跑马灯模块SUNLEPHANT */ int BASE = 6 ; int NUM = 8; void setup() { for (int i = BASE; i < BASE + NUM; i ++) { pinMode(i, OUTPUT); } } void loop() { for (int i = BASE; i < BASE + NUM; i ++) { digitalWrite(i, LOW); delay(200); } for (int i = BASE; i < BASE + NUM; i ++) { digitalWrite(i, HIGH); delay(200); } }
/* 【Arduino】168种传感器模块系列实验(56) 实验五十六: 8路LED流水灯跑马灯模块SUNLEPHANT 程序之二,流水灯效果:全灭的灯逐个往一边点亮,再逐 个往开始端灭掉,循环即可,当然也可以其它效果,可自己设定 */ int led1 = 6; int led2 = 7; int led3 = 8; int led4 = 9; int led5 = 10; int led6 = 11; int led7 = 12; int led8 = 13; int i; void setup() { for (i = 6; i < 14; i++) { pinMode(i, OUTPUT); } } void loop() { for (i = 5; i < 14; i++) { digitalWrite(i, HIGH); delay(100); } for (i = 13; i > 5; i--) { digitalWrite(i, LOW); delay(100); } }
/* 【Arduino】168种传感器模块系列实验(56) 实验五十六: 8路LED流水灯跑马灯模块SUNLEPHANT 程序之三,控制多个LED实现多种闪烁效果 */ intled1 =6; intled2 =7; intled3 =8; intled4 =9; intled5 =10; intled6 =11; intled7 =12; intled8 =13; intn; void setup() { for(n=6;n<=13;n++) { pinMode(n, OUTPUT); } } void loop() { turn1(); clean(); turn2(); clean(); turn3(); clean(); } void turn1() { for(n=6;n<=13;n++) { digitalWrite(n,HIGH); delay(300); } for(n=6;n<=13;n++) { digitalWrite(n,LOW); delay(300); } } void turn2() {for(intx=0;x<=2;x++) { for(n=6;n<=13;n++) { digitalWrite(n,HIGH); } delay(300); for(n=6;n<=13;n++) { digitalWrite(n,LOW); } delay(300); } } void turn3() { for(intx=0;x<=2;x++) { digitalWrite(6,HIGH); digitalWrite(7,HIGH); for(n=8;n<=13;n++){ digitalWrite(n,LOW); } delay(300); digitalWrite(10,HIGH); digitalWrite(11,HIGH); digitalWrite(6,LOW); digitalWrite(7,LOW); digitalWrite(8,LOW); digitalWrite(9,LOW); digitalWrite(12,LOW); digitalWrite(13,LOW); delay(300); digitalWrite(12,HIGH); digitalWrite(13,HIGH); for(n=6;n<=11;n++){ digitalWrite(n,LOW); } delay(300); } } void clean() {for(n=6;n<=13;n++) { digitalWrite(n,LOW); } delay(300); }