Is this circuit for driving a piezo buzzer correct?
That won't work as well as you hope it will.  You have those 600 ohm resistors in there that will reduce the power to the buzzer.  That's kind of in direct contrast to your goal of making the buzzer as loud as possible.

What you'd want for maximum volume would look more like a full h-bridge driver than anything else.

Like this:







simulate this circuit &ndash; Schematic created using CircuitLab


Drive BUZZ and /BUZZ both to the same level to turn off the buzzer (both high or both low.)
Drive BUZZ and /BUZZ to opposite levels to make a click.
Alternate BUZZ and /BUZZ high and low at 4kHz to make an audible buzzer sound.
Drive both signals to a defined high or low at all times, and switch fast when changing states.  An in between value on BUZZ or /BUZZ will cause two transistors to conduct at once, wasting power or destroying your transistors.
BUZZ and /BUZZ must have V+ as their high state.  If your digital signal has a lower voltage than V+, then you will have to use some kind of level translation.  If the digital high is lower than V+ then Q2 and Q4 won't shut off and you will end up with a short circuit.


Alternatively, just do it the easy way:







simulate this circuit

It won't be as loud, but it is three transistors "cheaper."



You don't need to separately limit the current to the buzzer.  The 5mA rating in the datasheet tells you how much current it will draw if operated on 5V.  It doesn't matter if the 5V source can deliver 20A.  The buzzer will still draw only the rated 5mA.

If you supply it with a higher voltage, then it will draw more current, but even then you don't need to limit the current.  Stay below the maximum rated voltage, and it will still only draw what current it needs.  Above the rated voltage, it will flex too far and break before it can draw any really large current.