基于单片机的噪声波形检测与分贝测量仪设计

基于单片机的噪声波形检测与分贝测量仪设计

点击链接下载资料:https://download.csdn.net/download/m0_51061483/92081533


1. 系统功能介绍

本设计的"基于单片机的噪声波形检测与分贝测量仪"是一种集环境噪声检测、声波波形显示与超限报警于一体的智能测量仪器。系统以单片机为核心,结合声学传感器、电压放大与滤波电路、A/D转换模块、LCD波形显示模块和LED报警模块,实现对环境噪声的实时检测与智能判断。

随着城市化进程的加快,环境噪声污染问题日益严重。噪声不仅影响人们的工作与生活,还对健康造成潜在危害。因此,能够实时测量噪声强度并进行可视化显示的智能仪表具有重要的现实意义。本系统针对环境噪声监测需求,采用高灵敏度电容式麦克风传感器作为信号采集源,通过模拟信号放大与滤波处理后输入单片机,经过模数转换与计算,实现噪声分贝值的数字化显示与波形可视化输出。当噪声超过设定上限值时,系统自动发出声光报警,提示用户注意噪声环境的变化。

系统主要功能如下:

  1. 噪声分贝测量:实时测量环境中噪声强度,并以数值形式显示分贝(dB)值,测量范围为 40~100dB,覆盖日常生活与一般工业场所的噪声区间。
  2. 频率检测与波形显示:可检测 300~8000Hz 范围内的声波信号,并在 LCD 屏上动态显示波形,直观反映声音变化趋势。
  3. 超限报警功能:当测得的噪声强度超过设定阈值时,LED 灯亮起并发出蜂鸣提示,提醒用户环境噪声过高。
  4. 参数设定功能:系统允许用户修改噪声报警阈值,实现不同应用场景下的灵活配置。
  5. 可扩展性强:系统采用模块化设计,后期可扩展数据存储、蓝牙传输等功能,适合科研教学和工业测量领域使用。

2. 系统电路设计

整个系统由五大电路模块构成:信号采集模块、信号处理模块、主控单片机模块、显示模块、报警与供电模块。每个模块相互协作,共同完成声音信号采集、分析与显示等功能。


2.1 声音信号采集模块

声音信号采集部分采用 电容式麦克风传感器(如 MIC-38 型)。麦克风能够将空气振动产生的声波信号转换为微弱的电压信号输出。麦克风输出信号通常只有毫伏级,因此需要后级放大电路进行电平提升。

麦克风内部具有较高的灵敏度和良好的频响特性,可覆盖 300Hz~8kHz 的声音频率范围,符合设计需求。输出信号通过电容隔直后送入运算放大器进行一级放大,以提高信噪比并增强信号幅度。


2.2 信号放大与滤波模块

由于麦克风输出的信号幅度较小且混有噪声干扰,因此必须经过放大与滤波电路。

  • 放大电路 :系统采用运算放大器 LM358 构成非反相放大电路,放大倍数可通过反馈电阻调整,典型放大倍数设置为 100~200 倍,使信号幅度提升至单片机可采样范围(0~5V)。
  • 滤波电路:为抑制电源干扰与高频噪声,本系统在放大电路后增加二阶有源低通滤波器,截止频率约为 8kHz,仅允许目标频段声音通过。

经过放大与滤波处理后的信号更加平滑稳定,适合单片机的 A/D 模块进行采样。


2.3 主控单片机模块

系统核心采用 STC89C52 单片机,它具备足够的运算性能和稳定的外设接口资源。单片机负责完成以下主要任务:

  1. 控制 ADC 模块采样噪声电压信号;
  2. 将模拟电压转换为数字信号;
  3. 根据声压公式计算分贝值;
  4. 实现波形数据缓存与动态显示;
  5. 判断噪声是否超限并控制报警输出。

单片机通过 P1 口与外部 ADC 模块通信,P2 口连接 LCD 显示模块,P3 口控制报警与指示灯。主程序以定时器中断方式周期采样,确保信号显示的实时性。


2.4 模数转换(A/D)模块

由于 STC89C52 不具备内置 ADC,本系统外接 PCF8591 模数转换芯片。PCF8591 具有 8 位分辨率,4 路模拟输入,输出格式为数字电压值(0~255),对应模拟输入 0~5V 电压信号。

单片机通过 I²C 通信接口读取采样值,并将数据换算为电压值:

复制代码
V = (ADC_Value / 255.0) * 5.0;

通过计算声压级公式可得噪声分贝值:

复制代码
dB = 20 * log10(V / Vref);

其中 Vref 为参考声压信号对应电压,通常在标定时确定。


2.5 显示模块

显示部分采用 LCD12864 图形液晶屏,能够实现两种显示模式:

  • 波形显示:实时显示噪声信号变化曲线;
  • 数值显示:显示噪声分贝值与报警阈值。

LCD12864 支持 128×64 像素点显示,可在主程序中通过数组缓存波形数据,在每个采样周期内刷新显示区,实现实时波形滚动效果。

例如:

复制代码
LCD_ShowString(0, 0, "Noise Level:");
LCD_ShowNum(1, 2, dB_value, 3);
LCD_DrawWave(buffer);

该模块由单片机的并行口控制,可实现较快的刷新速率,保证显示连续性。


2.6 报警与指示电路

当噪声值超过设定阈值时,系统自动输出报警信号。

  • LED指示灯:接入单片机的输出口,当噪声超标时点亮红色 LED。
  • 蜂鸣器报警:通过 NPN 三极管驱动有源蜂鸣器发声,持续提示噪声超标状态。

报警模块的设计不仅增强了系统的实用性,也保证了在无需盯屏的情况下用户仍能及时获知噪声变化。


2.7 电源与保护模块

系统整体工作电压为 5V,采用 AMS1117 稳压模块 提供稳压电源。麦克风放大电路独立供电以降低噪声干扰。整个系统在电源输入端加装滤波电容与防反接二极管,确保系统稳定安全运行。


3. 系统程序设计

本系统的软件程序设计采用结构化编程思想,分为:主程序、初始化程序、数据采集程序、分贝计算程序、波形绘制程序、报警判断程序与显示程序等多个部分。系统以循环方式运行,实时响应外界声音变化。


3.1 主程序框架

主程序负责整体流程控制,包括初始化、数据采集、处理与显示。

复制代码
#include <reg52.h>
#include "LCD12864.h"
#include "PCF8591.h"
#include <math.h>

float noise_dB = 0;
float voltage = 0;
float Vref = 0.01;  // 基准电压
unsigned char buffer[128];

void main()
{
    System_Init();
    while(1)
    {
        voltage = Read_ADC();              // 采集声音信号电压
        noise_dB = 20 * log10(voltage / Vref); // 计算分贝值
        Display_Data(noise_dB);            // 显示分贝数值
        Draw_Wave(noise_dB);               // 绘制实时波形
        Check_Alarm(noise_dB);             // 超限报警判断
        Delay_ms(100);
    }
}

主程序不断采样与刷新显示,通过延时函数控制更新速度,实现流畅显示效果。


3.2 系统初始化程序

初始化程序配置单片机时钟、I²C通信、LCD显示与端口状态。

复制代码
void System_Init()
{
    LCD_Init();          // 初始化LCD
    I2C_Init();          // 初始化I2C
    P1 = 0x00;           // 端口清零
    P3 = 0x00;
}

初始化确保系统稳定启动,为后续信号处理提供基础。


3.3 声音信号采集程序

复制代码
float Read_ADC()
{
    unsigned char adc_value = PCF8591_Read(0x00);
    return (adc_value / 255.0) * 5.0;
}

该程序通过调用 PCF8591 模块读取采样值,并将数字量转换为实际电压值。


3.4 分贝值计算程序

复制代码
float Calc_dB(float V)
{
    if(V < Vref) V = Vref;
    return 20 * log10(V / Vref);
}

分贝计算基于声压比公式,采用对数函数计算。通过调整 Vref,可进行标定以确保测量准确性。


3.5 波形绘制程序

复制代码
void Draw_Wave(float value)
{
    static unsigned char x = 0;
    unsigned char y = 63 - (unsigned char)(value);
    buffer[x] = y;
    LCD_DrawPoint(x, y);
    x++;
    if(x >= 128)
    {
        x = 0;
        LCD_ClearArea(0, 0, 128, 64);
    }
}

该程序将最新噪声值转换为波形高度,在 LCD 显示屏上形成实时动态曲线。


3.6 报警判断程序

复制代码
void Check_Alarm(float dB)
{
    if(dB > 80)
    {
        P3_0 = 1;  // LED亮
        P3_1 = 1;  // 蜂鸣器响
    }
    else
    {
        P3_0 = 0;
        P3_1 = 0;
    }
}

当检测到分贝值大于 80dB 时系统发出报警,LED 灯亮起并蜂鸣提示。


3.7 显示与刷新程序

复制代码
void Display_Data(float dB)
{
    LCD_SetCursor(0, 0);
    LCD_ShowString("Noise Level:");
    LCD_ShowNum(1, 2, (int)dB, 3);
    LCD_ShowString(1, 6, "dB");
}

此程序负责数值显示,用户可实时读取噪声强度。LCD 屏每 100ms 更新一次,保证实时性与稳定性。


4. 系统运行原理

系统上电后自动完成初始化,LCD 屏显示启动界面。随后单片机周期性采集环境声音信号,经放大与滤波后输入 A/D 模块转化为数字量。单片机计算分贝值后在 LCD 上实时显示,同时更新波形区。若噪声值超过设定阈值,报警模块立即动作,实现声光双重提示。

整个系统运行流程为:

  1. 声音采集 →
  2. 信号放大滤波 →
  3. 模数转换 →
  4. 数据计算 →
  5. 波形显示与报警输出。

系统响应快速,显示直观,适合用于环境噪声监测、实验教学及声学特性研究等场合。


5. 总结

本设计的"基于单片机的噪声波形检测与分贝测量仪"以 STC89C52 单片机为核心,集声音信号采集、放大、数字化、波形显示与超限报警于一体,实现了噪声强度的实时检测与可视化。系统不仅能直观展示噪声波形变化,还能根据设定阈值进行自动报警,具有操作简便、结构清晰、测量范围广等优点。

通过该设计,可以进一步拓展至智能噪声监控系统、工业声学监测设备等领域,展现了单片机在声学测量与智能控制中的广泛应用潜力。

相关推荐
易享电子4 小时前
基于单片机车窗环境监测控制系统Proteus仿真(含全部资料)
单片机·嵌入式硬件·fpga开发·51单片机·proteus
三佛科技-134163842124 小时前
LED氛围灯方案开发MCU控制芯片
单片机·嵌入式硬件·智能家居·pcb工艺
小莞尔5 小时前
【51单片机】【protues仿真】基于51单片机主从串行通信系统
c语言·单片机·嵌入式硬件·物联网·51单片机
Hello_Embed5 小时前
STM32 环境监测项目笔记(一):DHT11 温湿度传感器原理与驱动实现
c语言·笔记·stm32·单片机·嵌入式软件
三佛科技-134163842127 小时前
便携式榨汁机方案开发,榨汁机果汁机MCU控制方案设计
单片机·嵌入式硬件·智能家居·pcb工艺
yongui478347 小时前
基于TMS320F28027实现光伏MPPT控制
单片机·嵌入式硬件
武昌库里写JAVA9 小时前
C语言 函数指针和指针函数区别 - C语言零基础入门教程
vue.js·spring boot·sql·layui·课程设计
炸膛坦客9 小时前
Cortex-M3 内核 MCU-STM32F1 开发之路:(一)单片机 MCU 的构成,包括 FLASH 和 SRAM 的区别,以及引脚类型
stm32·单片机·嵌入式硬件
A9better9 小时前
嵌入式开发学习日志39——stm32之I2C总线物理层与常用术语
stm32·单片机·嵌入式硬件·学习