I did a quick search for "Cat repellent arduino" and though there is a thread, it doesn't answer a question I have:
I too am wanting to make a device to scare cats away.
Is the output of the Arduino good enough to drive a speaker to get a decent bit of noise out of it?
Push coming to shove, a FET could be used to drive the speaker, but I guess I have to ask.
Is the output of the Arduino good enough to drive a speaker to get a decent bit of noise out of it?
No. Connecting the output to an amplifier would be the best solution.
Yes, but that is a lot of stuff to get the result. As I am (hoping) to be pumping out 30kHz signals, I hope that I don't need to get too complicated.
I am ok with the FET option though.
A regular speaker won't do much with those frequencies; you need one that is designed for those frequencies.
For amplifying sound I'd opt for a BJT rather than FET, but as your output is likely to be a block wave there won't be much difference.
Paul_B
#5
What you want is called an "audio amplifier". It's not complex. Plenty of such modules ready-built on eBay. 
But to drive a 30 kHz piezo tweeter, you want a sine wave, not an Arduino square wave.
By way of reference, research the "portable dog killer". 