Arduino入门教程--第六课--电位器PWM控制LED亮度
线性电位器是一个模拟量的电子元器件,模拟量和数字量有什么区别呢?简单的说,数字量只有0和1两种状态,对应的就是开和关,高电平和低电平。而模拟量则不一样,他的数据状态呈现线性状态例如1到1000。所以,本次试验我们采用电位器对LED调光,这样不会像上一次按钮实验那样,亮度的变化有层级的跳跃,用电位器调光的话能够比较连贯柔和。
元器件列表:
ocrobot mango控制板(Arduino兼容)一块
面包板一块
面包板专用跳线一盒
220欧姆电阻一个
100Ω-10kΩ线性电位器一个
任意颜色LED一个
USB数据线一条
下面我们来看电路连接图
我们看到我们将电位器接入了arduino控制板的A0模拟量检测口,arduino的模拟接口能够测量0-5V的电压,对应的返回值为0-1024,对电压变化的测量精度相对较高。
然后我们参照电路图来搭建实验电路
注意:本次试验我们使用的是精密线性电位器,电位器最好选用绕线的精密线性电位器,因为市面上的廉价的非线性电位器做这种实验时,数值漂移大,容易造成led闪烁,电阻成非线性变化,亮度变化不明显,容易产生和按钮调光实验那种层级感,影响试验效果。
然后我们将实验源代码编译下载到mango控制板中:/*
作者:极客工坊
时间:2012年6月7日
IDE版本号:1.0.1
发布地址:www.geek-workshop.com
作用:通过精密线性电位器PWM控制led亮度
*/
void setup()
{
pinMode(11,OUTPUT); //数字口要选择带#号的具有pwm功能的输出口
}
void loop()
{
int n = analogRead(A0); //读取A0模拟口的数值(0-5V 对应 0-1204取值)
analogWrite(11,n/4); //PWM最大取值255所以将模拟口的取值n除以4
}以下是我们的实验视频, 在视频中看到led微微闪烁是因为摄影机的帧率,恰好耦合了led的频闪速率造成的。。肉眼看是无闪烁的
http://player.youku.com/player.php/sid/XNDA2MjAxODQ4/v.swf
==========分割线 下面为扩展阅读==========
本次实验所用到的语法请点击关键字进入极客工坊WIKI查看,词条内容在WIKI中不定期更新。
void
setup()
loop()
pinMode()
analogWrite()
analogRead()
int
<一一巛 发表于 2013-3-4 12:42 static/image/common/back.gif
交作业
int n=0;
void setup() {
PotBuffer = analogRead(Pot); //读取AD值
PotBuffer = map(PotBuffer, 0, 1023, 0, 255); //把AD值0-1023 缩放为 0-255
直接用map映射 PotBuffer = analogRead(Pot); //读取AD值
PotBuffer = map(PotBuffer, 0, 1023, 0, 255); //把AD值0-1023 缩放为 0-255
学习来了,程式真简洁 小白求教:
void setup()
{
pinMode(9,OUTPUT);
pinMode(10,OUTPUT);
pinMode(A0,INPUT);
pinMode(A1,INPUT);
}
void loop()
{
int i = analogRead(A0);
analogWrite(9,i/4);
int j = analogRead(A1);
analogWrite(10,j/4);
}
想控制两个灯,这样写为什么是两个等一起亮,我的本意是分别调的。 热火 发表于 2012-7-26 21:53 static/image/common/back.gif
小白求教:
void setup()
电位器的红色线插5V 其他两根线一个插a0一个插a1这样就可以一个暗一个亮,不知道你的分别是什么意思,求详解 迷你强 发表于 2012-7-27 08:11 static/image/common/back.gif
电位器的红色线插5V 其他两根线一个插a0一个插a1这样就可以一个暗一个亮,不知道你的分别是什么意思,求详 ...
你的意思是我的程序是没有问题的是吗。我是想用两个电位器来控制两个灯。 热火 发表于 2012-7-27 20:39 static/image/common/back.gif
你的意思是我的程序是没有问题的是吗。我是想用两个电位器来控制两个灯。
两个应该也没问题啊。。 请问迷你强老师,根据代码注解,这个A0模拟口(0-5V对应0-1204),那么是否表示除以4仍有可能超过PWM最大取值255?那么会损坏元器件么? yuanlv77 发表于 2012-9-7 09:40 static/image/common/back.gif
请问迷你强老师,根据代码注解,这个A0模拟口(0-5V对应0-1204),那么是否表示除以4仍有可能超过PWM最大取 ...
迷你强老师,貌似这A0模拟口1204和WIFI里写的有出入啊。 yuanlv77 发表于 2012-9-7 09:50 static/image/common/back.gif
迷你强老师,貌似这A0模拟口1204和WIFI里写的有出入啊。
应该是0-1023 这1024个值。。。这样就对了吧。。。我小白。。。。。 好东西,顶! yuanlv77 发表于 2012-9-7 09:40 static/image/common/back.gif
请问迷你强老师,根据代码注解,这个A0模拟口(0-5V对应0-1204),那么是否表示除以4仍有可能超过PWM最大取 ...
额 int型取整 1024/4 最大就是255了 我也有过这想法 这句话对吗
"对应的返回值为0-1024"
我感觉是0-1023呢
因为1111111111的二进制转换为十进制刚好是1023
而并非1024
请 老大 查证,谢谢 peter13447 发表于 2013-2-18 11:39 static/image/common/back.gif
这句话对吗
"对应的返回值为0-1024"
我感觉是0-1023呢
好吧。我已经彻底纠结了。。。。 本帖最后由 <一一巛 于 2013-3-5 10:15 编辑
交作业:$
int n=0;
void setup() {
pinMode(11, OUTPUT);
}
void loop() {
analogWrite(11,analogRead(A4)/4);
} 本帖最后由 万马奔腾 于 2013-3-26 21:57 编辑
强强老师:我在具体实验的时候遇到的问题。
如果电位器没有接,相当于A0口采集的电压为零,11口的灯应该不亮啊 ,为什么电位器没有接11口的灯还是亮起的啊