Circuit Box- Download

Breaking

Friday, April 19, 2024

A Simple Arduino Metal Detector


 

Introduction

In the early-days of metal-detecting, a simple type of metal-detector called a BFO (Beat Frequency Oscillator) detector was commonly used. It doesn’t work as well as more modern designs, but it’s quick, and easy, to build, and you may find it good enough for beach-combing for coins or rings.

 

A BFO detector traditionally consists of two inductor/capacitor oscillators. The first oscillator resonates using the search coil as an inductor.  While the second oscillator uses a separate inductor, and is tuned to the same frequency as the first. We’ll call the oscillators ‘search’ and ‘reference’.

 

The audio output of a BFO detector is derived by taking the difference in frequency between the search and reference oscillators.  When no metal is near the search coil, the frequency difference between the two is zero, so you don’t hear anything.

 

Bringing a piece of metal the search coil, changes the inductance, and hence the resonant frequency of the search oscillator. Now the difference between the reference and search oscillator is no longer zero, it could be 300hz, for example, so you hear a tone.

 

In this design, rather than use the traditional reference oscillator, we use an Arduino to measure the frequency of the search oscillator and when the Arduino detects a frequency change,  it can turn on a LED, or a buzzer, to indicate that a metal object has been detected.

Schematic:

 

This circuit is a simple Colpitts oscillator with the resonant circuit comprised of C2, C3 and SEARCH_COIL.  This oscillator will have a frequency of approximately 260khz. ( Colpitts calculator )

 

The peak amplitude of this oscillator can be too high for the Arduino to measure, and if we connected it directly, would cause damage to the micro-controller.  Zener diode D1 is used to limit the voltage on the Arduino pin to a safe 4.3V.  C5 and R4 ensures the output of the oscillator is referenced to ground.

 

The Search Coil

Any coil with an inductance around 200-400uH should work, and you should try and keep the resistance fairly low.

 

This will give you a frequency around 200-400 khz, which falls within a range the arduino can handle.

 

Keep in mind that larger coils will detect larger objects deeper in the ground, but small coils will be better for small items, coins, rings, and the like.

 

You can use this table as a guide:

 

Size        Shape   Turns     Wire size              Inductance         Resistance

Ø 120 mm           Round   36           Ø 0.40 mm / 0.14 mm2  405 µH  1.9 Ohm

Ø 150 mm           Round   31           Ø 0.40 mm / 0.14 mm2  394 µH  2.0 Ohm

Ø 175 mm           Round   28           Ø 0.40 mm / 0.14 mm2  387 µH  2.1 Ohm

Ø 200 mm           Round   26           Ø 0.40 mm / 0.14 mm2  406 µH  2.2 Ohm

Ø 250 mm           Round   22           Ø 0.40 mm / 0.14 mm2  380 µH  2.3 Ohm

Ø 300 mm           Round   20           Ø 0.50 mm / 0.20 mm2  390 µH  1.6 Ohm

Ø 400 mm           Round   17           Ø 0.50 mm / 0.20 mm2  396 µH  1.8 Ohm

Ø 500 mm           Round   15           Ø 0.50 mm / 0.20 mm2  400 µH  2.0 Ohm

1.0 x 1.0 m          Square  10           Ø 0.66 mm / 0.34 mm2  406 µH  2.0 Ohm

1.4 x 1.4 m          Square  8              Ø 0.66 mm / 0.34 mm2  387 µH  2.2 Ohm

1.8 x 1.8 m          Square  7              Ø 0.80 mm / 0.50 mm2  398 µH  1.7 Ohm

Code

At a high level, the code in this design performs the following steps:

 

At startup, count how many pulses occur in 100 milliseconds, store this as baseline.

In the main loop:

Count how many pulses occurred in 100 milliseconds, store this as count.

If count has changed from the baseline in turn on a LED.

We also perform the following steps in the main loop which slowly adapt the baseline to the present conditions:

 

 If count is greater than baseline, increment baseline.

If count is less than baseline, decrement baseline.

Luckily for us, we can use the FreqCount library to count the number of pulses in an interval, leaving the rest of the code relatively simple.

 

You can download the source code for this project here: Download Code

 

Results

As mentioned in the introduction this detector doesn’t work particularly well, but it may be useful for some tasks,  the simplicity of the circuit means there’s not much time investment in building it. It could perhaps find use for beach-combing, stud-finding, finding cables or pipes behind dry-wall, or other ‘light’ uses.

Some Hints

Oscillator Voltage

If you have an oscilloscope handy, it may be worth checking the voltage at the collector of the transistor. You should see a fairly clean sine-wave at around 1.5X the supply voltage.

If the voltage is too high, the wave-form will be clipped, and you should reduce the capacitance of C1 a little to reduce the oscillator’s gain. If the voltage is too low, you should increase C1 a little.

See You tube video link

Arduino Pins



Which pins you can use to measure frequency changes for each type of Arduino, I used a nano, you’ll have to read the FreqCount library documentation to determine which pins you should use for yours.

 

Arduino Input Voltage

For the Arduino to count the pulses from the search oscillator, the voltage at the Arduino pin needs to go above and below 3V.  If you find the voltage is too low, you can increase the capacitance of C5, or the resistance of R4 a little bit.  By the same token, you could also reduce C5 if too much current is flowing through the protection zener D1.

No comments:

Post a Comment