手机中的录音机可以记录实时的声音,用录音机录制一段声音,可以发现录制同时屏幕上会出现跳跃的波形,这些波形是如何产生的呢?又代表着什么意义呢?
![1564976940538128.png 图片.png](/ueditor/php/upload/image/20190805/1564976940538128.png)
要探索以上的问题,可以制作一个声音检测仪,用声音传感器检测声音,再用一个工具来显示声音波形,好搭BOX套件中有一个点阵LED模块可以作为显示工作,下面一起来认识一下:
点阵LED模块 |
|
点阵LED屏通过LED(发光二极管)组成,以灯珠亮灭来显示文字、图片、动画、视频等。LED点阵显示屏制作简单,安装方便,被广泛应用于各种公共场合,如汽车报站器、广告屏以及公告牌等。(如下图12-1所示)。
![1564976990631185.png 图片.png](/ueditor/php/upload/image/20190805/1564976990631185.png)
图12-1 点阵LED模块
智能实验箱中的点阵LED屏由64个红色LED组成,呈8行8列矩形排列,每个LED都有唯一的坐标。
图12-2 点阵LED的坐标系
要控制点阵模块,可以使用以下指令:
通过该指令中输入的坐标值可以选取要点亮的点。 “x”和“y”之后的输入框中的数值为想要点亮的LED的x坐标和y坐标。注意,这条指令只能将想要点亮的LED坐标送给点阵LED 模块,并不能使其点亮。
单独运行点阵显示点指令不能直接点亮点阵模块,必须运行点阵显示指令之后才能点亮。
运行该指令清除点阵LED模块中的所有数据,熄灭LED,同样需要配合点阵显示指令使用。
要制作本课的范例作品,可以按以下步骤先连接硬件、运行插件程序,然后进入“好好搭搭”网站编写、调试、编译、下载程序。
准备工作:搭建硬件、运行插件、进入网站 |
|
第一步:搭建硬件。将点阵LED模块、数码管模块、声音传感器模块放置于主控板的任意六边形区域,磁铁吸合。接着把主控板和计算机连接起来,打开主控板电源开关(如下图12-3所示)。
图12-3 “声音检测仪”范例作品硬件连接图
第二步:运行插件。打开“好好搭搭硬件下载”插件,确认插件程序显示“打开端口成功”。
第三步:进入网站。打开浏览器,登录“好好搭搭”网站;单击网站上方的“创作”按钮,在“创作模版”网页中选择“好搭BOX”模版,进入“模版项目页”;在“模版项目页”中单击网页右上角的“转到设计页”按钮,进入“好搭BOX编程设计页”。
案例一:点亮指定坐标的LED(随心所亮) |
|
在编程之前,先在下表中绘制出想要点亮的LED,并记录下它们的坐标值。
如:想要绘制有个对勾图案。
![1564977260166232.png 图片.png](/ueditor/php/upload/image/20190805/1564977260166232.png)
具体程序代码如下图12-4所示:
图12-4 “绘制对勾”程序代码
| 如何实现交替显示两个图案?试绘制“跳动的小心脏”动画或“唱歌的小人”动画。
|
图12-5 “跳动的小心脏”动画图案
图12-6“唱歌的小人”动画图案
案例二: 绘制规则几何图形 |
|
如果几何图形是有多条直线组成的,那么在坐标值中代入变量,能实现快速的绘制。
绘制如下图的一条竖线,一共点亮6个LED,X坐标为3。
![1564977340745387.png 图片.png](/ueditor/php/upload/image/20190805/1564977340745387.png)
图12-7 绘制一条直线
先初始化“点阵清除”,清除掉点阵LED模块中的数据。设定第一个点亮的LED坐标为x=3、y=0,依次写入6次点阵显示点指令,每运行一次,y的值增加1。最后,运行点阵显示指令。具体程序代码如下图12-8所示:
图12-8 “点阵绘制6点直线”程序代码
如希望将程序做进一步优化,那么将绘制直线的命题做如下归纳:绘制一条以坐标(x1,y1)为起点,长度为D的直线。如果为横线,则依次写入D次增加1的x坐标,y坐标不变;如果为竖线,则依次写入D次增加1的y坐标,x坐标不变。则程序代码优化如下图12-9所示:
图12-9 “点阵绘制长度为D的直线”的程序代码
| 试绘制如下图中的两种正方形。
|
|
![1564977417485848.png 图片.png](/ueditor/php/upload/image/20190805/1564977417485848.png)
图12-10 点阵绘制空心正方形与实心正方形
案例三:用点阵屏一条竖线的长度反映声音强度 |
|
在第8课中,大家曾用数码管显示了各种环境下声音的强度值,大概在500~2500之间跳动。如何用最小长度为1最大长度为8的线段来对应声音强度值的500~2500。在数学上,将两个不同的数值范围进行对应,被称之为“映射”。
首先,需准确的测量声音强度的最大值和最小值。
用数码管测量并显示声音强度的最大值。需要创建一个变量Sound_max,用于存储声音的最大值,再创建一个变量Sound_now,用于存储每次读取声音传感器的值。即每读取声音强度值一次,先存储到变量Sound_now,再让变量Sound_now与Sound_max比较,如果Sound_now大于Sound_max,则将变量Sound_max的值替换为Sound_now的值。具体代码如下图12-11所示:
图12-11 “测量声音最大值”的程序代码
运行程序,并尝试使用各种方式发出声音,测试30秒,之后记录下Sound_max的值。
之后再采用类似方式测试声音强度的最小值Sound_min。具体代码如下图12-12所示:
图12-12 “测量声音最小值”的程序代码
运行程序,并保持安静,测试30秒,之后记录下Sound_min的值。
已经获取环境中声音的最大值的Sound_max和最小值Sound_min。将最大值和最小值之间的差值等分成9份,即全灭加8种点阵共9种状态,每一份的值相等,存到变量Sound_unit里。将采集值减去最小值再除以Sound_unit便得到了点阵上要点亮的最高点的坐标y_max,最后再用重复指令,从底部一直点亮到y_max的位置。具体代码如下图12-13所示:
图12-13 “用点阵屏一条竖线的长度反映声音强度”的程序代码
案例四: 用8条竖线显示声音的波形 |
|
案例三中,实现了用1条竖线反映声音的强度值,只需读取声音传感器8次,并把8次的测量值分别用于绘制8条竖线,并从左到右依次排列即可。具体代码如下图12-14所示:
![1564977581845345.png 图片.png](/ueditor/php/upload/image/20190805/1564977581845345.png)
图12-14 “用8条竖线显示声音的波形”程序代码
| 案例四中用到了两个重复指令的嵌套,试试看如果不用嵌套结构,程序会是什么效果?再试试将其他语句改到不同的嵌套层有什么变化? |
尝试利用蜂鸣器、单色LED模块、彩色LED模块和点阵模块等,制作一个灯光变化能跟随音乐律动的智能装置。
我打算这么做:_______________________________________________________
______________________________________________________________________。
做的时候需要注意:____________________________________________________
______________________________________________________________________。