I needed small ultrasonic sensors for a flying sensor. So I got the smallest one - SRF01. Quite nice unit, works down to 0 cm. There were some problems with it - Maximum detection frequency is only ~14 Hz and the resolution isn't so great (1 cm). Also, on some occasions after falling from a high height the transducers broke and sensor would only give out constant distance reading. To fix the broken sensors (which I had many) and to satisfy my curiosity I took one apart and reverse engineered it.

From component side: It has JST ZH series 3 pin connector for communication and power. Since the working voltage is 3.3 - 12 V it uses LP2980 3.3V voltage regulator to power all the components. The transducer used is 400PT from china/Multicomp. Received signal is amplified by MAX4232AKA dual 10MHz op-amp. Then it is fed to PIC24FJ16GA002 ADC. The ADC frequency 500 ksps so the whole received 40 kHz signal is digitalized for analysing. This gives the benefit of extra resolution and ability to measure distances closer than 30 cm. Normally this is not possible with one transducer design because the transducer is still ringing from transmitting.

Schematic of SRF01 analog front end

SRF01 PCB backside

The analog front end is an active band pass filter. First stage is configured with a gain of 26x and second one with 5.6x. Gain-bandwidth product for both stages is <=1 MHz so the op-amp is more than decent enough. Filter cutoff frequencies are 8.8 kHz for low pass and somewhere >70 kHz for high pass. Top capacitor is somewhere in the pF range where my multimeter can't measure.

The necessary driving signal is generated by two IO pins. Driving the transducer this way gives 6.6 voltage peak-to-peak to the speaker. After generating 8 pulses @ 40 kHz it switches bottom pin of the transducer to GND and top side to input.

In conclusion it is a nice little sensor. It does some nice tricks to get its performance. Control software is has one pin serial interface to get data. Biggest problem with it is the detection rate. Measurement can be triggered only every 70 ms. The reason for this is to hear echoes for the maximum range of 6 m. Good idea, but for shorter distances the time could be much shorter. This speed is good enough for human interface, but not good enough for many control applications.

EDIT: Lot of people were interested in the failiure reason and fix. The failiure was caused by mechanically braking tranducer. I managed to destroy 5+ sensors and all of them had the same problem. Broken tranducers had slightly different capacitances, I didn't measure other parameters. Same tranducers were available from Farnell for quite cheap so I just swapped these for any broken sensor.