NoiseMeter

From RevSpace
Jump to navigation Jump to search
Project NoiseMeter
File:NoiseMeter.jpg
Measuring audio noise as citizen science
Status Initializing
Contact bertrik
Last Update 2024-04-29

Introduction

This project is about measuring environmental audio noise as citizen science.

For example, noise can be:

  • road traffic noise (cars, mopeds, etc)
  • air traffic noise,
  • industrial noise, like building activities

Existing sound/noise meter projects:

This project page considers a kind of clone of the Amsterdam Sounds project.

Other interesting stuff:

Hardware

Nano33 IOT

Nano33 IOT pinout

Hardware is a nano33 iot board.

Connections
SPH0645 nano33 iot Remark
SEL - leave unconnected
LRCK A2 (16) - I2S FS sample clock
DOUT D4 (4) - I2S SD data
BCLK A3 (17) - I2S SCK bit clock
GND GND
3V 3v3

Software

The software is based on Arduino, a kind of clone of the Amsterdam Sounds project, modified to use WiFi (instead of LoRa), written by Rene Kuijf.

My modifications consist of a platformio configuration, for easy building.

See AdamSoundsInflux-slim-nano-33 github repo for the source code.

Casing

Microphone protection

To protect the microphone, use a membrane, like:

Junction box

Simple junction boxes sold by Gamma:

A downward pointing hole can be used for an 868 MHz LoRaWAN antenna.

Sensor.community casing

See https://sensor.community/docs/dnms/dnms-noise-measuring-dn40-result.jpg

Dimensions:

  • microphone is on a half inch (12.7 mm OD) white polystyrene pipe, 115 mm long
  • main piece is 25mm, length 160mm
  • some other connecting piecess

"RIVM" test casing

Exact dimensions unknown, see photo on this page: https://samenmeten.nl/nieuws/citizen-science-geluidmetertest-op-rivm-terrein

My guess:

  • microphone is on a 10mm diameter pipe, length 100mm
  • main case is a 40mm diameter pipe, length 200mm

Experiments

Uni-T UT353 BT noise meter

This thing has bluetooth.

serial interface

Interpreting serial port data on Linux is not straightforward, since Linux treats a serial port as a terminal so by default it does terminal-specific stuff to the data. The data below may have been corrupted by the Linux tty subsystem trying to escape/unescape certain byte sequences.

There is an internal serial interface (9600 bps). Use the following to configure the serial port on linux

 stty -F /dev/ttyUSB0 raw 9600 -echo

Then dump using

 cat /dev/ttyUSB0 |hexdump -C

or

 jpnevulator --tty=/dev/ttyUSB0 --read --width 23 --ascii

When in bluetooth mode, there is data going over this interface:

01 fc 12 13 aa bb 10 05 3b 20 20 34 34 2e 31 64 42 41 3d 34 00 04 14 
01 fc 12 13 aa bb 10 05 3b 20 20 34 30 2e 34 64 42 41 3d 34 00 04 13 
01 fc 12 13 aa bb 10 05 3b 20 20 33 39 2e 30 64 42 41 3d 34 00 04 17 
01 fc 12 13 aa bb 10 05 3b 20 20 33 38 2e 35 64 42 41 3d 34 00 04 1b 
01 fc 12 13 aa bb 10 05 3b 20 20 33 38 2e 34 64 42 41 3d 34 00 04 1a 
01 fc 12 13 aa bb 10 05 3b 20 20 33 38 2e 38 64 42 41 3d 34 00 04 1e 
01 fc 12 13 aa bb 10 05 3b 20 20 33 39 2e 31 64 42 41 3d 34 00 04 18 
01 fc 12 13 aa bb 10 05 3b 20 20 33 38 2e 39 64 42 41 3d 34 00 04 1f 
01 fc 12 13 aa bb 10 05 3b 20 20 33 39 2e 35 64 42 41 3d 34 00 04 1c 
01 fc 12 13 aa bb 10 05 3b 20 20 33 39 2e 32 64 42 41 3d 34 00 04 19 

Dividing into "frames", starting with 01 fc 12 aa bb:

01 fc 12 13 aa bb 10 05 3b 20 20 34 34 2e 31 64 42 41 3d 34 00 04 14 => "44.1dBA"
01 fc 12 13 aa bb 10 05 3b 20 20 34 30 2e 34 64 42 41 3d 34 00 04 13 => "40.4dBA"

<---------header--------->
01 fc 12 13 aa bb 10 05 3b
                           <------------ascii------->
                                  X  X  .  X  d  B  A
                                                      <--- footer-->
                                                      3d 34 00 04 ??

Footer

3d 34 XX 04 YY
^--- ????
   ^--- is 34 in slow mode, 33 in fast mode
      ^--- buttons pressed: 01 = hold, 04 = min, 08 = max
         ^--- always 04?
            ^--- varies between 10, 11, 12, 13, 14, 15, 16, 17, 19, 1B

Each frame is 23 (x017) bytes long

With the Android app connected, it sends smaller frames, like

AA BB 10 01 3B 20 20 34 35 2E 34 64 42 41 3D 33 04 04 17            	....;  45.4dBA=3...
AA BB 10 01 3B 20 20 34 35 2E 32 64 42 41 3D 33 04 04 15            	....;  45.2dBA=3...
AA BB 10 01 3B 20 20 34 35 2E 32 64 42 41 3D 33 04 04 15            	....;  45.2dBA=3...
AA BB 10 01 3B 20 20 34 35 2E 32 64 42 41 3D 33 04 04 15            	....;  45.2dBA=3...
AA BB 10 01 3B 20 20 34 35 2E 32 64 42 41 3D 33 04 04 15            	....;  45.2dBA=3...
AA BB 10 01 3B 20 20 34 35 2E 32 64 42 41 3D 33 04 04 15            	....;  45.2dBA=3...

When toggling the hold button on the Android app, we see

AA BB 04 FF 00 02 68

It now becomes more obvious that the AA BB sequence is a header, followed by a length byte

BLE interface

This thing has a bluetooth interface. FCC report on the bluetooth part: https://fcc.report/FCC-ID/2AWEE-8762-01/4740558

In short, as I interpret the BLE configuration:

  • a "Generic Attribute Profile" service, like all BLE devices have
  • a service related to bluetooth parameters, also looks fairly standard, and not related to the measurements themselves
  • a "Device information" service
  • a custom vendor-specific service, where I suspect the noise-meter specific data is

In raw format:

  • service 00001801-0000-1000-8000-00805f9b34fb: Generic Attribute Profile
    • ...
  • service: 0000ff12-0000-1000-8000-00805f9b34fb: Unknown
    • characteristic: 0000ff01-0000-1000-8000-00805f9b34fb Unknown
      • descriptor: 00002901-0000-1000-8000-00805f9b34fb Characteristic User Description "Data In"
    • characteristic: 0000ff02-0000-1000-8000-00805f9b34fb Unknown
      • descriptor: 00002902-0000-1000-8000-00805f9b34fb Client Characteristic Configuration
      • descriptor: 00002901-0000-1000-8000-00805f9b34fb Characteristic User Description "Data Out"
    • characteristic: 0000ff03-0000-1000-8000-00805f9b34fb Unknown
      • descriptor: 00002901-0000-1000-8000-00805f9b34fb Characteristic User Description "Baud Rate"
    • characteristic: 0000ff04-0000-1000-8000-00805f9b34fb Unknown
      • descriptor: 00002901-0000-1000-8000-00805f9b34fb Characteristic User Description "Link Interval"
    • characteristic: 0000ff05-0000-1000-8000-00805f9b34fb Unknown
      • descriptor: 00002901-0000-1000-8000-00805f9b34fb Characteristic User Description "Pair code"
    • characteristic: 0000ff06-0000-1000-8000-00805f9b34fb
      • descriptor: 00002901-0000-1000-8000-00805f9b34fb "BT Name"
    • characteristic: 0000ff07-0000-1000-8000-00805f9b34fb
      • descriptor: 00002901-0000-1000-8000-00805f9b34fb "Pair Code En"
    • characteristic: 0000ff08-0000-1000-8000-00805f9b34fb
      • descriptor: 00002901-0000-1000-8000-00805f9b34fb "Adv interval"
    • characteristic: 0000ff09-0000-1000-8000-00805f9b34fb
      • descriptor: 00002901-0000-1000-8000-00805f9b34fb "TX Power"
    • characteristic: 0000ff0a-0000-1000-8000-00805f9b34fb
      • ... "MCU Delay"
    • characteristic: 0000ff0b-0000-1000-8000-00805f9b34fb
      • ... "Mode Control"
    • characteristic: 0000fff0-0000-1000-8000-00805f9b34fb
      • ... "Factory Set"
    • characteristic: 0000fff1-0000-1000-8000-00805f9b34fb
      • descriptor: 00002901-0000-1000-8000-00805f9b34fb "Reset"
  • service: 0000180a-0000-1000-8000-00805f9b34fb Device Information
    • ...
  • service: 0000d0ff-3c17-d293-8e48-14fe2e4da212 Vendor specific
    • characteristic: 0000ffd1-0000-1000-8000-00805f9b34fb Write
    • characteristic: 0000ffd2-0000-1000-8000-00805f9b34fb Read, typically 40C1F6049BD7
    • characteristic: 0000ffd3-0000-1000-8000-00805f9b34fb Read, typically 01901468
    • characteristic: 0000ffd4-0000-1000-8000-00805f9b34fb Read, typically 21100048
    • characteristic: 0000ffd5-0000-1000-8000-00805f9b34fb Read, typically ...?
    • characteristic: 0000ffd8-0000-1000-8000-00805f9b34fb Write
    • characteristic: 0000fff1-0000-1000-8000-00805f9b34fb Read, typically 0501000700080000F00F0000
    • characteristic: 0000fff2-0000-1000-8000-00805f9b34fb Write
    • characteristic: 0000ffe0-0000-1000-8000-00805f9b34fb Read, typically 00 00 00 01 01 00 00 00 01 90 14 68 21 10 00 48