I've recently had a play with building a metal detector using an Arduino. First I tried a PI detector inspired by http://www.miymd.com/index.php/projects/tpimd/
. That design uses an ATtiny for the receiver, which can do very accurate timing of the decay signal because the ATtiny has a 64MHz fast perhipheral clock. Unfortunately, the Arduino does not have the fast clock, so the timing resolution is 4 times worse. Also, the only mosfets I had available had a Vds rating of 60V, whereas the FQPF7N65C in the original has a breakdown voltage of 650V. So I had to use a shorter pulse and in consequence a lower pulse amplitude. Both of these factors meant that the sensitivity of the detector was poor.
I then tried an induction balance detector. I used timer 1 to generate a 62.5kHz signal, and fed this to timer 2 to generate a 7.8125kHz square wave. I tuned the Tx coil to this frequency using a parallel capacitor, and fed the square wave to the coil/capacitor via a 2.2K resistor, to get a nice 7.8kHz sine wave across the coil. I tuned the receive coil using a another parallel capacitor, and amplified it using an LM358 configured as a bandpass amplifier. Originally I used 2 stages of amplification, but 1 turned out to be sufficient (gain = 50). The output goes into the Arduino ADC, which is set to start a conversion on each cycle of the 62.5kHz signal (I ran the ADC clock at 1MHz and accepted 8-bit accuracy). So the ADC takes 8 readings per cycle, which the code accumulates into 4 bins over around 8000 samples. A little bit of processing improves the sensitivity and cancels the 3rd harmonic, calculates the amplitude measured at 4 points in the cycle, and the phase between the received and transmitted signals.
In summary, the Arduino is used as the transmit signal generator and 4 phase sensitive detectors. This arrangement turned out to be extremely sensitive. As with all induction balance detectors, coil balance is very critical. I also trimmed out the stray capacitance between transmitter and receiver. My original experiments used a double-D coil, but I'm planning to make up concentric coils + bucking coil because I think that will be easier to keep stable.
I summary, using an Arduino as a PI detector requires some extra electronics on the receiving side (maybe a pulse gate and an integrator feeding the ADC would be sufficient); but it makes a good IB detector if you amplify the received signal before passing it to the ADC.