Arduino 声音传感器实时监测:LED 指示灯 + LCD 显示声级
组件与供应
| Arduino UNO | ×1 |
| 全尺寸无焊面包板 | ×1 |
| 9V 电池及转接头 (可选) | ×1 |
| 公对公/公对母杜邦线若干 | ×1 |
| 16x2 I2C LCD (白字蓝底) | ×1 |
| KY-038 声音传感器模块 | ×1 |
| 5mm LED:黄×2、绿×4、红×2、白×4、蓝×4 | 各若干 |
| 电阻:100Ω (白/蓝) ×8、220Ω (红/黄) ×4、330Ω (绿) ×4 | 各若干 |
软件
- Arduino IDE
项目介绍
本项目利用 KY-038 麦克风模块采集声音信号,通过 Arduino 读取模拟量 (A0) 和数字量 (D0),在串口监视器和 LCD 上实时显示声级数值,并根据阈值点亮不同颜色的 LED 直观指示音量大小:黄色为低音量,绿色为中等,红色为高音量。代码整合了多个开源示例,并解决了 LCD 显示残留数字的问题。
工作原理
- 声音传感器 AO 引脚输出模拟电压,接 Arduino A0 读取声级数值 (0-1023)。
- DO 引脚输出数字信号 (高/低),接 Arduino D2,用于触发显示更新。
- 根据串口记录的数值分布,设定多级阈值控制 8 个 LED 依次点亮。
- LCD 显示实时声级数值,通过打印空格覆盖残留字符。
代码
代码已添加详细注释。需安装 LiquidCrystal_PCF8574 库驱动 I2C LCD。
#include "Arduino.h"
#include "LiquidCrystal_PCF8574.h"
#define LCD_ADDRESS 0x27
#define LCD_ROWS 2
#define LCD_COLUMNS 16
#define SCROLL_DELAY 150
#define BACKLIGHT 255
LiquidCrystal_PCF8574 LCDi2C;
int LED1=3, LED2=4, LED3=5, LED4=6, LED5=7, LED6=8, LED7=9, LED8=10;
int soundSensor = 2; // DO 引脚
int sensorValue = 0;
boolean LEDStatus = false;
void setup() {
Serial.begin(9600);
LCDi2C.begin(LCD_COLUMNS, LCD_ROWS, LCD_ADDRESS, BACKLIGHT);
pinMode(soundSensor, INPUT);
for(int i=3; i<=10; i++) pinMode(i, OUTPUT);
}
void loop() {
sensorValue = analogRead(A0);
int SensorData = digitalRead(soundSensor);
if(SensorData == 1) {
if(!LEDStatus) {
LEDStatus = true;
Serial.println(sensorValue);
LCDi2C.setCursor(0,0);
LCDi2C.print("SoundLevel Data:");
LCDi2C.setCursor(0,1);
LCDi2C.print(sensorValue);
LCDi2C.print(" "); // 清除残留位
}
// 分级点亮 LED,阈值需根据实测调整
if(sensorValue >= 750) digitalWrite(LED8, HIGH); else { LEDStatus=false; digitalWrite(LED8, LOW); }
if(sensorValue >= 735) digitalWrite(LED7, HIGH); else { LEDStatus=false; digitalWrite(LED7, LOW); }
if(sensorValue >= 725) digitalWrite(LED6, HIGH); else { LEDStatus=false; digitalWrite(LED6, LOW); }
if(sensorValue >= 720) digitalWrite(LED5, HIGH); else { LEDStatus=false; digitalWrite(LED5, LOW); }
if(sensorValue >= 715) digitalWrite(LED4, HIGH); else { LEDStatus=false; digitalWrite(LED4, LOW); }
if(sensorValue >= 700) digitalWrite(LED3, HIGH); else { LEDStatus=false; digitalWrite(LED3, LOW); }
if(sensorValue >= 675) digitalWrite(LED2, HIGH); else { LEDStatus=false; digitalWrite(LED2, LOW); }
if(sensorValue >= 650) digitalWrite(LED1, HIGH); else { LEDStatus=false; digitalWrite(LED1, LOW); }
} else {
LEDStatus = false;
for(int i=3; i<=10; i++) digitalWrite(i, LOW);
}
}
原理图
按面包板实物连线图逐根连接即可。
社交媒体
作者主页:Facebook/Twitter/Instagram @HeathenHacks
制造工艺
- 树莓派传感器数据融合实战:GPS 与 MPU‑9150 IMU 的 I²C 与 UART 接入
- 树莓派接 KY‑033 循迹/门状态传感器:简易 Python 实现
- 树莓派构建稳健传感器 API:基于 GY‑91 多功能模块的 Flask 实现
- Arduino Nano飞行模拟2020控制面板——LCD与CDI显示
- Arch Systems与Flex合作 以先进分析变革制造数据
- Würth Elektronik 推出 WSEN-ITDS:紧凑低功耗三轴 MEMS 加速度计,面向工业物联网
- BASELABS 发布 Dynamic Grid:面向高阶汽车建模的原始数据传感器融合
- 仿皮肤软触觉传感器赋能机器人精准抓取
- 国际空间站传感器精准WiFi RSSI定位追踪
- 释放IoT生态系统中视觉数据的力量
- 构建高影响力传感器驱动物联网应用的六大核心原则
- 革命性材料驱动新一代LED数据通信