搭建工厂输送机
设计和搭建一个机器人系统,并对其进行编程,使其借助至少一个电机和一个传感器沿路径移动一颗球,此路径包含一个 90 度的转弯。
课程计划
课前准备
- 通读教师教学材料。
- 可根据教学需要使用 EV3 Lab 软件或 EV3 机器人编程 App 应用程序中的入门教学材料来设计课程。这将有助于学生熟悉乐高教育® MINDSTORMS® 头脑风暴 EV3 机器人套装。
参与(30 分钟)
- 结合下文发起一次讨论部分的提示,组织学生围绕本项目展开讨论。
- 解释项目。
- 将整个班级按两人一组方式进行分组。
- 为学生预留头脑风暴的时间。
探究(30 分钟)
- 让学生创建多个原型。
- 鼓励学生探索搭建和编程。
- 让每组学生搭建并测试两种方案。
解释(60 分钟)
- 要求学生测试自己的方案,并选出最优的一个。
- 确保学生能够创建自己的测试表。
- 为每个团队留些时间来完成项目,并收集他们的工作记录材料。
拓展(60 分钟)
- 给学生一些时间,让他们完成自己的最终报告。
- 组织一次分享会,让每个团队展示他们的成果。
评估
- 为每位学生的课堂表现提供反馈。
- 可借助所提供的评价量表来简化此环节。
发起一次讨论
工厂输送机能够在不同地点之间输运各种物品,从原材料到包装成品。尽管带式输送机是最常见的一种,但人们已经开发出了各式各样的输送系统,以有效输运各种物体。
引入头脑风暴环节。
要求学生思考下列问题:
- 什么是工厂输送机,它用在哪里?
- 哪种电动机制可以用来移动球?
- 机器人系统如何能够在控球的同时移动球?
- 传感器的作用是什么?如何衡量机器人系统的运行情况?
鼓励学生记录最初想法,并解释第一个原型选用此方案的原因。要求学生描述:如何在整个项目进行过程中评估自己的想法。通过这种方式,他们在审核和修改过程中将会拥有评估自身方案的具体信息,并可籍此来决定方案是否有效。
拓展
语言艺术拓展
为了引入语言艺术能力培养环节,让学生:
选项 1
- 通过书面方式、草图和/或照片等方式,对设计过程进行总结,并制作一份最终报告。
- 制作一段演示设计过程的视频,从最初想法开始,到项目完成结束。
- 制作一份跟他们程序相关的演示文稿。
- 制作一份演示文稿,将他们的项目与类似系统的实际应用联系起来,并描述可以根据他们的创造而进行的新发明。
选项 2
在本节课中,学生也需要创建一个机器系统,其能够使球沿路径移动,并模仿现代生产中使用的系统。
- 考虑现代制造业是否应关注互联网安全或内部数据安全,并写一篇关于现代制造业与云数据使用的叙述性文字
- 描述网上购物运营中心 (fulfillment center) 输送系统的使用
- 讨论在云中存储消费者购买数据的利弊
数学拓展
在本节课中,学生需要创造一个机器系统,其能够使球沿路径移动,并模仿现代生产中使用的系统。许多现代制造工艺将自动化用于生产和质量控制。一种被称为“机器学习”的人工智能可用来分析性能数据并生成新的流程,从而提高整体性能和效率。制造工程师通过收集描述系统性能和效率的大量数据集来实现这一点。机器学习算法可用于分析这些数据集,帮助做出提高性能和效率的决策。
为了提高数学技能和探索与制造相关的主题(如质量控制和机器学习),请要求学生:
通过向他们的设计添加硬件和软件来测量性能,并考虑表示机器性能的量化方式
请注意,进行质量管控和性能分析时,机器和人类都必须评估什么是“足够好”,并为设计提出“足够好”的定量表示方法
请记住,在探索大型数据集并尝试找出机器数据(即它所遵循的步骤)与性能之间的复杂关系时,机器学习是常用工具,请尽可能多地列出出现在机器系统中且可能影响其性能和效率的变量
编程要诀
EV3 MicroPython 示例程序
#!/usr/bin/env pybricks-micropython
from pybricks import ev3brick as brick
from pybricks.ev3devices import Motor, TouchSensor, ColorSensor
from pybricks.parameters import Port, Stop, Direction, SoundFile
from pybricks.tools import wait
from random import randint
# Configure the belt motor, which drives the conveyor belt. Set the
# motor direction to counterclockwise, so that positive speed values
# make the conveyor move upward.
belt_motor = Motor(Port.A, Direction.COUNTERCLOCKWISE)
# Configure the "catch" motor with default settings. This motor moves
# the ball to either cup.
catch_motor = Motor(Port.D)
# Set up the Color Sensor. It is used in Reflected Light Intensity
# Mode to detect when the ball is placed at the bottom of the conveyor
# belt.
color_sensor = ColorSensor(Port.S3)
# Set up the Touch Sensor. It is used to detect when the ball reaches
# the catch at the end of the ramp.
touch_sensor = TouchSensor(Port.S4)
# Initialize the conveyor belt. This is done by slowly running the
# motor backward until it stalls. This means that it cannot move any
# further. Then it resets the angle to "0." This means that when it
# rotates backward to "0" later on, it returns to this starting
# position.
belt_motor.run_until_stalled(-300, Stop.BRAKE, 30)
belt_motor.reset_angle(0)
# This is the main part of the program. It is a loop that repeats
# endlessly.
#
# First, it waits until the ball is placed on the conveyor belt.
# Second, the ball is moved upward until it reaches the ramp where it
# rolls down to the catch.
# Finally, the ball is moved to the left or the right cup, or an error
# sound is made, chosen at random.
#
# Then the process starts over. The ball can be placed at the
# beginning of the conveyor belt again.
while True:
# Wait until the ball is placed in front of the Color Sensor.
while color_sensor.reflection() < 5:
wait(10)
wait(500)
# Move the ball up on the conveyor belt.
belt_motor.run_target(250, 450, Stop.COAST, False)
# Wait until the ball hits the Touch Sensor at the catch at the end
# of the ramp.
while not touch_sensor.pressed():
wait(10)
# Generate a random integer between "-1" and "1" to determine what
# to do with the ball.
catch_command = randint(-1, 1)
# If it generates a "1," change the light to green and move the
# ball to the right cup.
if catch_command == 1:
brick.light(Color.GREEN)
catch_motor.run_target(400, -20)
wait(1000)
catch_motor.run_target(400, 0, Stop.HOLD)
# If it generates a "0," change the light to orange and move the
# ball to the left cup.
elif catch_command == 0:
brick.light(Color.ORANGE)
catch_motor.run_target(400, 20)
wait(1000)
catch_motor.run_target(400, 0, Stop.HOLD)
# Otherwise, change the light to red and play an error sound.
else:
brick.light(Color.RED)
brick.sound.file(SoundFile.RATCHET)
wait(1000)
# Return the conveyor belt to its starting position.
belt_motor.run_target(250, 0)
职业连接
喜欢这节课的学生可能会对以下相关行业产生兴趣:
- 制造与工程(机械技术)
- 科学、技术、工程和数学(工程与技术)
评估环节
教师观察清单
可根据教学需要设定等级,例如:
1.部分完成
2.全部完成
3.超额完成
请使用下列成功完成任务的标准来评估学生的进度:
- 学生能够根据优先标准和权衡多种因素来评估竞争性设计方案。
- 学生能够自主开发出可行且富有创意的方案。
- 学生能够清楚表达他们的想法。
自我评估
当学生收集到所需的性能数据后,给他们一些时间反思自己的方案。通过提出如下问题来帮助他们:
- 你们的方案是否符合“设计任务”的标准?
- 你们的机器人系统能够运动的更精确些吗?
- 其他人解决这个问题时采用了哪些方法?
要求学生进行头脑风暴,并记录两种能够改进他们方案的方法。
同伴反馈
推动学生进行同伴审核,由每个小组负责评价自己及其他小组的项目。此审核过程能够培养学生提供建设性反馈的能力,提升他们的分析能力和使用客观数据支持论点的能力。
教师支持
学生将会:
- 运用设计流程来解决实际问题
www.moe.gov.cn/srcsite/A26/s8001/201801/t20180115_324647.html
高中信息技术课程标准
人工智能初步模块
4.4 利用开源人工智能应用框架,搭建简单的人工智能应用模块,并能根据实际需要配置适当的环境、参数及自然交互方式等。
4.5 通过智能系统的应用体验,了解社会智能化所面临的伦理及安全挑战,知道信息系统安全的基本方法和措施,增强安全防护意识和责任感。