友情提示:380元/半年,儿童学编程,就上码丁实验室。
我是潘,曾经是个工程师。这是 “Arduino 公开课” 系列的入门教程。有任何疑问请在评论区提出,我会逐一回答。
第4课介绍了用两个按钮控制LED亮度,按一下LED 亮度增/减一个层级,但怎样才能器连续调节亮度?我们自然想到了电位器,但电位器是一个模拟元件,Arduino 怎样才能接收模拟信号?同时,除了利用按钮、电位器,怎样才能让 LED 随着环境光照而自动、连续地调节亮度?
为了实现这些功能,这次要用到的是 Arduino 上的 Analog I/O(模拟端口,Uno 一共有6个,标记为 A0 ~ A5)。这些端口都可作为 ADC (模拟/数字转换)使用,能够读取 0 ~ 5V 的电压,并转换为0~1023 级别的数字信号。
现在我们利用分压电路,让电位器中间引脚输出 0 ~ 5V 连续可调电压,然后通过模拟端口 A0 读取,从而控制 LED 的亮度变化。电路如下:
电位器阻值选择 20K~100K,在其两端分别接地和 5V 端口,中间引脚接 A0,LED 接具备 PMW 功能的9号数字端口,接线图:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
|
/*
作者:Ardui.Co
效果:电位器控制LED亮度
版本:1.0
更新时间:2017年1月7日
*/
intLight=9;// 定义9号数字端口为外接 LED 接口,须有 PWM 标记的端口
intPot=A0;// A0模拟端口为电位器中间引脚
intn=0;// 初始化LED亮度为0
voidsetup(){
pinMode(Light,OUTPUT);
pinMode(Pot,INPUT);//读取Pot端口的电压
}
voidloop(){
n=analogRead(Pot);
analogWrite(Light,n/4);//将 0~1024 转换为 PWM端口参数值 0~255
}
|
从视频看到 LED 连续可调且很亮度变化十分平滑:
思考一下:Arduino Uno 模拟端口能读取模拟信号,能否也输出模拟信号?
现在只要简单改装一下电路,将电位器换成光敏电阻,就能让 LED 根据环境光的强弱,自动调节亮度。
扩展阅读:所谓光敏电阻是当有光线照射时,电阻内原本处于稳定状态的电子受到激发,成为自由电子。光线越强,自由电子越多,电阻值越小。by wiki
原理很简单:当光线变强,光敏电阻阻值变小,A0 电位就将低,LED变暗:
智能家居中,我们希望室内光线,保持在合适的亮度,白天灯变暗,晚上变明亮,或者让Arduino 更具阳光控制窗帘升降,这些在 Arduino 中都能简单地实现。