Which piezo/speaker to use for high frequencies?

Hi,

I want to be able to output frequencies ranging from 20,000Hz to 60,000Hz from my Arduino UNO. I also would like to be able to control this using the tone() function (so i just type in the frequency as the function parameter. Apparently this supports unsigned integers (0-65535) which appears to cover my range of frequencies sufficiently.

Is there a piezo speaker (ultrasonic?) available on the market I can connect simply using the 5v on the board to support this?

Thanks

Piezo speakers need relatively high voltages to generate an appreciable signal (10-40 volts) so you may need a bit of external circuitry. Also, they are very frequency selective and won't reproduce the range from 20,000 - 60,000 Hz uniformly.

How important is the sound volume and uniformity of response to you?

An alternative is the foil membrane transducer used in the Polaroid ultrasonic ranging modules, which has very flat response from 20 kHz - 100 kHz, but those require 200-300 volts to drive them.

The volume and uniformity aren't that important to be honest.

Assuming there is a speaker out there suitable for this task, I need to increase the 5v power the arduino is currently able to output. Is this done through a shield (like the Make shed motor shield kit)?

This page describes some ways of driving a piezo disk from an Arduino port http://cladlab.com/electronics/components/piezos In particular the circuit I've attached is useful, but be sure to use a transistor with a high Vce breakdown voltage, as noted.

piezo-drive-circuit-parallel-inductor.jpg

Thanks for your input. Circuit diagrams are like hieroglyphs to me without an arduino picture and jumper cables.

I did a bit of searching and found a piezo thats quoted to be up to the task:
http://www.conrad-electronic.co.uk/ce/en/product/710991/KEPO-piezo-element-25-60-kHz-515-mm
datasheet:
http://www.produktinfo.conrad.com/datenblaetter/700000-724999/710991-da-01-en-PIEZOLAUTSPRECHER_PCT_G5100_6318.pdf

Is this ok?

From the diagram i also see:
i) (BJT) transistor. I've seen this with a vce breakdoen of 70V. Suitable? http://www.digikey.co.uk/product-detail/en/FZT692BTA/FZT692BTR-ND/152412

ii) Resistor. What ohm would be recommended?

iii) 39mH inductor (although it says anything from 10mH-50mH will do). I'm struggling to find say a 40mH.

Please help!

33mH

http://www.conrad-electronic.co.uk/ce/en/product/440287/Fastron-09P-333J-50-Radial-Fixed-Inductor-Heat-Shrink?ref=list

The resistor can be anywhere between about 500 and 5000 ohms. The diagram suggests 1k (1000 ohms).

Thanks all. Just ordered all the necessary components, should have it assembled soon.

A quick check: following the circuit diagram above, the Piezo can be driven with a 40-60V, from the arduino's 5V supply. The piezo i'm looking at http://www.conrad-electronic.co.uk/ce/en/product/710991/KEPO-piezo-element-25-60-kHz-515-mm#download-dokumente says the max allowable voltage is 30Vp-p square wave.

How would i go about reducing the current to this (to prevent it blowing) with the setup as is? Lower mH inductor?

No! Don't lower the inductance. That actually increases the current, mainly because a lower inductance means less and/or heavier wire and less resistance.

Do you have an oscilloscope? You could add resistance in series with the inductor. You could also reduce the duty cycle of the driving signal.

Thanks for the advice.

Because I intend on using the Tone() function of the ardunio library it "Generates a square wave of the specified frequency (and 50% duty cycle) on a pin", so I don't believe there is any room for manouvre on the duty cycle.

Although ideally i'd like it to be variable between 10%-50% duty cycle.

It is certainly possible to have adjustable duty cycle and I imagine one could change the code in the tone library to accomplish that. Consider this to be a challenge!

Is there an update to this project? I'm looking to do similar and figured chrome86 might have updates and lessons he learned along the way. :slight_smile: