开源声音分贝检测仪/zh

来自Microduino Wikipedia
502748957@qq.com讨论 | 贡献2016年1月18日 (一) 07:06的版本 调试过程
跳转至: 导航搜索

[WIP,waiting for assembling instructions]

概述

  • 项目名称:Microduino开源声音分贝检测仪
  • 目的:监测噪声,超过阈值可报警
  • 难度:中
  • 耗时:1小时
  • 制作者:
  • 简介:

本次教程我们将使用Microduino产品模块快速搭建一个噪声监测仪。它能够检测出持续的噪音并使用蜂鸣器和LED彩灯报警,并将噪声的分贝值显示在OLED屏幕上。

噪theo.jpg

材料清单

  • Microduino设备
模块 数量 功能
Microduino-Core/zh 1 核心板
Microduino-USBTTL/zh 1 下载程序
Microduino-Buzzer/zh(with shield) 1 蜂鸣器,报警
Microduino-OLED/zh 1 显示当前分贝值
Microduino-Duo-v/zh 1 降低整体高度
Microduino-Sound/zh 1 采集声音
Microduino-Color led/zh 1 报警闪烁
  • 其他设备
模块 数量 功能
Micro-USB线 1 下载程序、供电
木质外壳套件 1 外观,固定

实验原理

通过声音传感器采集环境中声音的大小,当声音持续高于分贝阈值时则LED彩灯点亮同时Buzzer发出报警音。需要关闭报警时则按下滑轮开关。OLED屏幕实时显示当前环境中声音的分贝值

  • 主要传感器

Microduino-Sound/zh

文档

百度盘地址:http://pan.baidu.com/s/1jHlCkdS 提取码:hxa5

调试

Microduino-CoreMicroduino-USBTTL叠加(无上下顺序),通过USB数据与电脑连接起来。 注意:最好不要将所有模块堆叠在一起之后再上传程序

Download1.jpg

打开Arduino IDE编程软件,点击 【文件】->【打开】,打开文件夹后选择DBDetector\ DBDetector.ino

点击"√",编译程序。 点击【工具】,在板选项里面选择板卡(Microduino-Core),在处理器选项里面选择处理器(Atmega328p@16M,5V),再在端口选项里面选择正确的端口号,然后直接烧录程序。 点击"→",进行上传。

拼装

  • Step1:

首先拆下侧板,看清侧面上的标示,BUZZER,MIC,以及另外两块镂空不同的侧板。我们按照如图所示顺序将其标号,左至右为1,2,3,4

  • Step2:

首先将OLED使用螺丝和螺母固定在2号木板上,使屏幕从中间镂空出露出。

将滑轮开关按照如图方向固定在1号木板上,注意一定要与图上方向一致,这关系到开关滑轮的整体摆放位置

将Microduino-Buzzer蜂鸣器固定在写着Buzzer的一面上。

将Microduino-Sound固定在写着Mic的一面上,将MIC方向露出朝外。

将Microduino-ColorLED与顶面板固定在一起。

顶面与底面版:

  • Step3:

将四块侧板插在底板上,1号板要与2号板相邻,使1号板的滑轮开关上面的开关部分从2号板一边的镂空出露出来,如图标示。

  • Step4:

将Sound连接到Microduino-Sensorhub的A0/A1引脚,Buzzer连接到D10/D11引脚,滑轮开关连接到D8/D9引脚,ColorLED连接到D6/D7引脚,将OLED连接到右下角SDA/SCL的IIC引脚(任选其一)

之后将Sensorhub与其他部分拼插好,如图所示

  • Step5:

之后将顶盖盖好用插销固定,至此噪声监测器拼装完成

组装

注意事项

操作说明

程序说明

蜂鸣器报警部分

void buzzer() {
  if (millis() - timer > 10) {
    if (!add) {
      i++;
      if (i >= 800)
        add = true;
    } else {
      i--;
      if (i <= 200) {
        add = false;
      }
    }
    tone(buzzer_pin, i);
    timer = millis();
  }
}

OLED显示部分

void OLEDShow() 
{ 
    u8g.firstPage(); 
    do 
    { 
 
        u8g.drawXBMP( 64, 1, 64, 64, DB); 
 
        setFont_M; 
        u8g.setPrintPos(5, 50); 
        u8g.print(db); 
        //u8g.print(recodeDB); 
    } 
    while( u8g.nextPage() ); 
} 

声音采集部分

void getDB() 
{ 
    voice_data = analogRead(mic_pin); 
    voice_data = map(voice_data, 0, 1023, 0, 5); 
    db = (20. * log(10)) * (voice_data / 1.0); 
    if(db > recodeDB) 
    { 
        recodeDB = db; 
    } 
    Serial.println(db); 
} 

视频