第3课 按钮开关控制电器

我是潘,曾经是个工程师。这是为 Ardui.Co 制作的 “Arduino 公开课” 系列的入门教程。有任何疑问请在评论区提出,我会逐一回答。

几乎所有电器都有开关,“开关”是最基本的人机交互形式。模拟电路时代,用机械开关或者双稳态电路来控制,现在我们要用程序来实现。

第一个程序,按下按钮灯亮 ,延时2 秒后熄灭。下面是接线图:

因为 Arduino 已经板载 LED (13号数字端口),所以这里不再外接了。

按钮开关处有一个10k欧姆的电阻接地,作为“下拉电阻”。所谓下拉是使逻辑信号保持在接近 0V 的状态,确保开关闭合前,是I/O 端口为低电平,反过来,有“上拉电阻”,使逻辑信号保持在高电平。上下拉电阻在后面会经常用到。

一般来说,选用 5K 或者 10K 电阻即可,如果开关闭合,该电阻电流为 5V / 10k 欧姆 = 0.0005A ,对电路几乎没有影响。

delay(500) 的作用是消除抖动,原因下面讲解。

疑问来了:实际应用中,我们更希望按一下开关,灯一直亮,再按一下则关闭,即最常见的单键控制开关,程序如何设计?

程序的思路应该要加一个对灯状态的判断条件:如果灯处于亮的状态,按一下触发低电平,如果灯处于熄灭状态,按一下触发高电平。

第二个程序接线一样,但效果为按一下LED亮,再按一下关闭:

实际的效果:

现在可以解释一下 delay(500) 消除抖动的原理。因为按钮金属片闭合瞬间,可能由于接触不良或者手抖,在非常短的时间内,连续产生多个高电平的逻辑信号。如果没有延时,当Arduino 执行了第一个 if 条件逻辑,但LED还没有完全亮起来时,就进入下 if 条件逻辑灭掉了。

延伸阅读:抖动这对一些精密电器来说是致命的,尤其对使用大量感性原件的电器,会产生高电压震荡,破坏电路。所以加入延时,防止按下去的瞬间产生抖动,防抖动的时间设置在 0.5 到 1 秒之间即可。

现在疑问又来了,Arduino 驱动小 LED 完全没问题,不过,如果是高电压的大功率电器,如家用照明、电机呢?此时,我们需要继电器的帮忙:

不过,Arduino 的驱动电流较小,同时为了防止继电器的感性电路对Arduino的影响,我们通过晶体管开关电路来驱动继电器的线圈,接线如下:

但在航天、军事等严苛的环境下,为了防止干扰、保证稳定性,一般会将数字电路跟模块电路物理区隔的方式来连接,下面这款模块就是通过光耦驱动继电器,实现物理隔离:

模块的接线方式是一样的,我们用它来控制一盏节能灯:

练习1:

希望各位不要仅仅照着教程去做,这样没有意义。Arduino 本质是一个创意玩具,用简单的编程语言实现你的想法。尝试结合第2课的内容做更多的花样出来,我举两个例子:

a. 利用按钮改变一排LED 流动方向。

b. 使用按钮让每个 LED 逐个亮起来。

2 thoughts on “第3课 按钮开关控制电器

Leave a Reply

Your email address will not be published. Required fields are marked *