In this illustration we will going to wire the NPN Inductive Proximity Sensor to detect metal or any metal objects, this device also can be used as a metal detector screening when people walking through the entrance to find metal objects.
This metal sensor are inductive sensors. Which means that it induces current when metal is near to it. This sensor is a non-contact electronic sensor that is used detect positions of a metal objects. The sensing sensing range depend on the type of metal being detected. Ferrous Metal, such as iron and steel, allow for a longer sensing range, while nonferrous metal objects such as aluminum, copper, can reduce the sensing range by 60 percent. Since the output of an induction sensor has two possible states, an inductive sensor sometimes referred to as an inductive proximity switch.
This sensor consist an induction loop, electric current generates a magnetic field, which collapses generating a current that falls toward zero from its initial trans when the input electricity stops.
The inductance of the loop changes according to the material inside it and since metals are much more effective conductors that other materials the presence of metal increases the current flowing through the loop. This change can be detected by sensing circuitry which signal pass true to some other device whenever metal is detected.
This device is commonly used in traffic lights, car washes, manufacturing machinery, automated industrial machinery, elevators and building automatons this device is mostly used because can adopt in a rugged and dirt environment.
In this example we will going to used PNP NO 3-WIRE Cylindrical Inductive Proximity Sensor
Detecting Distance: 4mm
Supply Voltage: DC6-36V
Current Output: 300 mA
Response Frequency: 100Hz
Detect Object: Metal
Column Sensor Dia.12mm
Wiring Guide with Arduino MCU
The metal proximity sensor will have three color wire. The blue should be in the ground, brown is on +VCC which should be giving to Arduino + 5v VCC and when you take metal near tot the sensor it induces more current which results in higher voltage. In this case you need to open your serial monitor to see the incoming signal from the analog pin then make a threshold to determine if metal is detected or not.
Generally speaking the Iron/Copper or Metal with good magnetic properties will induce more that 1v when brought nearer to the sensor you need to touch the surface it will start detecting from a distance about 3CM.
Arduino Sketch
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 |
/* 14CORE TEST CODE FOR PROXIMITY SENSOR Metal Detection with 3 wire sensor http://www.14core.com */ float metalDetected; int monitoring; int metalDetection = 1; void setup(){ Serial.begin(9600); } void loop(){ monitoring = analogRead(metalDetection); metalDetected = (float) monitoring*100/1024.0; Serial.print("14CORE METAL DETECTOR TEST"); delay(500); Serial.print("Initializing Proximity Sensor"); delay(500); Serial.print("Please wait..."); delay(1000); Serial.print("Metal is Proximited = "); Serial.print(metalDetected); Serial.println("%"); if (monitoring > 250) Serial.println("Metal is Detected"); delay(1000); } |
Hi ,
Thanks for the article, i wanna ask you , this sensor, what is it detects range ?
Distance Detection: 4mm
Do you have a full spec sheet for the sensor?
The unshielded M18 inductive sensor has a sensing distance of ~10 mm. This sensor has NPN-style, NO+NC contact type output. Widely applied in measuring, Counting, Rpm measuring in mechanism, chemical, paper manufacture light industry, etc.
Specifications:
Rated Operational Voltage: 24 VDC
Supply Voltage: 10 to 30 VDC
Voltage drop: ≤ 2.0 V
Rated insulation voltage: ≥ 20 MΩ
Load current capacity(DC/AC): 200 mA
Off-state current(NPN/PNP): ≤ 15 mA
Leak current: ≤ 20 µA
Protection against polarity reversal: YES
Short circuit protected: YES
Load capacity: ≤ 1 µF
Repeated accuracy: ≤ 5%
Ambient temperature range: -15…+60°C
Frequency(DC 3/2 wires/AC 2 wires): 800 Hz/ 400 Hz
Function indication: Red LED Indicator
IP ratings: IP67
Housing material: Nickle plated brass
Material of sensing face: ABS
Connection: Fly Leads
No. of wires x gauge: 12 x 0.16 mm
Standard lenth of cable: 2 m
Detection distance: 10 mm
Approvals: CE
Great i have done with this, thank you :)
Anyway, Can I know, where 1024 and 100 from? what formula do you use?
The ADC on the Arduino is a 10-bit ADC meaning it has the ability to detect 1,024 (210) discrete analog levels, so anlogRead at PinA0~A5 multiply by 100 divided by 1024. (adc*100)/1024 to get the percentage value. :)
why do u use 250 for monitoring ? is it standard?
It is up to you what range value to read from the sensor, in my case
i get the range greater than > 250, so if the sensor value above 250 then print {myOutput}
Please refer to link below further info about analogRead>
https://www.arduino.cc/en/Reference/AnalogRead
https://www.arduino.cc/en/Reference/AnalogReference
https://www.arduino.cc/en/Tutorial/AnalogInputPins
https://www.arduino.cc/en/Reference/AnalogReadResolution
https://www.arduino.cc/en/Tutorial/AnalogInputPins
Hi, can I use external power for proximity? because I use 5V for 2 servos and ultrasonic sensor, so I think the less voltage is causing my inductive sensor value is lowest than 250, what do u think?
Yes of-course even you can wired with i2C/SPI/., Here’s how you going todo, > Sensor Ground to -5V(Gnd) / Sensor VCC to your External 5v Power Supply / Sensor Data to your Microcontroller / Microcontroller Ground to your Sensor Gound.
in this project used pnp proximity? if yes? can i use thn npn proximity? and what the source code use for npn prox?
This project uses positive logic, you can use npn for the code above. if your using PLC verify your RLL/Logic’s.
Hi,I’ve connected the output to D8 and I want to count the no. of times the sensor is triggered. How to do it?
just create a variable = count_detection and condition on every detection count 1 +++ >> see the example below.
float metalDetected;
int monitoring;
int metalDetection = 1;
int countRaw = 0;
void setup(){
Serial.begin(9600);
}
void loop(){
monitoring = analogRead(metalDetection);
metalDetected = (float) monitoring*100/1024.0;
Serial.print(“14CORE METAL DETECTOR TEST”);
delay(500);
Serial.print(“Initializing Proximity Sensor”);
delay(500);
Serial.print(“Please wait…”);
delay(1000);
Serial.print(“Metal is Proximited = “);
Serial.print(metalDetected);
Serial.println(“%”);
if (monitoring > 250)
countRaw ++;
Serial.println(“Metal is Detected”);
Serial.print(“Number of Detection > “);
Serial.println(countRaw);
delay(1000);
}
Does it work good with digital code on arduino instead of the analog one?
hello sir good afternoon I have used this code on my npn the problem is the Serial Monitor always gives an output of “Metal is Detected” even without making contact of metals ..
Thank you pls reply :)
Check your pin or perhaps you need to adjust the sensitivity you can see a trimmer the back of the sensor.
Is it possible to connect this sensor on a raspberry pi 3 b+ ?
if yes how ?
Yes! here the code..
#!/usr/bin/env python
import RPi.GPIO as GPIO # Import Raspberry Pi GPIO library
import urllib2
import datetime
# = GPIO 4 =
TrackingPin = 7
def button_callback(channel):
datetime.datetime.now().strftime(“%a, %d %B %Y %H:%M:%S”)
print(datetime.datetime.now())
print(“1L of water is used”)
url = “http://homeseer-ip:port/JSON?request=runevent&group=Energy&name=Watercounter”
f = urllib2.urlopen(url)
print f.read()
GPIO.setwarnings(False) # Ignore warning for now
GPIO.setmode(GPIO.BOARD) # Use physical pin numbering
GPIO.setup(TrackingPin, GPIO.IN, pull_up_down=GPIO.PUD_DOWN) # Set pin TrackingPin to be an input pin and set initial value to be pulled low (off)
GPIO.add_event_detect(TrackingPin,GPIO.RISING,callback=button_callback) # Setup event on pin TrackingPin rising edge
message = input(“Script started. Press enter to quit\n\n”) # Run until someone presses enter
GPIO.cleanup() # Clean up
Hey maan, I used 5vdc inductive proximity sensor with detection range 2mm. How about it ? What i should change ?
my inductive proximity sensor is giving me a constant reading values either detected metal or not
I want to see two different values here to use the turn on and off an led
Hey Can you please give me the link to download the Sensor Library for the above-used Proximity sensor in Proteus Software