Navigation

    CreatiCode Scratch Forum

    • Register
    • Login
    • Search
    • Categories
    • Recent
    • Tags
    • Popular
    • Users
    • Groups
    • CreatiCode

    三维/人工智能 - 可持续发展目标7 - 利用距离感应器控制光源(难度:2级)

    小教程
    1
    1
    161
    Loading More Posts
    • Oldest to Newest
    • Newest to Oldest
    • Most Votes
    Reply
    • Reply as topic
    Log in to reply
    This topic has been deleted. Only users with topic management privileges can see it.
    • C
      creaticodeteacher2-mail last edited by admin

       

      用到的相关知识

      • 创建三维场景
      • 使用模型
      • 使用柱体和管子
      • 使用光源
      • 更新物体纹理
      • 人工智能距离感应器
      • 广播消息与接收消息
      • 使用盒子
      • 调整物体大小
      • 三维坐标和位置
      • 三维物体的速度
      • 三维旋转
      • 追踪摄像头

       
       

      介绍

      可持续发展目标是联合国于2015年正式发布的17个目标。这17个目标是大家都要完成的学习清单。

      本篇教程是关于节省电能,与第7个目标“负担得起的清洁能源”相关。

      在如下三维动画中,我们在隧道入口处利用距离感应器检测是否有车进入隧道,并自动打开隧道内的灯光:

       
       

      第1步 - 新建一个带三维坐标轴的空场景

      新建一个项目,删除角色“角色1”,把角色“空的1”重命名为“主角”。

      添加积木“创建三维场景”以加载空场景,再添加三维坐标系以显示三维坐标轴。


       

       
       

      第2步 - 绿地上一条路

      接下来,我们在一片广阔的绿地上添加一条很长的路,用一个平面表示绿地,用盒子表示路。注意,路的宽度为100。


       
      结果如下所示:

       
       

      第3步 - 隧道管子

      接下来,添加一个管子来表示隧道。需要旋转至朝向y轴,并向前移动,使一端与原点对齐。其直径也为100,这样的话上半部分刚好遮住路。


       
      依次运行每个积木的结果:

       
       

      第4步 - 暗光源

      接下来,删除场景内的所有光源,然后添加一个较暗的光源:


       
      现在隧道看起来很暗了,这样的话,我们在隧道内添加光源以后才会形成较好的反差:

       
       

      第5步 - 用一个新角色添加感应器盒子

      现在我们在隧道前部添加一个感应器盒子。更合理的办法就是,新建一个角色来管控传感器,这样就更容易找到代码,并且这个角色中的所有积木都将应用于感应器。

      首先,“主角”角色广播一条消息“添加感应器”。


       
      然后,在名为“感应器”的新角色中,添加一个大小为5的小盒子。将其移动至y坐标为-50处,以便于当汽车进入隧道前就可以检测到汽车。


       
      盒子如下所示:

       
       

      第6步 - 在盒子左侧添加距离感应器

      在“感应器”角色中,为盒子开启距离感应器 。提示,我们把盒子放在了马路右侧,所以只需要检测它左侧走过的物体。


       
      大家可以看到盒子左侧发射的传感器射线,长度为60。驶过的汽车所报告的距离会小于60。

       
       

      第7步 - 定期检验感应器读数

      若要使用距离感应器,我们只需要重复不断地读取感应器的数值。每当发现与左侧物体的距离小于60,意味着有汽车正在驶过,那么我们就要广播一条消息“打开灯光”:


       

      注意,每次读取以后要等待0.5秒,这样就不会读取太频繁。只要整个汽车驶过感应器的时间超过0.5秒,我们就会检测到。当然了,如果你想处理开得很快的车,就要缩短这个等待时间。

       
       

      第8步 - 在隧道内添加光源

      接下来,我们要用一个新角色在隧道内添加光源。

      首先,“主角”角色广播一条消息“添加光源”:


       
      然后,添加一个新角色“光源”。每当它收到广播消息,就在隧道入口处的穹顶添加一个聚焦光源.

      我们用圆锥体来表示光源,但需要把尺寸缩小到5%。

      此外,由于默认情况下聚焦光源向前照射,为了使它向下照射,我们需要绕x轴旋转90度。


       
      这三个积木的分步演示如下:

       
       

      第9步 - 用变量循环添加4个光源

      现在我们成功添加了一个光源,接下来用变量循环添加4个。我们将使用一个新变量“i”,让它从1走到4。4个灯分别命名为“灯1”、“灯2”、“灯3”、“灯4”,同时,位置要分别移动至y坐标100、200、300、400。变量“i”用来计算名称和y坐标。


       
      现在隧道内就有了4盏灯:

       
       

      第10步 - 开关灯

      为了节省电能,我们要让隧道内的灯默认情况下为关闭状态。在后面添加一个积木即可,每添加一个光源之后就先关闭它。


       
      之后,每当距离感应器发送消息“打开灯光”,我们就可以遍历每个灯并打开。

       
       

      第11步 - 添加汽车

      最后一步,我们要添加一辆汽车,最好在一个新角色中添加,新角色命名为“汽车”。

      首先,“主角”角色广播一条消息来“添加汽车”:

       
      然后,添加一个名为“汽车”的新角色,每当该角色收到消息“添加汽车”,就添加汽车物体。我们把汽车的起点y坐标设为-200,汽车就会驶过感应器盒子。我们把前进速度设为50,在感应器盒子旁边驶过时就不会太快:


       
      现在我们就可以观察到当汽车驶过感应器盒子时灯光打开:

       
       

      第12步 - 使用跟踪摄像头

      为了从汽车视角查看灯光效果,我们可以用追踪摄像头在汽车后面跟随汽车拍摄。只需要在“汽车”角色中添加如下积木:


       
      从汽车后面看到的情景如下:

       
       

      第13步 - 整理项目

      在发布项目之前,我们要整理一下项目,删除一些不必要的物体。

      第一,在“主角”角色中隐藏三维坐标轴:


       
      第二,在“感应器”角色中,让感应器盒子变得很小,因为不需要看到这个盒子。


       
      第三,还是在“感应器”角色中,隐藏感应器射线:


       
      最终演示结果如下:

       
       

      创意扩展

      大家可以用自己的创意想法扩展这个项目,可以扩展成很多种形式。以下是一些例子:

      • 关灯:大家可以在隧道出口处再装一个距离感应器,当汽车驶过后关闭灯光。

      • 不止一辆车:如果有多辆汽车,只有当所有汽车通过隧道后才能关闭灯光。

      • 双向交通:如果隧道内双向通行,你应该如何修改感应器来处理这种情况?

      1 Reply Last reply Reply Quote 0
      • First post
        Last post