构建一个声音监测系统:利用声音传感器检测周围声级的变化
引言
在这个项目中,我将一个声音传感器模块连接到NodeMCU ESP8266,并使用KiwisIoT在线监控传感器的读数。
ESP8266读取传感器输出值,并通过Wi-Fi将数据发送至KiwisIoT仪表板。KiwisIoT支持ESP8266,可提供实时仪表板以监控传感器数据。
基本流程如下:
项目构思
主要思路是利用声音传感器检测周围声级的变化。
当声级发生变化时,传感器输出也会随之改变。ESP8266读取该数值并将其发送至KiwisIoT。
这样,我便无需持续查看物理传感器,即可在仪表板上查看传感器数据。
本项目中,我使用了:
组件
硬件
•NodeMCU ESP8266
•声音传感器模块
•跳线
•USB数据线
•电脑 / 笔记本电脑
软件
•Arduino IDE
•ESP8266 板件包
•KiwisIoT 账户
•KiwisIoT Arduino 库
•Wi-Fi 连接
连接传感器
对于一个带有VCC、GND和AO的典型声音传感器模块,我按以下方式连接:
接线
将AO(模拟输出)连接到A0,因为我需要读取传感器变化的数值。
具体的输出范围可能取决于所使用的声传感器模块和ESP8266板,因此建议先确认所用模块的具体参数。
Arduino程序
我使用KiwisIoT库将声音传感器的读数发送到仪表盘。
在代码中,我将Wi-Fi密码和Topic ID设为占位符,上传前会替换为自己的实际值。
Kiwistron仪表盘
连接ESP8266后,我在KiwisIoT中创建了一个仪表盘。
我将通道1用于声音传感器。
ESP8266会将模拟传感器读数发送到该通道:
我可以使用量规或图表小部件来显示传入的数据。KiwisIoT提供了拖放式仪表盘小部件以及实时传感器可视化功能。(KiwisIoT)
仪表盘的流程如下:
工作原理
声音传感器检测周围声音的变化,并输出模拟信号。
ESP8266通过以下方式读取该输出:
返回的值被存储在:
然后将该值发送至KiwisIoT:
因此,当周围声音发生变化时,仪表盘上显示的数值也会随之变化。
简单工作流程
应用
此类项目可用于基础的物联网实验,例如:
•噪声监测原型
•教室声音监测
•房间活动监测
•智能家居实验
•声控项目
•物联网学习项目
•简单的环境监测
该传感器可作为声音变化的基本指标使用,但不应将其视为经过校准的专业声级计。
常见问题:
传感器读数未发生变化
检查:
尝试在传感器附近发出不同的声音,然后查看串口监视器。
仪表板未接收到数据
检查:
•Wi-Fi 连接
•KiwisIoT 主题 ID
•频道编号
•KiwisIoT 库
•ESP8266 连接
请确保以下代码位于 loop() 函数内部:
串口监视器只显示一个数值
检查以下内容:
是否在 loop() 内,并且传感器已连接到正确的引脚。
声音值过高或过低
读数取决于特定的声音传感器模块及其灵敏度调整。如果您的模块带有电位器,可能会影响其检测行为。
我得到的结果
上传代码后,我在 9600 波特率下打开了串口监视器。
例如,我可以看到类似以下的读数:
当我在传感器附近发出更大的声音时,读数会发生变化。
相同的数据会发送到 KiwisIoT 控制面板:
这使我能够通过控制面板远程监控声音传感器。
问题与解答
1. 声音传感器检测什么?
它能检测到传感器周围声音的变化,并输出电信号。
2. 为什么我用了A0?
我用A0是因为传感器提供的是模拟输出,而我想读取其变化的数值。
3. 频道1代表什么?
在我的项目中:
4. 这个数值代表分贝吗?
否。本项目中的 analogRead() 值是传感器的原始读数,而非校准后的分贝测量值。
5. 我可以将数值以图表形式显示吗?
是。图形组件可用于观察传感器读数随时间的变化情况。KiwisIoT 支持实时图表和仪表板小部件。
6. 我可以再加一个传感器吗?
是。可连接额外的传感器,并将它们的读数分配到其他可用通道上。
7. 这可以用于专业的噪声测量吗?
不能直接使用。要准确地以分贝为单位进行噪声测量,我需要一个经过校准的声级传感器或声级计,而不是使用普通声音传感器模块的原始输出信号。
本文编译自hackster.io





