Pulse Induction Metal Detector - Rx Methods

I'm trying to design a Pulse Induction Metal Detector RECEIVER to vary an audio tone frequency to indicate when metal is detected. Can anyone recommend a simple way of doing that in code?

I am using a TL081CP op-amp coupled to an Arduino Uno's ADC input. The amp is working well and I have attached the op-amp circuit diagram. This circuit is a modification of existing designs.

If you want a variable tone, make a generator that changes its frequency when metal is affecting the coil.

Otherwise explain how metal affects your circuit and what's the resulting output signal.

I will try again to load 3 photos.....
****NOT ABLE TO UPLOAD the extra photos????

By failing to provide details, like the error message, you have made it impossible to offer help.

PI (pulse induction) metal detectors use a single coil which is induced with high voltage pulses from an fet amplifier circuit usually driven by a pwm (pulse width modulation) signal, easily done with an Arduino. Back EMF pulses from the coil are sampled with a attenuator circuit and fed to a RX Op-Amp circuit similar to mine above. The output of the Op-Amp is the amplified Reflected Pulse from the TX coil, which varies in frequency/phase when metal is detected near the coil. The phase slope is shown as the 60us section of the Aop photo.



Does anyone have an Arduino code snippet that would decode the (2.5Vp-p) RX phase variations on a ADC input pin, then output a frequency varied audio pwm signal on a digital pin?

I can almost guarantee that this question will fall off the first page and go cold before you get that snippet. It would be better for you to explain exactly how it should be decoded, then maybe someone can help you translate that idea into code.

What specific features in the waveform would distinguish between metal and absence of metal? You need to know the answer to this general question before you can write code to do it.

Did you invent this system? If not, please provide some links to enlighten us.

Sorry for my ignorance, as my understanding of the received signal is fairly basic, and coding skills even less.

I do know that there is a short time period (about 100 micro seconds) after the RX pulse ends, that the coil voltage drops to near zero. This delay curve stays the same with no metal present at the coil. When ferrous metal is placed near the coil the timing of this curve is delayed. The larger and closer the metal is to the coil, the greater the delay.

I think what I need for code, is a way of measuring the voltage level (after the pulse ends) with an ADC input pin, between a specific timing range (say 75 us) and somehow relating that change to a variable pwm audio signal (centered at 200 hertz), output from a digital pin to an audio amplifier. My Rx pulse signal frequency is programed at 150 hertz (6.66ms) with a variable pulse rate currently set at 3%.

No, I'm not an electronic engineer with the smarts to invent this system.
As a retired electronic hobbyist (ex-radio tech) I have studied and experimented with different metal detector designs that are freely available on the Internet. I have even built a few for fun as gifts. The internet is full of good metal detector information and a many sites have been informative. https://www.geotech1.com/ https://www.instructables.com/.

The effect of metal in a coil varies. Magnetic (iron) metal increases the inductance, others like copper decrease its quality.

Determine the response of your circuit with various metals, which may be different from the timing and waveforms of other circuits.

The effect of metal in a coil varies. Magnetic (iron) metal increases the inductance, others like copper decrease its quality.

Determine the response of your circuit with various metals, which may be different from the timing and waveforms of other circuits.

Thanks for your input DrDiettrich.
Yes, I knew that different metals affect the timing differently, but I'm only interested in Ferrous metals and wanted to keep my explanation simple. THIS WEBSITE has comprehensive information on the subject.

My oscilloscope is not accurate enough to read precise timing of the waveforms, so its impossible for me compare different metals. Mac


](Easy to build pulse induction metal detector with DSP- Lammert Bies)

Ok, I did find and build a VCO (Voltage controlled audio oscillator) which varies the output tone from 60-1400hz with an input voltage between 0.5 volts and 2.5 volts.
Now I need to monitor the voltage of the discharge delay curve of the coil shortly after 5us as shown in this photo.

Non-Ferrous metals will lower the tone, and Ferrous will increase it.
More comments and photos to follow...

Here is the Audio Voltage Controlled Oscillator.
It would be nice to add a Fet switch between the VCO and the Op-Amp, to only turn on after the coil tx pulse, but it would be necessary to control the timing with a different Arduino pin with code. Not sure how to do that....

Before any circuit analysis can be done, you must identify the pulse repetition rate.


Now I need to monitor the voltage of the discharge delay curve of the coil shortly after 5us as shown in this photo.

No chance to monitor the discharge curve directly, a single measurement with the ADC takes ~110µs. This can be improved to around 10µs, but you would need another order of magnitude faster for that curve.

If instead you create some kind of LC oscillator whose frequency changes based on the metal, you'd be able to measure that frequency with an Arduino (it can handle up to clk/2, so 8 MHz for a 16 MHz Arduino - a 10 µs period is 100 kHz). Such oscillators are easy to build with a series of NOT gates, and remarkably sensitive to changes in electromagnetic fields. I think that'd be a good starting point for a metal detector.

For the circuit in the OP, and that question: it's trivial to have an Arduino produce a tone output based on the analog input:

tone(5, 500+analogRead(A0));

produces a tone of 500-1523 Hz on pin 5 depending on the analog reading on A0.

1 Like

Paul, I use the PWM.h library with code from Julian Ilett which generates a variable frequency pulse with a pot adjusted duty cycle. As I am interested in VLF detector, I'm currently using 150 hertz with duty cycle of 5% or less. I hope this helps you give me more advice.

Julian's sketch and demo are here: Arduino PWM Tutorial #2 - How to Set PWM Frequency Accurately - YouTube
PWM library is here: GitHub - terryjmyers/PWM: Arduino Library: Modify PWM on AVR (arduino) platform

MAC Ve7dep

wymarle, thanks for the tone code. I'll experiment with that asap, as it's much easier that my above tone circuit.

Correct me it I'm wrong, but it seems difficult to build a variable LC oscillator that outputs enough power to generate a good receive signal. I have built several Colpitts oscillator circuits similar to Evan Kale's, but found them not very sensitive due to low output power.
Mac Ve7dep

An oscillator will produce a fine signal, but not much power indeed. You always have to add some kind of amplifier to bring that signal up to whatever voltage/current you need.

A low oscillator power will restrict the sensitive range, amplification will not help in detecting frequency variation.

Ah, you're right. It's not the output signal that matters here.

So basically OP needs stronger electric fields coming out of their detection coil. To achieve that they need higher currents in the coil, or more windings with the same current. Either way, that seems to call for higher input voltage. For single pulses, a voltage multiplier charging a cap would do. For continuous oscillation, a boost converter.

Mind, voltages of around 50VDC and more are considered dangerous. I'd start with maybe 24V, see how much effect it has.

Thanks for the good comments friends,
I have built various transistor oscillators such as Colpitts & Hartley and they all output clean sinewaves. But they all drift in frequency due to component temperature variations, even when using a regulated dc supply voltage and low drift caps. This makes them too unstable to accurately measure any frequency deviations. They do work for simple IB or BFO detectors, but your' constantly retuning them. Also, it is hard to add amplifiers to them as the oscillator needs to be interfaced directly to the coil. As mentioned, providing a higher drive voltage does increase their sensitivity, although there is still the issue of continuous battery current. I'm still leaning towards PI designs as stable, higher voltage pulses are easy to generate, and battery consumption can be reduced to a minimum using low duty cycles. I have stable transmitter designs working well, but still working on the best way to measure the RX signals.

Of course they drift, some more than others but all oscillators drift. There is no such thing as a completely drift free oscillator. The trick is to detect a change in frequency, regardless of what that frequency is. It's the change that matters.

In case of using it with an Arduino you could take the last say 100 readings as base reading, then your signal is the deviation of the latest one or two readings from that average. The average will slowly drift over time, the sudden changes (you're sweeping over metal) will always stand out.

Besides, of course you have to make sure the oscillator or other timing circuits are as stable as can be. There is a huge difference in stability between ceramic and film capacitors in a timing (oscillator) circuit. Less but still clearly noticeable difference between PET and PP film caps (the latter are simply more stable).