图标

DIY非常简单的Arduino金属探测器

0 556 简单的

这次,我将向您介绍如何构建非常简单的金属探测器。尽管它很简单,但在操作过程中具有相对较好的灵敏度和完美的稳定性,因此即使在长时间操作中也没有任何校准。同样,检测线圈的尺寸和电感并不重要,最重要的是,它在制作后肯定会立即对您有用。这使其成为初学者的理想金属探测器。

基本上,该项目是从硅交界博客中接管的,我只是在金属检测过程中添加了一个声音指示。检测部分是一个简单的COLPITTS振荡器,其共振电路由C2,C3和SEERCH_COIL组成。该振荡器的频率约为260kHz。

完整的设备由几个组件组成:

硬件列表
1 Arduino Nano
1 通用晶体管NPN
3 LED(通用)
1 蜂鸣器
1 Zener单二极管,4.3 V
1 搜索线圈
1 电阻
1 电容器

Zener二极管D1用于将Arduino销的电压限制为安全的4.3V。C5和R4确保振荡器的输出参考地面。
任何具有200-400UH左右电感的线圈都应起作用,您应该尝试保持阻力相当低。这将使您的频率约为200-400 kHz,该kHz属于Arduino可以处理的范围内。我使用了直径为20厘米的线圈,含有25圈,但是该检测器的直径为12厘米和23厘米的两个浓度放置的线圈也非常正确,它们的直径为12厘米,两个弯道都有25圈,并串联连接。

项目图

Arduino代码每100毫秒计算出多少脉冲,并将其作为基线存储。在主循环计数中,在100毫秒中发生了多少脉冲,将其存储为计数。如果计数从基线又转换为LED,并激活蜂鸣器。这意味着检测器每100毫秒连续校准。借助Freqcount库,该代码相对简单,您还可以从给定的链接下载。
这种类型的代码的优点是,为了使设备工作,不需要进行调整或校准,但不利的一面是,要检测金属对象,需要就对象移动相关线圈,反之亦然。

项目图
项目图
代码
#include  //主搜索线圈的基线频率unsigned长基线= 0;//固定在红色,绿色和蓝色的LED上。const int bluepin = a2;const int greenpin = a4;const int redpin = a5;const int buzzerpin = 12;void setup(){//将我们的LED引脚设置为输出pinmode(redpin,output);pinmode(greenpin,输出);Pinmode(Bluepin,输出);Pinmode(Buzzerpin,输出); //Flash a sequence to test the LEDs and show we are starting up digitalWrite(redPin,HIGH); delay(200); silence(); digitalWrite(greenPin,HIGH); delay(200); silence(); digitalWrite(bluePin,HIGH); delay(200); silence(); //Read out baseline frequency count, 100ms intervals FreqCount.begin(100); while(!FreqCount.available()) { delay(10); } baseLine = FreqCount.read(); if(baseLine > 10000) { //Green, we started up OK digitalWrite(greenPin,HIGH); } else { //Red, something went wrong, we didn't get a sensible count digitalWrite(redPin,HIGH); } delay(1000); silence(); } void loop() { //no sample ready yet, exit. if (!FreqCount.available()) { return; } //Read how many pulses in 100 milliseconds unsigned long count = FreqCount.read(); long difference = baseLine - count; difference = abs(difference); //Difference is large, turn on the RED led if(difference > 5) { digitalWrite(greenPin,LOW); digitalWrite(bluePin,LOW); digitalWrite(redPin,HIGH); digitalWrite(buzzerPin,HIGH); } else if(difference > 2) //medium difference, green { digitalWrite(greenPin,HIGH); digitalWrite(bluePin,LOW); digitalWrite(redPin,LOW); digitalWrite(buzzerPin,HIGH); } else if(difference > 1) //small difference, blue. { digitalWrite(greenPin,LOW); digitalWrite(bluePin,HIGH); digitalWrite(redPin,LOW); digitalWrite(buzzerPin,HIGH); } else { silence(); //no difference, turn off all LEDs digitalWrite(buzzerPin,LOW); } //Auto-adjust our baseline if(count > baseLine) { baseLine +=1; } else if (count < baseLine) { baseLine -= 1; } } //Turn off all output pins void silence() { digitalWrite(redPin,LOW); digitalWrite(greenPin,LOW); digitalWrite(bluePin,LOW); }
执照
所有权利
预订的
许可
0