Hacking a sound pressure level meter.

I have bought a couple of cheap digital sound pressure level meters and tried to hack them to provide a linear dB output, since they pretty all have ATMELS inside as well.
They are all astonishly complex.

I am not a rookie in electronics, but I did not succeed to find any usable DC signal in any of them.

The main problem is that the signals are floating, and they are NOT linear. Nowhere. Not even close to be DC.

Even a device, that provided a DC jack, turned out to supply a linear signal until a certain level that "geared down" several times without notice when the sound pressure increased, even when selecting fixed range.

A real linear output seems to be provided only by expensive devices, or by exotic devices that are not easy to get on the market.
Currently the best deal is using old SPLs that have a linear galvanometer-display (not just a logarithmic scale).

Those are easy to hack but are not easy to find on the market in quantities.

Has someone succeded and can recommend a cheap SPL that will do?

Finally, that one did the job:

http://www.ebay.com/itm/Digital-Noise-Pressure-tester-Level-Meter-30-130dB-Decibel-Sound-Measurement-XP-/112336473823
Be aware that a similar looking model exists with USB connection, which has internally a completely different design, and is unusable for our purpose.
So pay attention on the exact keys arrangement.

That sound pressure level meter delivers an analog output 0-1,1V proportional to dB (10mV/db) , that is bounded to ground, which make it easy to share the power supply with an Arduino.

It requires theoretically a 6-9V power supply and must be started by a pushbutton.

With the following hack, you may however use a plain 5 V supply and the meter will start automatically.

The green wire is soldered to the right inside contact of the DC jack.

The blue wire goes to ground, the red one goes to 5V, the green one to A0 of the Arduino.

Used with analogReferenc(INTERNAL) you get directly a 0,1 dB resolution for your sketch.

You now have got for less than 20 dollar the only perfect Arduino sound level pressure meter available on the market.

Enjoy!

Thank you! I was looking for weeks to get a somewhat reliable SPL-meter working, even teared down two other cheap ones... sadly the smaller version of this one doesn't seem to have any analog output.

Can you clarify what the actual "Hack" is to get the thing starting without a button-push? I thought closing the switch-pad area with solder on the PCB would do that trick? Anyway, does it also have the auto-standby mode?
The smaller one turns of after like 10-15 mins. A transistor could be used connecting the switch-pads and controlled by a digital-pin on the Arduino.... atleast that was my idea to avoid the standby.

Phin:
Thank you! I was looking for weeks to get a somewhat reliable SPL-meter working, even teared down two other cheap ones... sadly the smaller version of this one doesn't seem to have any analog output.

Can you clarify what the actual "Hack" is to get the thing starting without a button-push? I thought closing the switch-pad area with solder on the PCB would do that trick? Anyway, does it also have the auto-standby mode?
The smaller one turns of after like 10-15 mins. A transistor could be used connecting the switch-pads and controlled by a digital-pin on the Arduino.... at least that was my idea to avoid the standby.

I have been looking for years :wink: and have tested more than 20 cheap SPLs...

If you use the model given (~25$) and solder on the pads indicated on the picture you are bypassing the complete power circuitry: the SPL starts automatically and stays on forever. It draws 10.5 mA on 5V.

This is fantastic. Works great. Thanks!

dfreymann:
This is fantastic. Works great. Thanks!

Glad you have found a usage of this hack.
I am tracking flight noise.
I have got several sketches for Arduino and ESP32 e.g. feeding thinger.io.
Going solar is my ultimate aim, but that is really tough to achieve!
I had a prototype with a (real) 5W, 7,5V solar panel and a 6V / 20Ah battery. It did not pass the last winter and exhausted the battery on mid January. Powering continuously the 22mA required by the arduino and the SPL requires a bigger solar supply.

I also have some developments to make a weatherproof outdoor microphone that does not require any maintenance. That worked perfectly, but the PDF describing the solution is in German and suited for the old analog SPL module.
Build an outdoor microphone
Enjoy!
You might take ideas from it (the aquarium filter and the stainless spiral cleaner work great).

I am busy to make a peak audio meter with the Arduino.
Most chips do have a time constant, so one cannot find (see) a single peak.
In my sound system some glitches seem to occur (heard).
Up till now the Arduino seems to slow to catch glitches in the audio band.
An interrupt system will be helpfull.
An external comparator fed with a speedy DA in now my next goal.
How to catch single voltage peaks is my question.
greetings Toon

Hello, i have a sound level meter from benetech (GM1356).
And has a different board with the picture shown before.
Previously I had received an mV signal that was linear with the sensor display when I used a multimeter. But when I want to measure it with Arduino, the ADC value is unreadable.

Need your advise please ..

Claver1808:
Hello, i have a sound level meter from benetech (GM1356).
And has a different board with the picture shown before.
Previously I had received an mV signal that was linear with the sensor display when I used a multimeter. But when I want to measure it with Arduino, the ADC value is unreadable.

Need your advise please ..

Sorry for the late answer: the GM1356 is -regarding the DC output- a complete piece of crap.
The best thing you can do with it is to take a big hammer and get the frustration out of you.

The GM1358 (the smaller model, without USB) is the way to go.
It has a really good 0..1V DC output, which even has a common ground with the power supply.

There is a Linux program that can read the gm1356 via its USB interface.

Confusing because the command name is gm3156 which I assume is a typo but the project name is gm1356.

The BAFX3608 works with this program. This seems to be the same meter sold under a different brand name and different case color.

The analogRead of Arduino displayed a mysterious number, but the voltmeter displayed a nearly correct sound level in voltage.

When I checked it with an oscilloscope, it was a PWM signal of 5.5 milliseconds per cycle at 3.3 volts maximum, so I adjusted it roughly and wrote the source in 5.05 milliseconds per cycle. 5.05 milliseconds may need to be adjusted due to individual differences.

// GM1356 Digital Sound Level Meter
// <<< CAUTION >>>
// Be careful because it is an uncommon wiring.(珍しい配線なので注意が必要です)
// Tip:GND
// Sleeve:A0
float maxPwmVoltage = 3.3;
float microsecondsPerCycle = 5050.0;

void setup() {
 pinMode(A0, INPUT);
 Serial.begin(9600);
}

void loop() {
 float dutyRatio = pulseIn(A0, HIGH) / microsecondsPerCycle;
 float pwmMilliVoltage = maxPwmVoltage * dutyRatio * 1000.0;
 float decibel = pwmMilliVoltage / 10.0;
 Serial.println(decibel, 1);
}

minoru_kubota:
The analogRead of Arduino displayed a mysterious number, but the voltmeter displayed a nearly correct sound level in voltage...

But NOT on the whole dB Range!
It will "change gears" several times from 30dB to 100dB, so the output is not univocal.

gbafamily:
There is a Linux program that can read the gm1356 via its USB interface.

GitHub - dobra-noc/gm1356: Digital Sound Level Meter Gm1356 USB driver for Linux

Confusing because the command name is gm3156 which I assume is a typo but the project name is gm1356.

The BAFX3608 works with this program. This seems to be the same meter sold under a different brand name and different case color.

Unfortunately written in Ruby...

Another Linux libusb program written in Python. Includes example of posting readings via MQTT.