
任务2 乐高EV3编程指南
作者:李彭嘉(人大附中航天城学校)
乐高Mindstorms EV3(后文简称EV3)编程软件是一种图形化的编程软件。它使用抽象的彩色模块来创建程序,这些模块分别在六个不同颜色的选项卡里——绿色代表动作模块,橙色代表流程控制模块,黄色代表传感器模块,红色代表数据操作模块,蓝色代表高级模块,青色代表“我的模块”。

乐高Mindstorms EV3编程工作面板

打开“驱动基座”安装手册的地址
1.移动转向模块
移动转向模块是所有EV3使用者都应该知道如何使用的一个极为重要的模块,它是控制EV3移动的最基本、最简单的模块。

程序案例1
本程序先让机器人向前行驶3秒,再向左转弯,电机转50°,再向前走一段距离,最后后退。

2.等待模块

3.循环模块
循环模块是一个非常重要且可以让许多模块依次循环的“神奇”模块。它可以设置停止条件—当“循环”模块结束时判断停止条件是否达成,如果达成,就会结束循环。如果你想让条件一达成就停止循环,试试“循环中断”模块吧。

4.切换模块
切换模块使程序块在若干个选项里以当前的状况进行选择。

程序案例2
本程序先让A端口的中型电机以每分钟50转的速度开始正转,再让D端口的大型电机正转6秒,之后让A端口上的中型电机反转1秒的同时让C端口的中型电机正转20圈。

程序案例3
本程序先检测D端口上的电机角度,再把这个数字显示到屏幕上。

程序案例4
本程序检测3端口上的颜色传感器的颜色为红色还是黑色(如果是其他颜色默认为黑色),如果是红色就向左转,持续3秒;如果是黑色就向右转,持续3秒,一直循环。

程序案例5——巡线程序
巡线程序是EV3里一个非常经典且实用的程序,它的作用是让机器人一直沿线前进。它的原理是当颜色传感器检测到某颜色(此处为黑色)时右转,检测到另一颜色时(此处为白色)时左转。

程序案例6
本程序先等待上或下程序块按钮被按下,再根据按的按钮决定前进还是后退。

程序案例7
本程序先让车向前移动一段距离,再让D端口上的电机转1圈,如此循环,直到触动传感器被按下,最后向前移动一小段距离。

程序案例8
本程序检测A端口的电机的角度,再根据度数来调整程序块上发出的音量。

5.变量模块
变量模块是EV3复杂程序中非常重要的一个模块。它使EV3记住一个数字、逻辑或一些文本,到需要时读取出来。你可以在一个程序中设置多个变量。
注意:变量模块的名称与变量的作用没有关系。

程序案例9
本程序在程序块显示屏上显示灯开的时候,按一下程序块按钮,灯关;在关的时候,按一下灯开,一直循环。

6.范围模块
范围模块判断一个数字是否在两个另外的数字(上限、下限)之间。

程序案例10
本程序测试3端口的颜色传感器的反射光线强度,如果光线强度在45~55之间就显示勾号,如果不是就显示叉号。

7.数学运算
“数学运算”模块把一个数字或多个数字自动进行一个或多个运算。

程序案例11
本程序把当前的电机角度除以3后与颜色传感器反光值相乘,再把这个值显示到屏幕上。

程序案例12
本程序是一个“近程”遥控器。当机器人检测到左边(端口2)的触碰传感器被按下时,它就会驱动左边的电机,使机器人向右走;当检测到左边的触碰传感器被按下时,就会驱动右边的电机,使它左转。

程序案例13
本程序先让机器人向前行驶,并稳定0.5秒后只要C端口(和B端口的速度差不多)的电机的速度处在48~52r/min的范围之外就会被判定为撞墙,就会往后退,并且说“sorry”,以此一直循环。

程序案例14
本程序测试触动传感器被按动的时间有多长,再根据按动的时间规定它行驶的角度。

8.消息传递模块
“消息传递”模块用蓝牙来完成消息的传递,它是机器人远程无线相互传递消息的不可或缺的一个模块。

9. EV3蓝牙使用指南
① 打开EV3,打开【设置】;
② 打开【Bluetooth】栏,勾选【Bluetooth】选项;
③ 打开【Connections】,点击【Search】选项,稍候至绿灯亮起;
④ 选择要连接并已经打开的EV3,选择【Connect】并静候至绿灯亮起。
程序案例15——蓝牙遥控汽车
第一个程序块(遥控器)上的程序:本程序测试左(和右)程序块按钮是否被按下,如被按下就向名为“car”的程序块发送逻辑消息“真”,反之则发送消息“假”。

第二个程序块(车)上的程序:本程序让机器人接收第一个程序块(遥控器)传来的指令,根据信息判定是否要转动电机。

10.我的模块
有时候我们希望可以自己设计一个程序模块,乐高机器人EV3编程软件里就有这样一个功能。现在就介绍一下创建“我的模块”方法。
① 框选要制作为“我的模块”的模块(注意:不要框选到【开始】模块),点击【工具】—【我的模块创建器】。
② 编辑模块【名称】【描述】及【“我的模块”图标】,完成后点击【完成】。

程序案例16——秒表
想必大家都使用过秒表,它是一种能计时的工具,有些还带有计次功能。本案例就是要制作一个有计次功能的秒表。

开始编程前,先设定4个变量如下:
● time 数字型,用来保存上次暂停时的时间;
● start 逻辑型,用来判定秒表是否在“开始”状态;
● time 数字排列型,用来保存计次数据;
● jicipg 数字型,用来记录当前显示的是第几页计次。
① 准备部分 清屏,重置时间。

② 计时器开始/暂停的控制 检测端口1上的触动传感器是否被按下,如果被按下,就再检测是否正在计时(即检测名为“start”的逻辑变量是否为“真”)。如果在计时,则停止计时,把变量“start”设为“假”,将数字变量“time”加上计时器上的值;如果不在计时,则开始计时,把变量“start”设为“真”,将计时器归零。

③ 负责计次的“add_jici”模块
制作方法:先拼起上图中的模块,再框选出刚刚拼起的模块,点击【工具】—【我的模块创建器】,将模块名称设为“add_jici”,点击【确定】即可创建“add_jici”模块。

④ 负责控制计次/清零的端口2 本程序检测端口2上的触动传感器是否被触发,如被触发,则检测秒表是否为“开始”状态,如为“开始”状态,则计次;如不为“开始”状态,则清零。

⑤ 负责给计次翻页的程序块按钮 本程序检测上程序块按钮或下程序块按钮是否被触发,如下程序块按钮被触发,则将变量“jici_pg”加1(即为将计次页数向后翻一页),等待松开程序块按钮,松开后清屏并继续程序;如上程序块按钮被触发,测试计次页数是否大于或等于1,如是,则将变量“jici_pg”减1(即为将计次页数向前翻一页),等待松开程序块按钮,松开后清屏并继续程序。


⑥ 用来显示计次的程序 一个“jici”模块只会显示一排计次,所以要实现在同一个屏幕上显示5排计次就需要运行5次。制作“我的模块”需要拼砌程序(不需要连接数据线)后点击【添加参数】按钮。设置参数后点击【完成】方可连接数据线。“jici”模块的工作原理是将变量“jicipg”乘以5后与计次在本页的序号(也就是x+1)相加,得到的数字为计次编号。如果这个数字比计次的总数低,就可以显示,如果大于或等于这个数,则不可显示,否则程序会崩溃,因为有未定义的变量。

⑦ 用来显示时间的程序 本程序循环检测秒表是否为“开始”状态,如为“开始”状态,则将数字变量“time”的数值和计时器秒数相加并显示到屏幕上。
想知道更多关于EV3的知识,请在编程软件里点击【帮助】—【显示EV3帮助】。

❶ 这里所介绍的零件只是指本书中所用到的主要零件。