点个 LED 闪亮好像太单调,这次来个光控 LED 灯。这个其实不需要 Arduino 也能做,这次只是用来演示一下 PWM 在 Arduino 里面的做法。PWM 原理后面会解释。这次用充电宝提供 5V ,对四个 LED 供电,NPN 三极管作为开关用,Arduino 接基极发 PWM 控制亮度,另外 PWM 是从光敏电阻取值而发出。就是说,通过 Arduino,环境变暗,LED 就越亮的一个控制。

这一篇主要是针对新学的朋友们,讲解或者回顾一下基本知识点。

需要的材料

整个光控灯我们需要以下材料完成:

Arduino Mini Pro 3.3V 1 PCS
LED 白色,直插 4 PCS
排母 12孔 2 PCS
电阻 47 欧 1 PCS
电阻 4.7K 欧 2 PCS
光敏电阻 47K 欧 1 PCS
NPN 三极管 2N3904 1 PCS
充电宝 任何牌子 1 PCS
USB 座 直插,母 1 PCS
USB 头 自组装 2 PCS
单股电线 线芯 0.5MM 若干
万用板 单面木质 1 PCS
外壳 PVC/ABS 板自制 1 PCS

因为QQ群里发起了投票,发现有不少朋友们希望了解基本知识,所以加入以下新手专用的理论部分。如无兴趣请直接跳过。

原理简单介绍 - 新手专用

我认为这些知识以及它们的物理原理,是需要看书的,这里只是简单描述一下。

1. 电路

电路,不管是数字还是模拟,都是一个个回路组成,特别注意是回路,是一个圈。不是回路,就无法导通,电信号或电能不能通过。

举例,TTL 不供电时候我们只接了 TX 和 RX 两条信号线,是无法通讯的,必须加上 GND 地线,至少三条线。可以想作,TX 发出电信号,电能从 GND 回路回来,RX 接到电信号,电能从 GND 回去。

2. 通路、开路、短路

电路有三个状态,通路、开路、短路。通路顾名思义是正常导通有电流的回路,开路是电路断开不能导通没有电流的,而短路是指,电源供应直接连到电源的地而中间没有负载。

短路因没有负载,电流会一口气从源头涌往地端,造成巨大电流。从导体来看,巨大电流从没有负载的导体比如电线流过时,电线无法承受而转化电能为热能释放,造成各种灾害。从电源来看,一瞬间释放大量电流,供电源有可能也承受不了,同样会造成灾害。

3. 电压、电阻、电流

电压,符号 V (Voltage),计量单位为伏(V),是指电路里面两个点的电势差;电阻,符号 R(Resistance),计量单位为欧姆(Ohm),是电流通过导体时遇到的阻碍;电流,符号 I (Idensity of Current),计量单位为安培 A(Amp),是表达导体切面中电子流过数量的值。人们常用水流类比,一个水桶满载液体,底部以水管连接到另一个空水桶。两个水桶水压差异导致水往空的水桶流动,类比电势差;水管内材质形状长度影响水流阻力,类比成电阻;水流在水管其中一个部分切面流过的水分子数量(速度),类比成电流。

如用一节 1.5V 电池点亮的灯,我们会发现到了后段快没电时候,灯会变暗然后慢慢熄灭,原因是,电池的正负极电势差慢慢趋向零。情况类比到上面水桶说法就是,两个桶的水量渐渐趋向相同,水就不再流动了。

从上可以看到电压电阻与电流,在电路中是有一定关系的。欧姆定律就是描述这个关系的一个公式,详见百度百科或书本资料。

I = V / R

我们下面会运用到这一公式来做些计算。

4. 交流电与直流电

交流电 AC (Alternating Current)是指电流的方向随着时间有周期性变化的电流。家用电插座是 220伏 50Hz 的交流电,50Hz 意思是每秒五十个周期,正反方向流动一组为一个周期,意思在一秒内电流方向变换了一百次。具体详见百度百科或看书之类参考。

直流电 DC (Direct Current)是指电流的方向不会变化的电流,它还细分了很多种,比如恒定电流是指方向与电流大小都不会变化的电流。详见百度百科或看书之类参考。

本次实验是一个直流电的电路。

5. 发光二极管 LED (Light Emitting Diode)

发光二极管是二极管的一种,当然,正常工作时候会发光。

二极管其中一个特性是在正常工作电压下单向导通,它在原理图的符号形状很好地描述此一特性。也因此单向导通特性,市电交流电电路里面是无法使用 LED 的。虽然说单向导通,但电压再加大时候,是可以反向击穿的。另外,所谓正常工作电压,意思是你供给的电压如果低于它,它是不会工作的。

发光二极管是电流流过时,光子释出,发出特定波段的光。所谓特定波段,也包括了不可见的红外线。LED 有两个重要参数,一是它的工作电压,二是最大能承受的最大电流。电流越大 LED 越亮,但超过一定电流值的话它会烧毁。

不同的 LED 他们的工作电压是不一样的。就算外形看起来一样的我们实验用到的小草帽型 LED,不同颜色的工作电压也有所不同。还有高亮的 LED 灯珠也有不同的最大流限制。使用前,务必查看清楚,以免造成损坏。

基本理论仿真实验 - 新手专用

首先我们用 Multisim 软件,做简单的仿真,看看以上关于 LED 的特性。

我们从二极管分类里面找到了 LED,选个红色,看看这个界面:

大家可以看到右侧中间位置 Function 窗口有个 Vf = 1.83V @ 20mA 的一句话。意思是它的工作电压最大是 1.83V ,而最大电流是 20mA(即 0.02 A)。我们试试给 1V ,电路加个探针然后开始仿真,看看什么情况:

你会看到 LED 那两个往外代表发光的箭头是空心的,代表没有点亮。然后我们按停止仿真,把直流电源改为 5V,再启动仿真看看:

如果 Multisim 仿真可以做个烧毁的动画图就更好了。这次,它发光的箭头红色了,但注意一下探针读数,1.11kA(即 1110 A)。家用电磁炉功耗够大了也才 7A 左右,这一千多安培能一瞬间烧毁 LED。

为了阻止大量电流,我们加入一个电阻,限制电流在电路里面的流动。运用欧姆定律计算,如下:

I = V / R

0.02 A = (5V – 1.83V) / R

R = 158.5 Ohm

我们就加入一个 158.5 Ohm 电阻器,再次启动仿真看看:

可以看到,探针读数 1.83V 20mA。加入了电阻器作为限制电流,LED 就正常工作了。如果我们把电阻加大,电流减少,LED 虽然能发光但会变暗。Multisim 的 LED 参数里面有控制最小能发光的电流,是 5 mA。我们把电阻改为 220 Ohm (Arduino 官网例子就是用这个值的电阻),再启动仿真看看:

你会发现它电压读数有所减少,而电流变成了 14.5mA。同样能点亮。

然后这次,我们看看蓝色的 LED 是怎样的参数:

3.45V @ 20mA,如果我们用蓝色,电阻的值就是:

(5V – 3.45V) / 0.02 A = 77.5 Ohm

本次实验的并联 LED - 新手专用

这次来点实际的,本次实验中用到的四颗 LED 并联情况,直接上公式,看看仿真:

(5V – 3.45V) / (20 mA x 4)= 19.375 Ohm

由于是四颗并联(注意不是串连),以上电流值是需要乘以 4。我们得到所需要的电阻为 19.375 Ohm。

第一个探针的值是总的电流,第二个探针是流到其中一个 LED 的电流。由于四路的负载相同,他们分得的电流也是相同,对电压无影响。这是最高亮度的安全情况了。各位有兴趣的,可以思考一下,把其中一个 LED 改为红色,保持全部 LED 每颗获得 20mA 应该怎么做。

然后,确定了阻值,我们可以搭建实物了。第一个问题来了,仿真归仿真,现实世界的实物中,19.375 欧姆的电阻哪里找来呢?

其实电子世界存在很多误差,要生产出精确无误而且不受温度影响的电阻是非常高难度和高成本。一般我们买到的直插电阻,特别是新手包套装套件那种,误差可能达 10%。另外 LED 所谓的标称工作电压,也不一定那么准确。再说你的电源,也不一定精确无误地提供 5V 稳定电源。所以,我们计算时候,都是以范围来估算,所以各位在各种情况看到的数据手册,很多值都是以范围标示。

电阻的值,百分之十误差来说,我们看看为了保持电流在 20mA 或以下我们应该怎么选:

R x 90% = 19.375 Ohm

R = 21.5278 Ohm

我们知道阻值越高电流越少。在使用蓝色 LED 时,我们选10% 误差的电阻,超过以上标称阻值的(估算结果 21.5278 Ohm),就是安全了。我们实物的电阻,找个比这值大的最接近值即可。我家里最接近的就 47 Ohm,我就那个来搭。

实物的 LED,具体参数请找厂家卖家,或者网上搜索获得。

实物电路与仿真相同,只是照片里的电阻放了在负极。

用5V 电源接通后的效果如上图。

最后一点,是否超过 20mA 比如 22mA 的电流,LED 就会挂呢?答案是否定的,至少你不会马上看到它烧毁。但厂家写了最高电流,你却在使用过程中长期超过,LED 的寿命就可能会缩短。

总结

以上就是组成 LED 部分最基本的电路。这电路还没加入灯的开关,没有探测室内光线亮度的电路,当然也没加上 Arduino。下一篇,我们先看看光敏电阻怎样用。

欢迎加入我们的大家庭  点击加入 Arduino 硬创联盟,群号 8580606

参考

实用电子元器件与电路基础 第三版

电子工业出版社,ISBN:9787121223785

模拟电子技术基础 第五版

高等教育出版社,ISBN:9787040425055

电子元器件的选择与应用

科学出版社,ISBN:9787030165060

电路基础(英文版 第五版)

机械工业出版社,ISBN:9787111411840

Multisim 12.0 软件

http://www.ni.com/multisim/

Arduino 极速入门系列 - 光控灯(1)- 关于理论和 LED 那些事的更多相关文章

  1. Arduino 极速入门系列 - 光控灯(3) - 光敏电阻、与电阻分压那些事

    继续是讲解基础原理,新手专用部分.这次讲光敏电阻,和用电阻分压.光电元器件有好几种,其中测光相关的元器件,常见的有光敏三极管和光敏电阻,我们这次光控灯用光敏电阻.在我们光控灯里面,将会使用它搭建出分压 ...

  2. Arduino 极速入门系列 - 光控灯(2) - 关于开关,上拉、下拉电阻那些事

    接上篇,这次继续讲解光控灯的另外两个组成部分 - 开关和光敏电阻,光控灯里面将会有自锁开关按钮和光敏电阻.这此主要给新玩电子的朋友解释一下开关按钮的做法. 开关按钮的引脚电平读取问题 - 新手专用 我 ...

  3. Arduino 极速入门系列–1 点亮 LED

    本篇内容为,使用 Arduino 点亮 LED 的做法示范.很简单的一个入门示范.我们让 LED 闪. 本篇使用到的工具和材料 Arduino Mini Pro 1 PCS Mini USB 数据线 ...

  4. ASP.NET AJAX入门系列(4):使用UpdatePanel控件(一)

    UpdatePanel可以用来创建丰富的局部更新Web应用程序,它是ASP.NET 2.0 AJAX Extensions中很重要的一个控件,其强大之处在于不用编写任何客户端脚本,只要在一个页面上添加 ...

  5. SpringCloud系列之分布式配置中心极速入门与实践

    SpringCloud系列之分布式配置中心极速入门与实践 @ 目录 1.分布式配置中心简介 2.什么是SpringCloud Config? 3.例子实验环境准备 4.Config Server代码实 ...

  6. 03.Web大前端时代之:HTML5+CSS3入门系列~H5功能元素

    Web大前端时代之:HTML5+CSS3入门系列:http://www.cnblogs.com/dunitian/p/5121725.html 2.功能元素 1.hgroup 对网页或区段(secti ...

  7. 06. Web大前端时代之:HTML5+CSS3入门系列~HTML5 画布

    Web大前端时代之:HTML5+CSS3入门系列:http://www.cnblogs.com/dunitian/p/5121725.html 我们先看看画布的魅力: 初始画布 canvas默认是宽3 ...

  8. WPF快速入门系列(8)——MVVM快速入门

    一.引言 在前面介绍了WPF一些核心的内容,其中包括WPF布局.依赖属性.路由事件.绑定.命令.资源样式和模板.然而,在WPF还衍生出了一种很好的编程框架,即WVVM,在Web端开发有MVC,在WPF ...

  9. 快速入门系列--WebAPI--01基础

    ASP.NET MVC和WebAPI已经是.NET Web部分的主流,刚开始时两个公用同一个管道,之后为了更加的轻量化(WebAPI是对WCF Restful的轻量化),WebAPI使用了新的管道,因 ...

随机推荐

  1. 生产/消费 发送和接收消息---基于kombu和redis交互

    from kombu import Connection, Exchange, Queue media_exchange = Exchange('media', 'direct', durable=T ...

  2. python入门到精通[二]:基础学习(1)

    摘要:Python基础学习: 注释.字符串操作.用户交互.流程控制.导入模块.文件操作.目录操作. 上一节讲了分别在windows下和linux下的环境配置,这节以linux为例学习基本语法.代码部分 ...

  3. JS/JQ获取各种屏幕的高度和宽度

    Javascript: 网页可见区域宽: document.body.clientWidth网页可见区域高: document.body.clientHeight网页可见区域宽: document.b ...

  4. java 日期转时间戳,时间戳转为日期

    package date; import java.text.ParseException;import java.text.SimpleDateFormat;import java.util.Dat ...

  5. 注册Jdbc驱动程序的三种方式

    注册Jdbc驱动程序的三种方式 1. Class.forName("com.mysql.jdbc.Driver"); 2. DriverManager.registerDriver ...

  6. 使用Git、Git GUI和TortoiseGit

    1. 关于命令行 我一直建议在命令行中使用Git或者SVN.因为这样可能更加了解他们的工作方式,也不容易遗漏重要的问题和提醒. 在Windows习惯的驱使下,大多数人是不会看弹出的对话框中有什么信息的 ...

  7. asp.net sqlite 当插入数据后的第一次访问会变的很慢!

    <add key="ConnectionStringSQLite" value="data source=|path|DB/XXX.db;Version=3;&qu ...

  8. .NET 泛型分析

    .NET 泛型解析 一.问题背景 我们在编程的时候往往因为需要处理不同类型的数据或者对象,重复编写很多类似的代码,造成代码的冗余,代码也显得不那么优雅,泛型的出现,正好是为了解决这个问题,实现继承. ...

  9. 【笔记】css hover 伪类控制其他元素

    最近在模仿一个网站的项目 当中有一个效果需要利用到hover效果因为不太想写jq脚本所以百度了一下css hover的运用发现原来hover也可以控制其他元素的变化的 但是这有一个要求 就是添加hov ...

  10. percona server 二进制安装下编译tpcc-mysql的坑

    出于习惯,percona server的部署都是通过二进制包自动化安装,结果遇到一个硕大无比的坑,编译TPCC-MySQL时出现警告 10:49:36 root@DB-Master:~/tpcc-my ...