I implemented the circuit below using these components:

  • LOUDITY LD-BZEN-1212 - its description is "Sound transducer: electromagnetic; without built-in generator" and I am guessing it works like an active buzzer; datasheet here
  • PN2222A transistor
  • 1K resistor to drive the transistor
  • 1K resistor in parallel with the transducer
  • 1N4148 diode in parallel with the transducer
  • 100uF electrolytic capacitor in parallel with the transducer
  • 100nF and 100uF bypass capacitors on the input
  • 12V / 1A supply for the transducer (also powers the Arduino board through a L7805ACT regulator and another component through a LF533CV regulator; they both share the bypass input caps with the transducer)

I drive it with an Arduino Pro Mini through PWM port 6 using the tone() function, like this:

tone(9, 2489);

The problem is that the buzzer makes a very low noise. I want it to be as loud as the common buzzers on PC motherboards that signal BIOS POST / errors (I know those are passive as they have only one tone).

The transducer datasheet says "Rated Current (MAX): 40mA".
The PN2222A datasheet says "collector current (DC): 600mA".
The 1N4148 diode datasheet says "I(F) continuous forward current: 200mA".
The power source is rated 1A.

So where's the problem?

Here's the schematic (only the transducer part):


simulate this circuit – Schematic created using CircuitLab

  • 1
    \$\begingroup\$ Thanks for drawing a schematic, but next time can you draw it the right way up, generally we put +ve at the top. \$\endgroup\$ Commented May 11, 2016 at 15:39
  • 6
    \$\begingroup\$ Delete C2 (the one across the buzzer, not the 100nf one). \$\endgroup\$
    – user16324
    Commented May 11, 2016 at 15:42
  • 1
    \$\begingroup\$ The spec sheet says that the resonant frequency of your transducer is 2400 Hz. But your code says that you are driving it with 2489 Hz. We don't really know how accurate is the Arduino frequency. And we don't know how sharp is the resonant point of the transducer. But I would certainly try sweeping the frequency from at least 2300 up to 2500 Hz to match the actual Arduino frequency to the actual resonant frequency of your transducer. In any case, I would expect that the transducer is quite sensitive to the EXACT frequency, and not very efficient at higher or lower frequencies. \$\endgroup\$ Commented May 11, 2016 at 15:42
  • 5
    \$\begingroup\$ The transducer could be very sensitive to resonant frequency. If you are just trying random discrete frequencies, you could easily be missing the actual resonant frequency. And that 100uF across the transducer is completely wrong. Remove it! It is shorting out most of your audio signal! \$\endgroup\$ Commented May 11, 2016 at 15:51
  • 2
    \$\begingroup\$ Also, in the datasheet of the buzzer, it specifically says it is designed to be driven by a 1/2 duty 2400Hz square wave, so try to remove everything that would prevent that from happening. I.E., the capacitor. \$\endgroup\$
    – metacollin
    Commented May 11, 2016 at 16:50

2 Answers 2


You need to run it at 2.40 kHz get maximum sound pressure level (SPL). The transducer is mounted in a ported acoustic cavity which has a definite resonant frequency. Here is a typical response curve for a 2kHz transducer:


You'll still get a fair bit of noise at other frequencies (you can even use these things as horrible little speakers), but not maximum.

But most importantly, and as @RichardCrowley says ,that 100uF is totally wrong, get rid of it. And take care you don't accidentally leave it with the output on at 100% duty cycle, it will probably fry the coil.


"Passive" doesn't mean that it operates at only one frequency, it means that it doesn't have any active components, like transistors, on board.

In this case, it's just a mini loudspeaker comprising a diaphragm attached to a coil wrapped around a magnet, all mounted in an enclosure and tuned to provide the loudest acoustic output at 2400Hz.

Since you're driving the transducer with 12 volts and the transducer's resistance is specified as 140 ohms, that means that when there's 12 volts across the coil the current through the coil will be: $$ I = \frac{E}{R} = \frac{12V}{140\Omega}=\text{86 milliamperes} $$

That's twice as much DC working current as the coil is specified to carry, (40mA) but with a 12V, 2400Hz square wave (50% duty cycle) into the transducer the average current through the coil will be 43 milliamperes, so someone thought out the transducer design with a great deal of care.

In order to drive the transducer effectively, your circuit should look something like this:

enter image description here


Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.