小小捕光仪
2022-06-20张嘉宇
张嘉宇 DFRobot课程设计工程师,编纂设计“Mind+Python编程入门系列课程”“Mind+Python编程进阶系列课程”“BXY高中信息技术教程”等系列课程,曾带队参加VEX机器人世界锦标赛获分区冠军。
教学背景
在日常生活中,光线的强弱对人类的情绪有着很大的影响。无论是积极还是消极的情绪,愈明亮的光线愈会让这种情感加剧。也正因此,书房、厨房等一些具有实用功能的家居环境,往往会采用较强光线的灯光,这样更能让人集中精神,情绪饱满地投入工作或家务。而卧室则适合较弱光线的灯光,给人一种温馨舒适的感觉,有助于放松身心。然而,仅凭主观的感受很难精准地判断光线强弱,那如何才能获悉环境光的大小,继而判断家庭中各个房间的灯光是否合理呢?本节课我们将利用行空板来制作一个捕光仪,以便更好地了解房间的环境光强度,适时做出调整。
教学目标
1.认识光线传感器的特点及功能。
2.了解Pinpong库的实现原理、设计理念、編程规范等。
3.学会使用Pinpong库检测光线值的方法。
4.掌握使用Unihiker库显示图片、切换文字及图片的方法。
教学重难点
教学重点 在Python环境下,使用Unihiker库编写程序显示并更新图片和文字,使用Pinpong库编写程序检测环境的光线值。
教学难点 使用Pinpong库编写程序检测环境的光线值。
教学准备
行空板、Type-C&Micro二合一USB线、Mind+编程软件。
教学过程
一、情境导入
师:同学们,在我们的家中,厨房和卧室使用的灯具是不是往往光线强弱不一样呢?大家知道这是为什么吗?
学生思考、回答……
师:同学们说得都很好,厨房常常选择强光灯,这样更能让人集中精神投入家务,卧室选择弱光灯,给人一种温馨舒适的感觉,有助于放松身心。然而,我们仅凭主观的感受很难精准地判断光线强弱,那如何才能获悉环境光的强弱,继而判断家庭中各个房间的灯光是否合理呢?
学生思考并讨论。
师:解决这个问题的方法有很多,这节课上,让我们利用行空板来制作一个捕光仪,更好地了解房间的环境光强度吧。
二、讲授知识
教师先对理论知识进行教授,为学生后期应用开发铺垫知识基础。
1.光线传感器
光线传感器是一种能够将光信号转换成电信号的器件,可用于检测光线值。行空板的光线传感器是内置在板子上的,如图1,检测时返回的是一个模拟量,数值范围在0~4095,光线越亮数值越高,光线越暗数值越低。
2.Pinpong库通用知识及功能
师:通过Mind+软件,我们可以将行空板与计算机连接起来,但如何才能使行空板上的元器件运行起来呢?这里我们就需要使用Pinpong库。
Pinpong库是一套控制开源硬件主控板的Python库,原理是给开源硬件烧录一个特定的固件,使开源硬件可以通过串口与电脑通信,执行各种命令。Pinpong库的名称由“Pin”和“Pong”组成,“Pin”指引脚,“Pinpong”为“乒乓球”的谐音,指信号的往复。Pinpong库的设计,能让开发者在开发过程中将重点放在程序功能的实现,不被繁杂的硬件型号束缚。哪怕程序编写初期用其他板子开发,部署时改成了行空板,只要修改一下硬件的参数就能正常运行,实现“一次编写,处处运行”。
师:行空板上的所有硬件都可以通过Pinpong库来控制吗?
学生思考、讨论并回答。
师:事实上,整个行空板由一块单板机和单片机系统组成。单片机系统类似一块Arduino,而单板机我们可以当作一台小电脑,无论是单片机上接的接口、传感器等元器件,还是单板机上接的麦克风、USB口等设备,都可以通过Python库来控制。
使用Pinpong库控制行空板时,需要先初始化板子,而由于Pinpong库的“pinpong.board”包中已经提供了相应的Board类,因此我们需要从中先导入这个模块。同样的,为了能够控制行空板上各元器件,我们也需要导入“pinpong.extension.unihiker”模块,并在初始化语句中输入主控板型号和主控板端口号,不输入则进行自动识别。
初始化板子后,可通过Pinpong库中的“light.read()”指令读取光线值。其中,“light.read()”表示读取光线值,是固定用法,可以用“Light”作为变量,存储读取到的光线值。
3.Unihiker库GUI类draw_image()方法显示图片
GUI类中的draw_image()方法可以实现在行空板屏幕上显示图片,在编程时,通过“对象.方法名()”的形式来实现功能,同时,此方法会返回一个图片对象,使用变量存储起来,方便后续进行对象更新操作。
图片一般按照宽高最小边等比例缩放,可省略,若宽高参数都省略则保持原图分辨率,这里我们可以使宽高和屏幕保持一致,如图2。当需要设定图片的位置时,也可通过固定x和y的值来确定图片的横纵坐标,位置为(0,0)时可省略。
4.Unihiker库GUI类通用知识及功能
行空板屏幕上显示的所有元素对象可称为控件,如图片、文字、表情、按钮等。控件对象在初次生成后是可以改变的,我们可以通过“对象.config()”的形式来实现。例如,我们先让行空板显示一张初始的背景图“light-1.png”,并将它存储到变量img(图像控件)中,通过config更新控件对象的方式将背景图换成“light-2.png”。再比如,我们先在(153,28)坐标位显示一行文字,内容为“800”,并将它存储到了变量value(文字控件)中,能通过config更新控件对象的方式将文字内容换成“666”。
三、动手实践
师:接下来,让我们动动手,通过行空板板载的光线传感器实时检测光线值,将它显示在屏幕上,同时将光线值均匀划分为4个不同的等级,并以此显示不同亮度的小灯图。
1.硬件搭建
学生通过USB连接线将行空板连接到计算机,如图3。
2.软件配置
教师指导学生配置Mind+软件,依次“启动软件—创建与保存项目文件—创建与保存Python文件—导入图片素材”,如图4。
3.程序编写
教师讲解各分功能段的程序代码,包括导入所需功能库、实例化GUI类并在行空板屏幕上显示背景图和初始光线值、循环检测光线值并更新数值显示及图片等。在设计循环检测光线值并更新数值显示功能段程序时,为了使光线值能够每隔一秒不间断地被监测,并更新显示在屏幕上,建议使用while语句。扫描二维码可获取完整代码资料。
4.运行程序
教师指导学生一起运行程序,并从不同的角度给行空板光线传感器打光。学生会发现屏幕上方的光线值每隔一定的时间就会变化,而小灯的亮度及进度条的填充度也在相应地改变。光线越强,数值越大,小灯越亮,进度条填充度也越高,如图5。
四、拓展与提升
教师和学生讨论,当光线值过大(光线值>3072)或过小(光线值<1024)时,应如何编写程序,在行空板屏幕上显示“光线值过大/过小”的文字提醒。
教学反思
本课通过设计制作捕光仪,让学生学会观察生活,发现生活中一些现象背后的原因和问题,然后通过学习新的技术寻找解决问题的方法。
在教学方法上,本节课多数教学环节都会通过提问互动的方式进行,让学生能够充分思考。在项目实践过程中,笔者将任务进行拆解,让学生在一个个小任务中逐步发现问题和解决问题,不仅锻炼了学生的思维能力,同时也提升了综合素养。
(本课件由DF创客社区推荐)