金屬探測器是一種安全設備,用于在機場、購物中心、電影院等各個地方檢測可能有害的金屬。以前我們制作了一個非常簡單的金屬探測器,沒有微控制器,現(xiàn)在我們正在使用 Arduino 構建金屬探測器。在這個項目中,我們將使用一個線圈和電容器來檢測金屬。在這里,我們使用Arduino Nano來構建這個金屬探測器項目。對于所有電子愛好者來說,這是一個非常有趣的項目。無論該探測器在哪里檢測到附近的任何金屬,蜂鳴器都會開始非常迅速地發(fā)出嗶嗶聲。
所需組件:
以下是使用 Arduino 構建簡單 DIY 金屬檢測機所需的組件。所有這些組件都應該在您當?shù)氐奈褰鸬贻p松買到。
Arduino (任何)
線圈
10nF 電容器
蜂鳴器
1k 電阻器
330歐姆電阻器
發(fā)光二極管
1N4148二極管
面包板或印刷電路板
連接跳線
9v 電池
金屬探測器如何工作?
每當一些電流通過線圈時,它就會在其周圍產(chǎn)生磁場。磁場的變化會產(chǎn)生電場?,F(xiàn)在根據(jù)法拉第定律,由于這個電場,線圈上產(chǎn)生一個電壓,它反對磁場的變化,這就是線圈產(chǎn)生電感的方式,意味著產(chǎn)生的電壓反對電流的增加。電感的單位是亨利,測量電感的公式是:
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
當任何金屬靠近線圈時,線圈會改變其電感。電感的這種變化取決于金屬類型。非磁性金屬的減少和鐵等鐵磁性材料的增加。
根據(jù)線圈的磁芯,電感值會發(fā)生巨大變化。在下圖中你可以看到空芯電感器,在這些電感器中,將沒有實心磁芯。它們基本上是留在空中的線圈。電感器產(chǎn)生的磁場流動介質(zhì)是空氣。這些電感器的電感值非常低。
這些電感器用于需要幾個微亨利值時使用。對于大于幾毫亨利的值,這些值不合適。在下圖中,您可以看到帶有鐵氧體磁芯的電感器。這些鐵氧體磁芯電感器具有非常大的電感值。
請記住,這里的線圈是空氣芯線圈,因此當金屬片靠近線圈時,金屬片充當空芯電感器的磁芯。通過這種金屬作為鐵芯,線圈的電感會發(fā)生變化或顯著增加。隨著線圈電感的突然增加,與不使用金屬片相比,LC電路的整體電抗或阻抗發(fā)生了相當大的變化。
因此,在這個Arduino金屬探測器項目中,我們必須找到線圈的電感來檢測金屬。因此,為此,我們使用了我們已經(jīng)提到的LR電路(電阻電感電路)。在這個電路中,我們使用了大約 20 圈的線圈或直徑為 10 厘米的繞組。我們使用了一個空的膠帶卷,并將電線纏繞在其周圍以制作線圈。
電路圖:
我們使用Arduino Nano來控制整個金屬探測器項目。LED 和蜂鳴器用作金屬檢測指示器。線圈和電容器用于檢測金屬。信號二極管也用于降低電壓。以及一個用于限制 Arduino 引腳電流的電阻器。
工作說明:
這個Arduino金屬探測器的工作有點棘手。在這里,我們將Arduino產(chǎn)生的塊波或脈沖提供給LR高通濾波器。因此,線圈在每次轉(zhuǎn)換中都會產(chǎn)生短尖峰。產(chǎn)生的尖峰的脈沖長度與線圈的電感成正比。因此,借助這些尖峰脈沖,我們可以測量線圈的電感。但是在這里很難用這些尖峰精確測量電感,因為這些尖峰的持續(xù)時間非常短(約0.5微秒),而Arduino很難測量。
因此,我們沒有這樣做,而是使用由上升脈沖或尖峰充電的電容器。它需要很少的脈沖即可將電容器充電到Arduino模擬引腳A5可以讀取其電壓的程度。然后Arduino使用ADC讀取該電容器的電壓。讀取電壓后,電容器通過使capPin引腳作為輸出并將其設置為低電平來快速放電。整個過程大約需要 200 微秒才能完成。為了獲得更好的結(jié)果,我們重復測量并取平均值。這就是我們?nèi)绾螠y量線圈的近似電感。獲得結(jié)果后,我們將結(jié)果傳輸?shù)絃ED和蜂鳴器以檢測金屬的存在。檢查本文末尾給出的完整代碼以了解其工作原理。
本文末尾給出了完整的Arduino代碼。在本項目的編程部分,我們使用了兩個Arduino引腳,一個用于產(chǎn)生要饋入線圈的塊波,另一個用于讀取電容電壓的模擬引腳。除了這兩個引腳之外,我們還使用了另外兩個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文章
2631瀏覽量
72997 -
金屬探測器
+關注
關注
19文章
79瀏覽量
24361 -
Arduino
+關注
關注
188文章
6468瀏覽量
186951
發(fā)布評論請先 登錄
相關推薦
評論