金属探测器是一种安全设备,用于在机场、购物中心、电影院等各个地方检测可能有害的金属。以前我们制作了一个非常简单的金属探测器,没有微控制器,现在我们正在使用 Arduino 构建金属探测器。在这个项目中,我们将使用一个线圈和电容器来检测金属。在这里,我们使用Arduino Nano来构建这个金属探测器项目。对于所有电子爱好者来说,这是一个非常有趣的项目。无论该探测器在哪里检测到附近的任何金属,蜂鸣器都会开始非常迅速地发出哔哔声。
所需组件:
以下是使用 Arduino 构建简单 DIY 金属检测机所需的组件。所有这些组件都应该在您当地的五金店轻松买到。
Arduino (任何)
线圈
10nF 电容器
蜂鸣器
1k 电阻器
330欧姆电阻器
发光二极管
1N4148二极管
面包板或印刷威廉希尔官方网站 板
连接跳线
9v 电池
金属探测器如何工作?
每当一些电流通过线圈时,它就会在其周围产生磁场。磁场的变化会产生电场。现在根据法拉第定律,由于这个电场,线圈上产生一个电压,它反对磁场的变化,这就是线圈产生电感的方式,意味着产生的电压反对电流的增加。电感的单位是亨利,测量电感的公式是:
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
当任何金属靠近线圈时,线圈会改变其电感。电感的这种变化取决于金属类型。非磁性金属的减少和铁等铁磁性材料的增加。
根据线圈的磁芯,电感值会发生巨大变化。在下图中你可以看到空芯电感器,在这些电感器中,将没有实心磁芯。它们基本上是留在空中的线圈。电感器产生的磁场流动介质是空气。这些电感器的电感值非常低。
这些电感器用于需要几个微亨利值时使用。对于大于几毫亨利的值,这些值不合适。在下图中,您可以看到带有铁氧体磁芯的电感器。这些铁氧体磁芯电感器具有非常大的电感值。
请记住,这里的线圈是空气芯线圈,因此当金属片靠近线圈时,金属片充当空芯电感器的磁芯。通过这种金属作为铁芯,线圈的电感会发生变化或显着增加。随着线圈电感的突然增加,与不使用金属片相比,LC威廉希尔官方网站 的整体电抗或阻抗发生了相当大的变化。
因此,在这个Arduino金属探测器项目中,我们必须找到线圈的电感来检测金属。因此,为此,我们使用了我们已经提到的LR威廉希尔官方网站 (电阻电感威廉希尔官方网站 )。在这个威廉希尔官方网站 中,我们使用了大约 20 圈的线圈或直径为 10 厘米的绕组。我们使用了一个空的胶带卷,并将电线缠绕在其周围以制作线圈。
威廉希尔官方网站 图:
我们使用Arduino Nano来控制整个金属探测器项目。LED 和蜂鸣器用作金属检测指示器。线圈和电容器用于检测金属。信号二极管也用于降低电压。以及一个用于限制 Arduino 引脚电流的电阻器。
工作说明:
这个Arduino金属探测器的工作有点棘手。在这里,我们将Arduino产生的块波或脉冲提供给LR高通滤波器。因此,线圈在每次转换中都会产生短尖峰。产生的尖峰的脉冲长度与线圈的电感成正比。因此,借助这些尖峰脉冲,我们可以测量线圈的电感。但是在这里很难用这些尖峰精确测量电感,因为这些尖峰的持续时间非常短(约0.5微秒),而Arduino很难测量。
因此,我们没有这样做,而是使用由上升脉冲或尖峰充电的电容器。它需要很少的脉冲即可将电容器充电到Arduino模拟引脚A5可以读取其电压的程度。然后Arduino使用ADC读取该电容器的电压。读取电压后,电容器通过使capPin引脚作为输出并将其设置为低电平来快速放电。整个过程大约需要 200 微秒才能完成。为了获得更好的结果,我们重复测量并取平均值。这就是我们如何测量线圈的近似电感。获得结果后,我们将结果传输到LED和蜂鸣器以检测金属的存在。检查本文末尾给出的完整代码以了解其工作原理。
本文末尾给出了完整的Arduino代码。在本项目的编程部分,我们使用了两个Arduino引脚,一个用于产生要馈入线圈的块波,另一个用于读取电容电压的模拟引脚。除了这两个引脚之外,我们还使用了另外两个Arduino引脚来连接LED和蜂鸣器。
/*
Metal Detector Arduino Code
#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>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);
}
}
-
探测器
+关注
关注
14文章
2639浏览量
73022 -
金属探测器
+关注
关注
19文章
79浏览量
24372 -
Arduino
+关注
关注
188文章
6469浏览量
187028
发布评论请先 登录
相关推荐
评论