智能交通信号灯
2019-09-10吴筝
吴筝
学习背景
从古至今,交通运输都决定性地影响着经济的发展与社会水平的高低。随着数字化城市建设进程的不断推进,智能交通信号灯作为城市交通的重要组成部分,必将发挥积极的作用。本案例以程小奔机器人为硬件载体,以mBlock5为软件支撑,以实践活动、问题解决带动学习过程,通过参与、操作、体验,从认知、探究发现到创意创新,使学生的计算思维能力、逻辑思维能力、创新思维能力得以发展和强化。
教学目标
知识与技能 1.描述红外传感器的作用;2.区分“重复执行”与“重复执行直到……”;3.解释计数器的功能;4.识别Python中的循环语句。
过程与方法 1.能根据需要选择合适的变量、运算符及表达式设计程序;2.能运用“观察现象—发现问题—分析原因—尝试解决”的程序调试方法,解决实际问题。
情感态度与价值观 1.体验人机交互的过程,培养计算思维,探索实践精神;2.养成文明交通的意识。
教学重点与难点
教学重点 1.解释计数器的功能;2.能根据需要选择合适的变量、运算符及表达式设计程序。
教学难点 1.能够根据需要选择合适的变量、运算符及表达式来设计程序;2.能够识别Python中的循环语句。
案例详解
一、情境导入
教师播放城市交通车水马龙的情景以及路口交通信号灯的变化画面,引导学生在观看中了解交通信号灯在城市交通中发挥的重要作用,吸引学生动手制作一个交通信号灯模型。
二、旧知巩固
教师引导学生找出交通信号灯的变化规律,在mBlock5软件平台上完成一个路口红绿黄灯切换的模块代码,并将代码上传到机器人设备,借助机器人的LED灯查看程序结果。
本案例交通信号灯的设定只有一组红绿黄灯,不带转向及时间倒计时提示功能,因此变换规律比较简单,就是绿灯亮10秒—黄灯亮3秒—红灯亮10秒。
学生首先在mBlock5软件平台上完成一个路口红绿黄灯单次切换的模块代码,在此基础上添加重复执行模块,使得交通信号灯实现循环切换。(如图1、图2)
三、讨论思辨
传统的交通信号灯采用定时控制模式,但由于车流量不是固定的,因此可能出现少车路口绿灯时无车通行或多车路口绿灯通行时间短而堵车的情况。为解决这种资源浪费问题,可以设计一个以车流量为核心的智能交通信号灯控制系统,通过使用红外传感器检测车流量,实现对路口交通信号灯的智能控制。
本案例重点讨论如何控制一个方向上的红灯显示和切换,教师与学生讨论制订的规则是:默认红灯的显示时间是10秒,但如果在10秒内等待车辆已经超过15辆,可立即切换成绿灯。为了实现以上规则设定,假定在路口100米处安设一个红外传感器,它可以感测经过的车辆,同时需要在程序中设定两个变量,分别统计经过红外传感器的车辆数目以及红灯持续的秒数。
四、算法探究
红灯显示和切换的算法设计:初始状态为红灯亮起,统计车辆数目为0,红灯持续秒数为0;每过去0.5秒,红灯持续时间+0.5;同時红外传感器感测是否有车辆经过,如果有,车辆计数+1;如果车辆数目超过15辆或者红灯持续时间达到10秒,则红灯切换为绿灯,否则继续车辆计数与红灯持续秒数计数。
这部分算法的结构是循环结构嵌套分支结构,分支结构使用“如果……那么……”模块实现对经过车辆的感知及计数;循环结构使用“重复执行直到……”模块实现对红灯持续时间计数以及经过车辆的判断,利用混合逻辑运算设定红灯结束的条件,进而自动调节红灯的显示与切换。具体程序如图3。
五、代码比较
借助mBlock5软件的代码转换功能,分别将图1、图2定时控制的模块代码与图3智能控制的模块代码转换为相应的Python语句代码。
图1对应的Python代码如下:
# generated by mBlock5 for codey & rocky
# codes make you happy
import codey, event
@event.start
def on_start( ):
codey.led.show(0, 255, 46)
time.sleep(10)
codey.led.show(250, 255, 0)
time.sleep(3)
codey.led.show(255, 0, 0)
time.sleep(10)
图2对应的Python代码如下:
# generated by mBlock5 for codey & rocky
# codes make you happy
import codey, event
@event.start
def on_start( ):
while True:
codey.led.show(0, 255, 46)
time.sleep(10)
codey.led.show(250, 255, 0)
time.sleep(3)
codey.led.show(255, 0, 0)
time.sleep(10)
图3对应的Python代码如下:
# generated by mBlock5 for codey & rocky
# codes make you happy
import codey, rocky, event
# initialize variables
cheliangshu = 0
red_time = 0
@event.start
def on_start():
global cheliangshu, red_time
while True:
codey.led.show(0, 255, 46)
time.sleep(10)
codey.led.show(250, 255, 0)
time.sleep(3)
codey.led.show(255, 0, 0)
cheliangshu = 0
red_time = 0
while not (cheliangshu > 15 or red_time > 10 or red_time == 10):
time.sleep(0.5)
red_time = red_time + 0.5
if rocky.color_ir_sensor. is_obstacle
_ahead( ):
cheliangshu = cheliangshu + 1
通過对比,学生可以识别Python中循环控制语句while的一般形式(如图4)。
六、思维拓展
作品交流后,给学生一些时间梳理设计思路、完善提升作品。教师也可以提出一些拓展要求供学生挑战,比如对十字路口的交通情况通盘考虑,进而智能控制四个方向的交通信号灯,还比如可以添加行人过马路的因素,等等。
教师还可以引导学生思考将人工智能技术应用到城市交通建设的可能性,比如利用摄像头进行视频采集获取路口各方向车辆的等待情况,实现对不同车型和行人的识别以及检测控制、抓拍报警等,根据具体获取的信息来选择交通信号灯的控制方案,并通过网络将最终方案反馈给控制中心。
教学反思
“智能交通信号灯”一课的问题设计贴近生活,学生能从已有经验入手发挥主观能动性,为改善交通信号灯出谋划策,容易激发学生的思维火花。任务设计由易到难,从常规定时控制到可根据车流量智能调整红灯时长,给学生创造了“跳一跳”的机会。借助mBlock5平台的代码转换功能,学生能够对比模块代码与Python代码,为了解Python语句做了一定的铺垫。当然,要将思路转换成代码是有一定难度的,所以实践过程中教师需要进一步思考如何更好地设计支架,引导学生实现算法。