I'm not sure if this should actually be a comment, but here goes:
I just recently needed to make a custom ultrasonic sensor running at 40khz, though my setup was quite different. Here are some little tricks I encountered:
- I had serious issues with low GBP. If you're doing ultrasonic ranging, you want a very sharp and fast response if you want accuracy. Just how much gain you need really depends on how powerful your transmitter is, and how far your object will be, but at about 1 meter with a 15v output drive, I got about a 5mv signal from the transducer. You do have a two-stage system, which is very good. I personally used a 8mhz single stage op amp.
- Sample rate. You have a 40khz signal going into an arduino input. Arduino has a max sample rate + conversion time of 10khz. This means you very likely will never catch the first rising edge. This is very bad. Say you miss, on average, three pulses. If my math isn't wrong, then you have an inaccuracy of about +-0.0001 seconds. Speed of sound is 340 m/s, so you have an accuracy of ~ 3.5 centimeters. And that's sampling at the fastest possible speed. That might not be accurate enough for you. What I did was tack on a comparator at the end, set just higher than the noise, and fed that to a digital input. Digital inputs have no conversion time, and are much faster to poll; you can also set up an interrupt.
- Filtering. I didn't need it, but I did have it; I had a bandpass with a 10k resistor + 430pf cap in series , and a 10k resistor + a 360pf cap in parrallel. Unless you are going to be in a situation where you have a lot of noise, you can probably leave it out.
None of this might be an issue in your case, but it's all, as Dave says, a trap for young players.