点击上方“蘑菇云创造”可以关注我们哦
在前面几章中,我们知道了如何通过程序来控制LED亮灭。但Arduino还有个很强大的功能,通过程序来控制LED的明亮度。Arduino UNO板上,数字引脚中有六个引脚标有“~”,分别是3、5、6、9、10、11,这个符号就说明该口具有PWM功能。我们动手做一下,在做的过程中体会PWM的神奇力量!下面就介绍一个呼吸灯,所谓呼吸灯,就是让灯有一个由亮到暗,再到亮的逐渐变化的过程,感觉像是在均匀的呼吸。
所需元件
硬件连接
这个项目的硬件连接与项目一、二是完全相同的。如有不明白,可以回看项目一,或参照图4-1。
图4-1 呼吸灯连接示意图
图形化编程
连接主板和电脑,打开Mind+载入扩展库,输入样例程序4-1所示程序。本项目中将用到一个新的循环,指令学习和代码学习中会有详细的讲解。
样例程序4-1:
代码下载完成后,我们可以看到LED会有个逐渐由亮到灭的一个缓慢过程,而不是直接的亮灭,如同呼吸一般,均匀变化。
图形化指令学习
代码学习
1. volatile float mind_n_value;
2. // 函数声明
3. void DF_fadeOff();
4. void DF_fadeOn();
5.
6.
7. // 主程序开始
8. void setup() {
9.
10. }
11. void loop() {
12. DF_fadeOff();
13. DF_fadeOn();
14. }
15.
16.
17. // 自定义函数
18. void DF_fadeOff() {
19. mind_n_value = 255;
20. while (!(mind_n_value<=0)) {
21. analogWrite(10, mind_n_value);
22. delay(20);
23. mind_n_value -= 5;
24. }
25. }
26. void DF_fadeOn() {
27. mind_n_value = 0;
28. while (!(mind_n_value>=255)) {
29. analogWrite(10, mind_n_value);
30. delay(20);
31. mind_n_value += 5;
32. }
33. }
大部分代码我们已经很熟悉了,比如初始化变量声明、引脚设置、以及函数调用。
在主函数中,只有两个调用函数fadeOff和fadeOn。前者是让LED逐渐变暗,后者是逐渐变亮,以此来实现呼吸灯的效果。这两个函数的内容基本一致,在数值设置上存在一些差别,故先行学习其中一个。
19. void fadeOff() {
20. mind_n_value = 255;
21. while (!(mind_n_value<0)) {
22. analogWrite(10, mind_n_value);
23. delay(20);
24. mind_n_value -= 5;
25. }
26. }
fadeOff函数中出现了一个新的语句while,while语句通常在程序用作条件循环。
While(){}
函数格式如下:
对应指令为:
while语句中涉及了一个新函数:
■ analogWrite( 10 ,mind_n_value );
如何发送一个模拟值到一个数字引脚呢?就要用到该函数,使用这个函数是要具备特定条件的——该数字引脚需具有PWM功能。观察一下Arduino板,查看数字引脚,你会发现其中6个引脚(3、5、6、9、10、11)旁标有“~”,这些引脚不同于其他引脚,因为它们可以输出PWM信号。
PWM
PWM是一项通过数字方法来获得模拟量的技术。数字控制来形成一个方波,方波信号只有开关两种状态(也就是我们数字引脚的高低)。通过控制开与关所持续时间的比值就能模拟到一个0到5V之间变化的电压。开(学术上称为高电平)所占用的时间就叫做脉冲宽度,所以PWM也叫做脉冲宽度调制。
通过下面五个方波来更形象的了解一下PWM。
上图绿色竖线代表方波的一个周期。每个analogWrite(value)中写入的value都能对应一个百分比,这个百分比也称为占空比(Duty Cycle),指的是一个周期内高电平持续时间比一个周期时间得到的百分比。图中,从上往下,第一个方波,占空比为0%,对应的value为0。LED亮度最低,也就是灭的状态。高电平持续时间越长,也就越亮。所以,最后一个占空比为100%的对应value是255,LED最亮。50%就是最亮的一半了,25%则相对更暗。
PWM比较多的用于调节LED灯的亮度。或者是电机的转动速度,电机带动的车轮速度也就能很容易控制了,在玩一些Arduino小车时,更能体现PWM的好处。
课后作业
1. 同前两个项目,本课的第一条作业依旧是手动输入项目的代码,旨在养成这一习惯、勤加操练,为之后的项目打好必要的输入代码、编译后自行纠错debug能力的基础。
*如果遇到其他的编译报错可以登录DF创客社区查看或发帖询问。
2. 用LED能否做个火焰的效果,通过PWM使LED产生随机的亮度变化,来模拟一个火焰闪烁的效果。找个浅色罩子盖住效果更佳,可以放在家中作为小夜灯。
主要材料:一个红色LED、两个黄色LED以及220欧电阻。在这个实验中,有个函数会比较好用——random(),Mind+中对应的指令为在1和10之间取随机数。它可以产生一定范围内的随机数。
提示:可以先设定LED灯亮度,在其值附近产生一个随机数,比如random(120)+135,对应指令在0和120之间取随机数+135,让其值稳定在135附近,产生这种小幅变化,就更具有火焰跳跃感。不妨尝试一下。
random函数格式为:random(120)它能够从0-120随机取值。
具体其他用法可以查看下面链接的编程参考手册,会详细介绍这个函数的用法。之后的讲解中,我们可能有对些函数不进行详细说明,你可以通过这种方法来学习某个新函数。
可以登录:http://wiki.dfrobot.com.cn
在“入门教程”中的“Arduino编程参考手册”可以学习更多的函数。
3. 尝试一个稍微有点难度的,通过两个按键,一个按键控制LED逐次变亮,另一个按键控制LED逐次变暗。
排版:木子
——————— 正文完 ———————
教育的目的是为了培养学生协作能力、沟通能力、批判思维以及创造力,其中最核心的是创造力,蘑菇云创客教育作为国内为数不多的一站式创客教育服务供应商旨在培养孩子的创造力。
为让学生们在课堂上学习到的知识更好地连接现实世界,蘑菇云将指导学校规划、建立、运营自己的创客空间。并根据学生年龄段的不同,在设计与布局上进行了区分
小学创客空间注重趣味性,
强调互动场景;
初中创客空间注重实用性,
强调学习场景;
高中创客空间注重技术性,
强调应用场景;
在内容上, 蘑菇云和国内一线创客名师联手,编纂了一系列适合国内创客教育的教材。并拥有一套完整的创客教育课程体系,包括课程内容及教具,课程培训,技术答疑。同样根据学生年龄段的不同,在课程分类与设计上也会有所区别。
小学通过游戏化和体验化的方式来开展,要以“玩中学”为主。
初中引导学生在实际动手过程中进行探究式学习,促进“做中学”。
高中基于问题和设计的学习,需要教师为学生创设相关的真实情境,使高中生在“思中学”。
推荐阅读:
【S.O.S求救信号】基于Mind+ Ardunio入门教程02
【初识Arduino & Mind+】基于mind+ Arduino入门教程00
汇聚·碰撞·变革 II DFRobot亮相第五届中国教育创新成果公益博览会
我知道你在看呦

