DIY Metal Detector using Arduino step by step

DIY Metal Detector using Arduino step by step

How to make a metal Detector

Welcome to the Techatronic, in this article we will share with you How to make a metal Detector with the Arduino. Arduino is the basic controller board that is using widely in the area of basic level projects. so this project I am making also on the same. A metal detector is an interesting and important project. which can be used as many placed like Metal waste segregator, and finding metal from the ground and many other places. I use the metal detector to find out the metal from my garden so that I will never hurt with that small pieces of metal. this metal detector is very easy and simple to make. you only need a small electronic circuit and have to embed this circuit with the Arduino board. So, let Talk about the working of the Arduino metal detector.

Diy metal detector

How does it work?

As we can see there are three things which are using to complete the whole project. Electronic circuit, Arduino, and a copper coil. here actually we are making a proximity sensor that detects the metal with metal detector Arduino . with the help of the RC circuit built in the Electronics part. now when we take this project near the metal it senses the metal near it due to the electromagnetic waves transmitted from the coil. hence with these electromagnetic waves, the circuit sends a signal to the Arduino. Arduino compares and processes the data and sends the instruction to the buzzer and the LED according to the code. the coil will generate the electromagnetic waves and when we take it near to the metal the electromagnetic waves get distorted. and Arduino gives the instruction according to all these data variations. Here are more Arduino projects like Gesture Control Robot using Arduino to check it also.

Arduino metal detector- DIY Metal Detector with Arduino

At whatever point some present goes through the loop, it produces a magnetic field around it. Furthermore, the adjustment in the magnetic field produces an electric field. Presently as per Faraday’s law, due to this Electric field, a voltage creates over the curl which contradicts the adjustment in an attractive field and that is the way Coil builds up the Inductance, which implies the produced voltage restricts the expansion in the flow. This is the easiest metal detector project The unit of Inductance is Henry and equation to quantify the Inductance is:

 

L = (μο * N2 * A) / l

Where, L- Inductance in Henries

μο- Permeability,

its 4π*10-7 for Air

N- Number of turns

A- Inner Core Area (πr2) in m2 l-

Length of the Coil in meters

Circuit Diagram DIY metal detector:- 

DIY METAL DETECTOR CIRCUIT DIAGRAM

 

Arduino Code for DIY metal Detector:- 

 

#define capPin A5
#define buz 9
#define pulsePin A4

#define led 10

long sumExpect=0; //running sum of 64 sums 
long ignor=0;   //number of ignored sums
long diff=0;        //difference between sum and avgsum
long pTime=0;
long buzPeriod=0; 

void setup() 
{
  Serial.begin(9600);
  pinMode(pulsePin, OUTPUT); 
  digitalWrite(pulsePin, LOW);
  pinMode(capPin, INPUT);  
  pinMode(buz, OUTPUT);
  digitalWrite(buz, LOW);
  pinMode(led, OUTPUT);
}

void loop() 
{
  int minval=1023;
  int maxval=0;
  long unsigned int sum=0;
  for (int i=0; i<256; i++)
  {
    //reset the capacitor
    pinMode(capPin,OUTPUT);
    digitalWrite(capPin,LOW);
    delayMicroseconds(20);
    pinMode(capPin,INPUT);
    applyPulses();
    
    //read the charge of capacitor
    int val = analogRead(capPin); //takes 13x8=104 microseconds
    minval = min(val,minval);
    maxval = max(val,maxval);
    sum+=val;
    
    long unsigned int cTime=millis();
    char buzState=0;
    if (cTime<pTime+10) { if (diff>0)
        buzState=1;
      else if(diff<0) buzState=2; } if (cTime>pTime+buzPeriod)
    {
      if (diff>0)
      buzState=1;
      else if (diff<0) buzState=2; pTime=cTime; } if (buzPeriod>300)
    buzState=0;

    if (buzState==0)
    {
      digitalWrite(led, LOW);
      noTone(buz);
    }  
    else if (buzState==1)
    {
      tone(buz,100);
      digitalWrite(led, HIGH);
    }
    
    else if (buzState==2)
    {
      tone(buz,500);
      digitalWrite(led, HIGH);
    }
  }

  //subtract minimum and maximum value to remove spikes
  sum-=minval; 
  sum-=maxval;
  
  if (sumExpect==0) 
  sumExpect=sum<<6; //set sumExpect to expected value long int avgsum=(sumExpect+32)>>6; 
  diff=sum-avgsum;
  if (abs(diff)>10)
  {
    sumExpect=sumExpect+sum-avgsum;
    ignor=0;
  } 
  else 
    ignor++;
  if (ignor>64)
  { 
    sumExpect=sum<<6;
    ignor=0;
  }
  if (diff==0) 
    buzPeriod=1000000;
  else 
  buzPeriod=avgsum/(2*abs(diff));    
}

void applyPulses()
{
    for (int i=0;i<3;i++) 
    {
      digitalWrite(pulsePin,HIGH); //take 3.5 uS
      delayMicroseconds(3);
      digitalWrite(pulsePin,LOW);  //take 3.5 uS
      delayMicroseconds(3);
    }
}  

Upload the given Code into the Arduino With the help of Arduino IDE