机器人课程是对于创客教育三项基础技能应用极高的课程。为学生在以后的机器人学习和创新项目中打下基础,基本掌握一些机器人控制的相关知识。
中学阶段的机器人学习,更多的是引导学生以科学探究的方式去积极思考,以解决问题的方式,将机器人学习与有趣的场景结合,锻炼学生的动手操作及编程的能力。
”南京师范大学 钟柏昌教授 说希望通过这本书的学习,大家能够掌握Arduino机器人的基础知识和基本技能,获得利用Arduino机器人解决实际问题的能力,从而进一步形成利用机器人分析问题、解决问题的思维方法和价值观。大胆的尝试,积极的创新,跟随本书的脚步,一起来开启奇幻的机器人创作之旅吧。
本教学案例来源于河北教育出版社出版的《Arduino机器人设计与制作》
中,第3课 会“呼吸”的灯
1.了解PWM的概念,能够识别控制板上支持PWM的针脚号;
2.理解模拟输出、模拟变量和当循环;
3.能够编写程序模拟呼吸灯效果。
呼吸灯的应用在我们的生活中越来越常见,例如手机、电脑、家用电器等电子设备上的信号灯、装饰灯等,具有提醒和装饰的作用。呼吸灯的发光效果与我们常见的日光灯有明显不同,其发光状态总是处在亮与灭的渐变过程中,由亮到灭和由灭到亮都是动态变化的,感觉好像是人在呼吸(如图3-1所示)。
LED虽然是一个很小的电子元件,但是它能够通过我们的操作来实现各种各样的发光效果。在呼吸灯的设计过程中,最重要的是如何控制LED的发光状态。由于呼吸灯不只有亮和灭两种状态,而是具有若干不同明暗度的变化,所以采用上节课中的数字输出控制LED将无法实现预期效果,此时需要采用一种新的输出方式——PWM。我们可以参考设计方案表3-1,来完成呼吸灯的制作。
表3-1 呼吸灯的设计方案
作品名称 |
呼吸灯 |
作品功能 |
使LED产生类似于“呼吸”的发光效果 |
器材清单 |
Romeo、USB数据线、LED |
运行流程 |
LED由灭逐渐变亮再由亮逐渐变灭,并一直循环下去 |
实现过程 |
1.将LED与Romeo支持PWM的针脚连接起来 2.编写程序,控制LED的发光效果 3.上传程序,测试效果 |
(一)PWM
Arduino端口的输入电压只有0V/5V,如果我们需要3V的输出电压该怎么办呢?也许你会说在电路中加入串联电阻,当然这个方法是可行的,但是如果需要电压在1V、3V、5V之间不断转换呢?显然,用手工更换电阻或可变电阻的方式很不方便,此时就需要“PWM”来帮助我们实现这种功能了。
PWM(Pulse Width Modulation)又称脉冲宽度调制,简称脉宽调制。Romeo有6个支持PWM的数字针脚(这些针脚标有*或~标记),分别是3、5、6、9、10和11号数字针脚。
PWM的输出值范围在0-255之间,而普通数字针脚的输出值只有0(低电平)与1(高电平)两个值。我们可以通过改变PWM针脚的输出值来控制LED,从而改变其发光强度。
(二)模拟输出和模拟变量
在程序中使用PWM时,需要在ArduBlock中调用“设定针脚模拟值”模块。 模块位于“引脚”中,通过改变该模块中的针脚号与输出信号模拟值可以实现对PWM针脚的赋值。以图3-2为例,将针脚3的模拟值设定为110。
在程序设计中,如果想实现针脚模拟值的依次递增,就需要定义一个模拟变量(例如k)。在ArduBlock中“模拟变量”对应的是 模块,我们可以在 中调用它并且可以根据程序设计中的需要为该模块命名。此处的模拟变量如同我们所学的数学函数中的变量一样,并不是某一特定的数值,而是可以变化的。以图3-3为例,将针脚3的模拟值设定为模拟变量k。
(三)当循环
在制作呼吸灯的程序中,针脚模拟值需从0递增到255,再从255递减到0,因此我们可以使用循环结构来控制针脚模拟值的变化,以使程序简单高效。
当循环是一种循环结构,它由条件语句和循环体两部分组成,若条件语句为真(即条件满足)时执行循环体内的语句;若条件语句为假(即条件不成立)时跳出循环体,结束循环;若条件语句恒为真时,循环体将会一直执行下去从而进入死循环。
在ArduBlock中,当循环模块位于 中,通过添加条件语句与循环体来实现相应的循环功能。以图3-4为例,若条件语句为真(即k值小于255),则执行循环体语句,每执行一次循环体就将模拟变量k的值赋给针脚3,然后将k值加1,之后进入下一次循环,再进行条件语句的判断与循环体的执行。
想一想:请同学们思考一下, 与 两者之间的异同?
(一)连接LED与Romeo
准备好器材后,将LED模块连接到Romeo的PWM针脚上(注意接线颜色对应)。如图3-5所示,LED连接了Romeo的PWM针脚3。
图3-5 LED模块与Romeo的连接
(二)编写程序
呼吸灯由灭变亮和由亮变灭是两个相反的过程,其中由灭变亮的程序可参考图3-6所示。
图3-6 呼吸灯由灭逐渐变亮的参考程序
说一说:在该程序示例中,为什么当循环的循环体内增加了 模块?若循环内没有该模块的话,对LED的发光效果有何影响?
做一做:
(1)完善程序,实现LED由灭逐渐变亮,再由亮逐渐变灭的发光效果。
(2)改变程序中k值的增加量和延迟的毫秒数,观察其与呼吸灯发光效果的关系。
(三)测试效果
单击ArduBlock中的 ,待程序上传成功后观察LED的发光效果是否符合预期,如有问题,在老师的帮助下逐一排查解决。最后,与同学分享自己的作品和经验。
做一做:通常手机上会安装一个呼吸灯作为信号灯使用,当手机中有未读取的通知时呼吸灯打开,以此来通知用户查看手机。那么当呼吸灯作为数码设备或是舞台等场景上的效果灯使用时,只使用一个LED很难达到所要的效果。因此,请同学们尝试通过对多个LED添加不同的发光效果来制作出酷炫的魔幻呼吸灯。
表3-2 魔幻呼吸灯
作品名称 |
魔幻呼吸灯 |
作品功能 |
|
器材清单 |
|
运行流程 |
|
实现过程 |
|
中文名称 | 英文名称 | 数量 |
共阴数码模块 | 1 | |
3路巡线传感器 | 3-Channel Line-tracking Sensor | 1 |
带功放喇叭模块 | Digital Speaker Module | 1 |
火焰传感器 | Analog Flame Sensor | 1 |
声音传感器 | Analog Sound Sensor | 1 |
碰撞开关(左) | Crash sensor(Left) | 1 |
碰撞开关(右) | Crash sensor(Right) | 1 |
红外接收模块 | Digital IR Receiver Module | 1 |
车体部件 | Explorer Cody Robot | 1 |
mini遥控器21键 | 1 | |
斜面出线全金属蓝色9克舵机带金属舵盘螺丝 | 1 | |
红外数字避障传感器 | Gravity: Analog Adjustable Infrared Distance Sensor | 1 |
继电器模块 | Gravity: Relay Module V3.1 | 1 |
数字食人鱼绿色LED发光模块 | Gravity:Digital Piranha LED Module - Green | 1 |
数字食人鱼红色LED发光模块 | Gravity:Digital Piranha LED Module-Red | 1 |
数字食人鱼黄色LED发光模块 | Gravity:Digital Piranha LED Module - Yellow | 1 |
模拟环境光线传感器 | Gravity: Analog Ambient Light Sensor | 1 |
微型振动模块 | Gravity: Digital Vibration Sensor | 1 |
数字大按钮模块(黄色) | Gravity:Digital Push Button (Yellow) | 1 |
防水温度传感器 | Waterproof DS18B20 kit | 1 |
土壤湿度传感器 | Gravity: Soil Moisture Sensor ((Immersion Gold) | 1 |
超声波传感器 | URM10 Ultrasonic Sensor | 1 |
水泵 | Immersible pump & Water tube | 1 |
风扇模块 | Dual Mode Fan Module | 1 |
4节5号电池盒 | 1 |
创客项目示例
以下均为来自于学生及老师的创客项目记录