Introduction: Eco Friendly Metal Detector - Arduino

Picture of Eco Friendly Metal Detector - Arduino

Metal Detecting is a lot of fun. One of the challenges is being able to narrow the exact place to dig to minimize the size of the hole left behind.

This unique metal detector has four search coils, a color touch screen to identify and pinpoint the location of your find.

Incorporating auto calibration, a USB rechargeable power pack, with four different screen modes, frequency, and pulse width adjustment which allows you to customize how you search.

Once you have pinpointed the treasure a single hole centered above each coil enables you to use a wooden skewer to push into the earth so you can start to dig a small plug from the ground reducing damage to the environment.

Each coil can pinpoint detect coins and rings at a depth of 7-10cm so is ideal for looking for lost coins and rings around parks and beaches.


A Big Thankyou - If you pushed vote button in the top right-hand corner for the "Invention Challenge" and "Explore Science" competitions!!!

many thanks,



Step 1: The Science Behind Metal Detection

Picture of The Science Behind Metal Detection

Metal Detection Design

There are multiple variations of Metal Detector designs. This particular type of metal detector is a Pulse Induction detector which uses separate transmit and receive coils.

The Arduino produces a pulse which is applied to the Transmit Coil for a very short period of time (4uS) via a transistor. This current from the pulse causes a sudden magnetic field to form around the coil, the expanding and collapsing field induces a voltage into the Receive Coil. This received signal is amplified by the receiving transistor and then turned into a clean digital pulse by a Voltage Comparator and in turn sampled by a Digital Input pin on the Arduino. The Arduino is programmed to measure the pulse width of the received pulse.

In this design, the received pulse width is determined by the receive coil inductance and a capacitor. With no objects in range, the baseline pulse width measures approximately 5000 uS. When foreign metal objects come into range of the expanding and collapsing magnetic field this causes some of the energy to be induced into the object in the form of eddy currents. ( Electromagnetic induction)

The net result is that the received pulse width is reduced, this difference in pulse width is measured by the Arduino and displayed on a TFT display in various formats.

Display Option 1: Position of Target under Detector Head

My intention was to use the 4 coils to triangulate the position of the target under the detector head. The non-linear nature of the search coils made this challenging however the animated GIF above shows the results are useful enough to show the relative position of the target under the head as well as the strength of the signal.

Display Option 2: Show Signal Trace for Each Search Coil

This enables you to track where the target object is under the head by drawing an independent signal strength trace on the screen for each search coil. This is useful to determine if you have two targets close together under the detector head and the relative strength.

Practical Uses

This approach enables you to use the first view to identify a target and the second view to pin point it to a few millimeters as shown in the video clip.

Step 2: Gather the Materials

Picture of Gather the Materials

Bill of Materials

  1. Arduino Mega 2560 (Items 1, 2 and 3 can be purchased as one bundled order)
  2. 3.2" TFT LCD Touch Screen (Ive included code for 3 supported variations)
  3. TFT 3.2 Inch Mega Shield
  4. Transistor BC548 x 8
  5. 0.047uf Greencap Capacitor x 4 (50v)
  6. 0.1uf Greencap Capacitor x 1 (50v)
  7. 1k Resistor x 4
  8. 47 Resistor x 4
  9. 10k Resistor x 4
  10. 1M Resistor x 4
  11. 2.2k Resistor x 4
  12. SPST Mini Rocker Switch
  13. Integrated Circuit LM339 Quad Differential Comparator
  14. Signal Diodes IN4148 x 4
  15. Copper WireSpool 0.3mm Diameter x 2
  16. Two Core Screened Cable - 4.0mm Diameter - 5M length
  17. USB Rechargeable Powerbank 4400mHa
  18. Piezo Buzzer
  19. Vero Board 80x100mm
  20. Plastic Case minimum 100mm Height, 55mm Depth, 160mm Width
  21. Cable Ties
  22. MDF Wood 6-8mm Thickness - 23cm x 23cm square pieces x 2
  23. Micro USB extension cable 10cm
  24. USB-A plug cable suitable to be cut down to 10cm length
  25. Headphone Audio Jack Point - Stereo
  26. Various wood and plastic spacers detector head
  27. Speed Mop Broom handle with adjustable joint (one axis movement only - see photos)
  28. One piece of A3 Paper
  29. Glue Stick
  30. Electic Jig Saw cutter
  31. A4 Sheet Cardboard 3mm thickness for creating a coil former for TX and Rx coils
  32. Duct Tape
  33. Hot Glue Gun
  34. Electric Glue
  35. 10 additional Arduino Header Pins
  36. PCB Terminal Pins x 20
  37. TwoPart Epoxy Glue - 5 min drying time
  38. Craft Knife
  39. 5mm Plastic Tube length 30mm x 4 (I used garden watering system tubing from hardware store)
  40. MDF Waterproof sealer (Ensure does not contain metal)
  41. 60cm Flexible Electrical Conduit - Grey - 25mm Diameter

Step 3: Build the Detector Head

Picture of Build the Detector Head

1. Constructing Head Assembly

Note: I chose to build a rather complex mounting arrangement for the 8 copper wire coils that are used in the detector head. This involved cutting a series of holes out of two layers of MDF as can be seen in the photographs above. Now I have completed the unit I recommend using just a single cut out circle 23 cm in diameter and attaching the coils to this single layer of MDF with hot glue. This reduces the build time and also means the head is lighter.

Begin by printing out the stencil provided onto an A3 piece of paper and then glue this onto the MDF board to provide you with a guide for positioning the coils.

Using an Electric Jig Saw carefully cut out a 23cm diameter circle from the MDF.

2. Winding the Coils

Use the cardboard to create two 10cm length cylinders held together with Duct Tape. The diameter of the Transmit Coils needs to be 7cm and the Receive Coils 4cm.

Place the copper wire bobbin on a spike so that it can turn freely. Attach the start of the copper wire on the cardboard cylinder using duct tape. Wind 40 turns firmly onto the cylinder and then use Duct tape to tie off the end.

Use Hot Glue to fasten the coils together on at least 8 points around the circumference of the coils. When cooled off, use your fingers to ease the coil off and then fasten it to the Metal Detector head template using Hot Glue. Drill two holes through the MDF next to the coil and pass the ends of the coil through to the top side of the Metal Detector Head.

Repeat this exercise to build and mount 4 x Receive Coils and 4 Transmit coils. When finished there should be 8 pairs of wires protruding through the top of the metal detector head.

3. Attach the shielded cables

Cut the 5M length of shielded twin core cable into 8 lengths. Strip and solder the twin core to each transmit and receive coil leaving the shield disconnected at the Detector Head end of the cable.

Test the coils and cable connections at the other end of each cable using an Ohm Meter. Each coil will register a few Ohms and should be consistent for all Receive and Transmit coils respectively.

Once tested use the hot glue gun to fasten the 8 cables into the center of the Detector Head ready for attaching the handle and finishing the head.

My advice is to strip and tin each of the shielded cable cores at the other end in preparation for the future testing. Attach an earth wire to each cable shield as this will be connected to earth in the main unit. This stops interference between each cable.

Use a Multimeter to identify which coil is which and attach sticky labels so they can be identified easily for future assembly.

Step 4: Assemble Circuit for Testing

Picture of Assemble Circuit for Testing

1. Breadboard Assembly

My recommendation is to use a breadboard to first set up and test the circuit before committing to Vero Board and an enclosure. This gives you the opportunity to adapt component values or modify the code if required for sensitivity and stability. The transmit and receive coils need to be connected so they are wound in the same direction and this is easier to test on a breadboard before labeling the wires for future connection to Vero Board.

Assemble the components as per the circuit diagram and attach the Detector Head Coils using hookup wire.

The connections to the Arduino are best made using bread board hook up wire soldered to the TFT shield. For Digital and Analogue pin connections I added a Header Pin which enabled me to avoid soldering directly to the Arduino Board. (See picture)

2. IDE Libraries

These need to be downloaded and added to the IDE (Integrated Development Environment) that runs on your computer, used to write and upload computer code to the physical board. UTFT.h and URtouch.h located in zip file below

Credit for UTFT.h and URtouch.h goes to Rinky-Dink Electronics I've included these zip files as it appears the source Website is down.

3. Testing

I have included a test program to handle the initial setup so you can deal with coil orientation issues. Load the test code into the Arduino IDE and upload to the Mega. If everything is working you should see the test screen as above. Each coil should produce a steady state value of approx 4600uS in each quadrant. If this is not the case reverse the polarity of the windings on the TX or RX coil and test again. If this does not work then I suggest you check each coil individually and work back through the circuit to troubleshoot. If you already have 2 or 3 working compare them to the coils/circuits not performing.

Note: Further testing has revealed that the 0.047uf capacitors on the RX circuit influence over all sensitivity. My advice is once you have the circuit working on a breadboard, try increasing this value and testing with a coin as I've found that this can improve sensitivity.

It is not mandatory however if you have an oscilloscope you can also observe the TX Pulse and RX Pulse to ensure the coils are connected correctly. See the comments in the pictures to confirm this.

Step 5: Build the Circuit and Enclosure

Picture of Build the Circuit and Enclosure

Once the unit has been tested to your satisfaction you can take the next step and build the circuit board and enclosure.

1. Prepare the Enclosure

Layout the major components and position them in your case to determine how everything will fit. Cut the Vero Board to accommodate the components, however, ensure you can fit into the bottom of the enclosure. Be careful with the Rechargeable Power Pack as these can be quite bulky.

Drill holes to accommodate the back entry of the head cables, power switch, External USB port, Arduino Programming Port and stereo headphone audio jack.

In addition to this drill 4 mounting holes in the center of the front side of the case where the handle will be, These holes need to be able to pass a cable tie through them in future steps.

2. Assemble Vero Board

Follow the Circuit Diagram and the picture above to position the components on the Vero Board.

I used PCB Terminal Pins to enable easy connection of the head coil cables to the PCB. Mount the Piezo Buzzer on the PCB along with the IC and transistors. I tried to keep the TX, RX components aligned left to right and ensured that all connections to external coils were at one end of the Vero Boar. (see the layout in photos)

3. Attach the Coil Cables

Build a cable holder for the incoming shielded cables out of MDF as shown in the pictures. This consists of 8 holes drilled into MDF to enable the cables to sit aligned to PCB Terminal Pins. As you attach each coil it pays to test the circuit progressively to ensure correct coil orientation.

4. Test The Unit

Connect up the USB Power Pack, Power Switch, Audio Phone Jack and position all of the wiring and cables to ensure a snug fit in the case. Use Hot Glue to hold items in place to ensure there is nothing that can rattle around. As per the previous step, load the test code and ensure all coils are performing as expected.

Test that the USB Power Pack is Charging correctly when connected externally. Ensure there is enough clearance to attach the Arduino IDE cable.

5. Cut Out The Screen Appeture

Position screen in the center of the box and mark the edges of the LCD display on the front panel ready for cutting out an aperture. Using a craft knife and a metal ruler carefully score the case lid and cut out the aperture.

Once sanded and filed to shape carefully position lid while ensuring all components, boards, wiring, and screen are held in place with spacers and hot glue.

7. Build Sun Visor

I found an old black enclosure that I was able to cut into shape and use as a sun visor as shown in the photos above. Glue this onto the front panel using 5min two part epoxy.

Step 6: Attach Handle and Case to Detector Head

Picture of Attach Handle and Case to Detector Head

Now that the Detector Electronics and Head are built all that remains is to complete mounting the unit securely.

1. Attach the Head to the Handle

Modify the handle joint to enable you to attach this to the head using two screws. Ideally, you want to minimize the amount of metal near the coils so use small wood screws and a lot of 5minute 2 part epoxy glue to fasten to the head. See photos above.

2. Lace Up Head Wiring

Using Cable Ties carefully lace up the wiring by adding a cable tie every 10 cm along the shielded wiring. Take care to ensure you to work out the best position for the case so it's easy to see the screen, reach the controls and attach headphones/plugs.

3. Attach the Electronics to the Handle

Build a 45 Degree Mounting Block from MDF to enable you to attach the Case at an angle that means when you are sweeping the detector across the ground you can see the TFT display easily. See the picture above.

Attach the Electronics Case to the handle with Cable Ties running through the mounting block and into the case through the previously drilled mounting holes.

4. Finish off the Detector Head

The Detector Head coils need to be fixed with no movement in the wiring so this is a good time to use Hot Glue to fasten all of the coils in place thoroughly.

The Detector Head also needs to be waterproof so it is important to spray the MDF with a clear sealer (ensure sealer does not contain metal for obvious reasons).

Drill 5mm holes in the center of each coil and pass 5mm x 30mm plastic tubing through to enable you to push wooden skewers into the soil below once you have pin pointed a target. Use hot glue gun to lock into position.

I then covered the top of the head with a plastic plate and the bottom with a thick plastic book cover whilst finishing the edge with flexible electrical conduit tubing cut and Hot Glued into place.

Step 7: Final Assembly and Testing

Picture of Final Assembly and Testing

    1. Charging

    Place a standard cell phone charger into the Micro USB port and ensure the unit is adequately charged.

    2. Upload Code

    Use the Arduino IDE to upload the enclosed code.

    3. Mute Button

    The unit defaults to being muted on power up. This denoted by a red Mute Button in the bottom LHS of the screen. To enable sound push this button and the button should go green denoting sound enabled.

    When un-muted the internal buzzer and external audio phone jack will produce sound.

    4. Calibration

    Calibration returns the trace to the bottom of the screen beneath the threshold lines. When first turned on the unit will automatically calibrate. The unit is remarkably stable however if there is a need for recalibration this can be done by touching the calibrate button on the screen which will recalibrate in less than a second.


    If the signal on any trace exceeds the threshold line (the dotted line on the screen) and the Mute Button is off then an audio signal will be produced.

    These thresholds can be adjusted up and down by touching the screen above or below each trace line.

    6. Adjustment of PW and DLY

    The duration of the Pulse to the coil and the delay between pulses can be adjusted through the touch display.This is really in place to experiment with so various environments and treasures can be tested for best results.

    7. Display Types

    There are 4 different display types

    Display Option 1: Position of Target under Detector Head
    My intention was to use the 4 coils to triangulate the position of the target under the detector head. The nonlinear nature of the search coils made this challenging however the animated GIF above shows the results are useful enough to show the relative position of the target under the head as well as the strength of the signal.

    Display Option 2: Show Signal Trace for Each Search Coil This enables you to track where the target object is under the head by drawing an independent signal strength trace on the screen for each search coil. This is useful to determine if you have two targets close together under the detector head and the relative strength.

    Display Option 3: Same as option 2, however, with thicker line makes it easier to see.

    Display Option 4: Same as option 2, however, draws over 5 screens before deleting trace. Good for capturing signals that are faint.

    I am field testing over the next few weeks so will be publishing any treasure finds.

    Now go have some fun and find some treasure!!

    Step 8: Epilogue: Coil Variations

    Picture of Epilogue: Coil Variations

    There have been a lot of good, interesting questions and suggestions about coil configurations. In the development of this instructable, there were numerous experiments with various coil configurations that are worth mentioning.

    The pictures above show some of the coils I tried prior to settling on the current design. If you have further questions message me.

    Over to you to experiment further!


    dotracy (author)2017-11-10

    Excellent project! But I have a few questions.

    I tried uploading both the Test and V8 files prior to wiring the electronics expecting to be able to at least check out the LCD display. No display with either? Is the program expecting an input to enable the display?

    In the parts list you mention that code is included for three supported touch screen versions and in the program comments it states that parameters should be adjusted to your display/shield model. How is this done as it was not obvious to me?

    Also, have you completed your field testing and do you have any updates?

    TechKiwiGadgets (author)dotracy2017-11-11


    1. Blank white display - Check that the correct display hardware type is included in the code setup - The code has provision for SSD1289 and ILI9341 with SSD1289 as default. Try changing enabling the ILI9341 line and commenting out the SSD1289 - often this is the issue.

    2. The URtouch.Zip file included in the instructable comes with a calibration sketch that you can load and use to calibration the screen with manual offsets in the setup code. Only use this if there is a noticeable issue when using buttons on the screen. The calibration sketch comes with instructions.

    3. Have tested with reasonable results. I will do so more over our summer in NZ and report back with results.

    Let me know if you need any more help.

    dotracy (author)TechKiwiGadgets2017-11-11

    Thank you for the quick response.

    I changed the display type to match and it now works fine! Much appreciated.

    IyadS2 (author)2017-08-07

    I Love it. nd i'm already making it. i only have one question how can i have a professionel depth for big targets. let's say like 2 metres or less.. is by adjusting the coils.

    TechPaul (author)IyadS22017-10-24

    I want to try a higher voltage with the coils driven by MOSFETs, A 12volt battery pack to feed the Mega(down to 5v) and Coils

    MikeM272 (author)IyadS22017-09-06

    You must place a black dot where lines cross and join on a schematic.

    TechKiwiGadgets (author)MikeM2722017-09-08

    Thanks just updated now.

    RoyB25 (author)2017-10-08

    Hello, is it also possible to discriminate metals?

    TechKiwiGadgets (author)RoyB252017-10-11


    I tried various metals and found that there were varying pulse widths based on type of metal however it was difficult to really discriminate as if the size of objects varied so I left discrimination out of the code.

    Saadk21 (author)2017-10-05

    i have some questions

    how would we increase its searching depth?

    can we use double dd configuration (coil)?

    what is the relation between diameter of coil and number of turns in it on depth or any other thing?

    TechKiwiGadgets (author)Saadk212017-10-06

    Hi I tried a variety of different coil configurations and for this application felt this was best. In theory, the size of the coil has a bearing on depth. I did some limited testing with a different TX driver circuit to increase coil current and larger coils however didnt really get better results. It's worth experimenting to see if you get improved results. Let me know how you get on.

    Saadk21 (author)TechKiwiGadgets2017-10-06

    thanks for reply. if i get any improvement i will tell you.

    EmilA1 (author)2017-09-30

    Which coil is which?

    Where should they be linked?

    TechKiwiGadgets (author)EmilA12017-09-30

    Hi see step 3. The exterior coil 7cm diameter in each pair is the transmit coil as noted on the circuit at TX. Hope this helps.

    EmilA1 (author)TechKiwiGadgets2017-09-30

    I mean the location, which is 1, 2, 3 and 4?

    pope54 (author)2017-09-16

    Hola no se que estoy haciendo mal, hago el test y me da 20uS y sensibilidad mala, si cambio la bobina RX por TX llega 4800uS y se hace mas sensible pero no va como debiera gracias.

    Hi I do not know what I am doing wrong, I do the test and it gives me 20uS and bad sensitivity, if I change the coil RX for TX it arrives 4800uS and it becomes more sensitive but it does not go as it should thanks.

    google translate

    TechKiwiGadgets (author)pope542017-09-16

    Can you message me some pictures or a video of the circuit so I can see how the circuit is connected. I will be happy to help.

    pope54 (author)TechKiwiGadgets2017-09-18

    hola tengo una duda, que volviera el metes por el VIN

    Hi, I have a question, what voltage do you get for the VIN?

    TechKiwiGadgets (author)pope542017-09-23


    Vin comes directly from the USB power socket via the rechargeable battery.

    THis varies dependent on the unit you choose. I can measure with an oscilloscope if this is important to you.


    pope54 (author)TechKiwiGadgets2017-09-17

    podría ser que el problema estuviera en el condensador

    it could be that the problem was in the capacitor

    TechKiwiGadgets (author)pope542017-09-17

    1. Try reversing the polarity of the input signal into one coil. See "Step 4: Assemble Circuit for Testing"

    2. The Capacitors should be a Greencap Polyester as viewed here

    Let me know if that helps

    pope54 made it! (author)TechKiwiGadgets2017-09-17

    terry.jones (author)2017-09-14

    I think the link to the Arduino+touch LCD+LCD shield is broken. Is this the same one?

    Thanks for letting me know. This combination will work, there are different screen controllers and this is the SSD1289 which is supported in the code so you just need to enable.

    Let me know if there are any issues as Im happy to help.

    PrimalEng (author)2017-09-12

    Very cool project. Thank you for your presentation.

    Is the Mega needed simply because of the LCD gobbling up arduino resources?

    No probs thanks for the feedback. The graphics require a parallel bus to draw the screen in real time so I used a Mega for this.
    It can be done using a serial bus, however, the graphics display struggles to respond fast enough. Hope this helps.

    Thanks for the reply. I only asked to make certain Uno's were not capable.

    With the coils, are the wraps to be most ideal as parallel, never crossing, therefore resulting in about a 40x0.3mm=12mm tall cylinder? Or, would they be more ideal as a single layer stacked so the cylinder would only be 0.3mm tall but 12mm from inner radius to outer radius? Or, does it not really matter?

    I wrapped them around a cardboard cylinder and ensured they are tightly wound with minimum movement. I used hot glue to fix them into position.

    I tried various coils winds and didnt notice a lot of difference in performance.

    EmilA1 (author)2017-08-18

    Please, we need a bigger images for the breadboard schematics!

    TechKiwiGadgets (author)EmilA12017-08-18

    Sure thing, here are two that may help.

    JeromeS29 (author)2017-08-11

    100v or 630v caps?

    THe supply voltage is 5v so iether will do. However 50v-100v Greencap Polyester Capacitors is what I used. I will update the parts list to be more specific.

    JeromeS29 (author)2017-08-11

    you need enamaled copper wire for the coils, right?

    Yes enameled copper wire.

    ΧρήστοςΛ (author)2017-08-07

    Great idea. .
    Easy construction. .
    Thanks for publishing. ! ! ! !

    Thanks, glad you like.

    kbudzyński made it! (author)2017-08-07

    Is the place marked with an arrow connected?

    Yes that is correct this is a connection to the transistor collector, 1M and the 10K resistor

    Mortalum (author)2017-08-04

    Does any method for target ID exist? Even planting coins and making a chart? Even if there is no target discrimination I'm likely going to make one. This is great and I love that you made your own coils.

    TechKiwiGadgets (author)Mortalum2017-08-06

    Thanks. No target ID included in this design. Good luck with the build and let me know if you need any help.

    Ratty Bunyip (author)2017-08-06

    Very nice peice of work. Looking at the design I had a thought. Given the four coils enable it to distinguish left from right, then a small redesign might enable a set of stereo headphones to be used and the audio signal split proportionally. I have never used a serious detector but I would suspect this change might help the initial locating before using the screen. Maybe something for a version 2?

    Great idea, thanks. Currently, if any of the coil thresholds are breached then there is a tone generated.

    hatoupix (author)2017-08-04

    Hi, great job !!! I'll make it next week ;-)

    I've questions about head/coils : in your post u said you have modify the head by a more simple ... now how many coils have you ? 8 or 2 (1 tx and 1 rx) ? and which are spaces between each ? have you some pictures ?



    TechKiwiGadgets (author)hatoupix2017-08-04

    Sure thing. There are 8 coils.

    There is a stencil in the section covering the construction of the head with dimensions included.

    After building I realised that I probably could have just used a single disc of MDF and glued the coils to that instead of building the elaborate cut outs described.

    This would reduce the weight of the head and make it simpler to make.

    Therefore you can print out the stencil to scale, glue to the MDF and then use this as a guide for positioning the coils.

    hatoupix (author)TechKiwiGadgets2017-08-06

    ok, thanks !



    100% COOL . . .

    : D

    thanks glad that you like it!!

    ericCycles (author)2017-07-26

    I love the design. I just have two questions about it.
    1) The description talks about eddy currents reducing the length of the time the field is sustained. The other possible cause would be the nature of the metal changing the inductance. If this was the case, I'd expect a ferromagnetic object to delay the fields collapse, and a non-ferromagnetic object (like copper or aluminum) to speed up the collapse. If it was eddy currents, you'd expect the both types of metals to have the same effect.
    2) the signal diodes across the transistors hooked up to the transmitting coils look curiously placed. My understanding of inductors is that when the field collapses, the energy reclaimed from the field drives electrons in the same direction as they were already going. In which case, I would have thought the diodes should be across the transmitting coils, not the transistors. I would be interested to know if any current flows through the diodes in their current placement.

    JohnC430 (author)ericCycles2017-07-27

    i agree with you. i also noticed that. the diodes should be across the coils with the cathode terminal on the +Vin. and to answer one of the other commenters about 180 uh and 80 uh etc.

    do the math E = L*di/dt. those are very long pulses almost 4 mS.

    1) Interesting I will try out tonight and see if I can see if there is a distinction in pulse width based on metal types.

    2) Good point about the diodes. I put them there originally to protect the transistor from back emf spikes and found they had a material impact on the overall performance of the circuit. I didnt try them across the coil so will try and let you know the results.

    About This Instructable




    Bio: Crazy about technology and the possibilities it can bring. I love the challenge of building unique things. My goal is to make technology fun, relevant ... More »
    More by TechKiwiGadgets:Eco Friendly Metal Detector - ArduinoRetro Pac-Man ClockInteractive LED Shoes - Arduino
    Add instructable to: