Page Title

第10课 点阵LED的使用——声音检测仪


2019-08-06 11:18:27

图片.png 

手机中的录音机可以记录实时的声音,用录音机录制一段声音,可以发现录制同时屏幕上会出现跳跃的波形,这些波形是如何产生的呢?又代表着什么意义呢?


图片.png 

图片.png 

要探索以上的问题,可以制作一个声音检测仪,用声音传感器检测声音,再用一个工具来显示声音波形,好搭BOX套件中有一个点阵LED模块可以作为显示工作,下面一起来认识一下:

点阵LED模块

图片.png 

点阵LED屏通过LED(发光二极管)组成,以灯珠亮灭来显示文字、图片、动画、视频等。LED点阵显示屏制作简单,安装方便,被广泛应用于各种公共场合,如汽车报站器、广告屏以及公告牌等。(如下图10-1所示)。


图片.png

10-1 点阵LED模块

智能实验箱中的点阵LED屏由64个红色LED组成,呈88列矩形排列,每个LED都有唯一的坐标。

图片.png 

10-2 点阵LED的坐标系

要控制点阵模块,可以使用以下指令:

图片.png 

图片.png 

通过该指令中输入的坐标值可以选取要点亮的点。x”和“y”之后的输入框中的数值为想要点亮的LEDx坐标和y坐标。注意,这条指令只能将想要点亮的LED坐标送给点阵LED 模块,并不能使其点亮。

图片.png 

单独运行点阵显示点指令不能直接点亮点阵模块,必须运行点阵显示指令之后才能点亮。

图片.png 

运行该指令清除点阵LED模块中的所有数据,熄灭LED,同样需要配合点阵显示指令使用。


图片.png 

指令中间有8x8、共64个点,与点阵屏模块相对应;黑色的点表示点亮相应的LED,粉色的点表示熄灭相应的LED;用鼠标单击可以改变这些点的状态。

 

图片.png 

要制作本课的范例作品,可以按以下步骤先连接硬件、连接网络,然后进入“好好搭搭”网站编写、调试、编译、下载程序。

准备工作:搭建硬件、连接网络、进入网站                        

图片.png 

第一步:搭建硬件、连接网络。将点阵LED模块、数码管模块、声音传感器模块放置于主控板的任意六边形区域,磁铁吸合(如下图10-3所示);打开主控板的电源开关,等待主控板连接网络成功。


图片.png 

10-3 “声音检测仪”范例作品硬件连接图

第二步:进入网站。打开浏览器,登录“好好搭搭”网站;单击网站上方的“创作”按钮,在“无线编程”网页中选择“好搭BOX智能实验箱”模板,进入程序设计页。

案例一:点亮指定坐标的LED(随心所亮)                        

图片.png 

在编程之前先在下表中绘制出想要点亮的LED,并记录下它们的坐标值。

blob.png

 

如:想要绘制有个对勾图案。

blob.png

具体程序代码如下图10-4所示:

 

图片.png 

10-4 “绘制对勾”程序代码


图片.png 

如何实现交替显示两个图案?试绘制“跳动的小心脏”动画或“唱歌的小人”动画。

图片.png 

 

图片.png 

10-5 “跳动的小心脏”动画图案


图片.png 

10-6“唱歌的小人”动画图案


案例二: 绘制规则几何图形                       

图片.png 

如果几何图形是有多条直线组成的,那么在坐标值中代入变量,能实现快速的绘制。

绘制如下图的一条竖线,一共点亮6LEDX坐标为3


图片.png

10-7 绘制一条直线

先初始化“点阵清除”,清除掉点阵LED模块中的数据。设定第一个点亮的LED坐标为x=3y=0,依次写入6次点阵显示点指令,每运行一次,y的值增加1。最后,运行点阵显示指令。具体程序代码如下图10-8所示:


图片.png 

10-8 “点阵绘制6点直线”程序代码

如希望将程序做进一步优化,那么将绘制直线的命题做如下归纳:绘制一条以坐标(x1y1)为起点,长度为D的直线。如果为横线,则依次写入D次增加1x坐标,y坐标不变;如果为竖线,则依次写入D次增加1y坐标,x坐标不变。则程序代码优化如下图10-9所示:

 

图片.png 

10-9 “点阵绘制长度为D的直线”的程序代码

图片.png 

图片.png试绘制如下图10-10中的两种正方形。                          



图片.png

10-10 点阵绘制空心正方形与实心正方形


案例三:用点阵屏一条竖线的长度反映声音强度                   

图片.png 

在第8课中,大家曾用数码管显示了各种环境下声音的强度值,大概在500~2500之间跳动。如何用最小长度为1最大长度为8的线段来对应声音强度值的500~2500。在数学上,将两个不同的数值范围进行对应,被称之为“映射”。

首先,需准确的测量声音强度的最大值和最小值。

用数码管测量并显示声音强度的最大值。需要创建一个变量Sound_max,用于存储声音的最大值,再创建一个变量Sound_now,用于存储每次读取声音传感器的值。即每读取声音强度值一次,先存储到变量Sound_now,再让变量Sound_nowSound_max比较,如果Sound_now大于Sound_max,则将变量Sound_max的值替换为Sound_now的值。具体代码如下图10-11所示:


图片.png 

10-11 “测量声音最大值”的程序代码

运行程序,并尝试使用各种方式发出声音,测试30秒,之后记录下Sound_max的值。

之后再采用类似方式测试声音强度的最小值Sound_min。具体代码如下图10-12所示:


图片.png 

10-12 “测量声音最小值”的程序代码

运行程序,并保持安静,测试30秒,之后记录下Sound_min的值。

已经获取环境中声音的最大值的Sound_max和最小值Sound_min将最大值和最小值之间的差值等分成9份,即全灭加8种点阵共9种状态,每一份的值相等,存到变量Sound_unit。将采集值减去最小值再除以Sound_unit便得到了点阵上要点亮的最高点的坐标y_max最后再用重复指令从底部一直点亮到y_max的位置。具体代码如下图10-13所示:


图片.png 

10-13“用点阵屏一条竖线的长度反映声音强度”的程序代码

 

案例四: 用8条竖线显示声音的波形                       

图片.png 

案例三中,实现了用1条竖线反映声音的强度值,只需读取声音传感器8次,并把8次的测量值分别用于绘制8条竖线,并从左到右依次排列即可。具体代码如下图10-14所示:


图片.png

10-14 “用8条竖线显示声音的波形”程序代码

图片.png 

案例四中用到了两个重复指令的嵌套,试试看如果不用嵌套结构,程序会是什么效果?再试试将其他语句改到不同的嵌套层有什么变化?

 

图片.png 

尝试利用蜂鸣器单色LED模块彩色LED模块和点阵模块等制作一个灯光变化能跟随音乐律动的智能装置

我打算这么做:_______________________________________________________

______________________________________________________________________

做的时候需要注意:____________________________________________________

______________________________________________________________________