Some thoughts on the analog side: Use a transformer to match impedances, for sure. Also, what I've seen of ultrasonic transducers, especially the piezo variety, is that they are such high Q resonators that you don't even really need to drive them with an accurate frequency. A friend of mine in the Seattle Robotics Society built a system where just hitting the transducer with a pulse was enough to elicit an ultrasonic pulse (much like ringing a bell with a hammer tap). He used three op amps (actually, a TL082 dual op amp and an LM311 comparator) for the receive function, if I recall correctly. It didn't use AGC, but had a very simple timed gain control, so that the longer you waited for the pulse to return (and therefor the weaker the pulse you are looking for), the more gain. I can dig up the schematics if anyone is interested. One thing that always intrigued me about Keith's design was how simple it was: he used just a transistor switch (TIP122, darlington configuration), a few resistors & caps, and a 1:5 impedance matching transformer (a TK2002, I think) to drive the transducer. There was a 1500 pF cap in parallel with the transmit transducer to make it behave like a resonant tank circuit. I remember Keith told me that he could watch the transducer ring decay on his scope; the decay period was long enough that it was this that limited the close-in range. It occurred to me that, since this design was entirely software driven (with some artful analog electronics where needed), that if you paid very careful attention to the frequency and phase of the forcing function that it should be possible to get both a good loud chirp _and_ a quick decay time. It would go something like this: 1) Bang on the transducer for N pulses, where N < 10, with a pulse frequency selected to match the 40 KHz center frequency. 2) Wait an integral number of cycles (however long you want the chirp to be) plus 1/2 cycle. 3) Bang on the transducer again for M pulses (M