金属探测器,听上去有点高端,下面我们只用一个 Arduino、10 米长的铜丝线、一个 100 欧电阻和一个无源蜂鸣器来制造它。
可以根据需要将探测器设计成各种尺寸和形状,不同之处在于线圈的制作。虽然这款金属探测器还没有达到寻宝的需求,但做成小型手持探测棒,用于日常检查金属物品还是很有用的。不仅可以帮你找到硬币之类的小东西,还可以用来探测家具拼接处、墙面装修所用的金属螺丝或钉子来帮助了解结构。
metal_detector.ino
[7393 Bytes at 2020-12-08, 117 次下载]
简易制作一个至少 20 圈的铜丝线圈,50 圈以上更佳。绕的越多探测效果会越好。探测器对大于线圈直径十分之一的物体比较灵敏。因此线圈越小,其灵敏度越高。最终制成的线圈总阻值不能大于 10 欧姆。
我这里用的是 AWG26 漆包线,直径 0.4 毫米。每米电阻 0.13 欧姆。缠绕了 60 匝,圈内直径 6.3 厘米。用去了约 12 米漆包线,电阻为 1.5 欧姆。
下载本项目的代码文件到 Arduino。代码文件在项目文件库中下载。
https://make.quwj.com/project/344
将线圈两头的引线分别接到 Arduino 的引脚 8 和引脚 10。
在引脚 8 和 GND 之间接上一个 100 欧姆电阻。
在 GND 和引脚 12 之间串联一个无源蜂鸣器和 10 微法电容。
试试看!当把金属物件放到线圈附近时,Arduino 上内置的 LED 会开始闪烁,蜂鸣器也以相同的频率响起。
如果没有效果,可以通过 LED 的闪烁模式来排查问题:
只闪一次——探针上没有脉冲,需要检查连线是否有问题。
双重闪烁——延时过短,需要增加线圈匝数。
三重闪烁——延时过长,需要减少线圈匝数。
四重闪烁——无稳定脉冲,需要确认线圈的电阻是否符合要求。
为了更细致的排错,还可以将代码中的 debug false 修改成 debug true。可以看到串口监视器反馈的延时数值。建议调节线圈让数值在 5 ~ 20 之间。
金属探测器由两部分组成,检测线圈和滤波电路。其中检测线圈为核心部分。线圈通电后会产生磁场,有金属进入磁场,就是引起磁场变化,由此判断有金属杂质。
这里的挑战在于脉冲延迟非常短:RL电路的特征时间为 tau = L/R,其中 L 表示亨利,R 表示欧姆。我们使用的线圈电感约为 300 微亨,因此对于 R = 100 欧姆,tau = 3 微秒。我们要寻找 1/5000 的电感变化。因此需要以优于 1 纳秒的精度来测量时间。
Arduino 的时钟速度为 16 MHz,这样的测量是不够精确的。但是可以通过组合大量的检测数据来提高精度。
但是,仅仅重复的测量是不够的,因为量化误差始终是相同的:如果延迟从 3.03 微秒变为 3.02 微秒,则延迟始终为 48 个时钟周期。为了克服这个问题,我们测量了一个短脉冲的下降沿的时序,并在此脉冲长度的 3 到 5 倍(最初发现的延迟值)之间进行扫描。
该代码旨在每秒测量 100 次电感,以便快速检测。对于 25 个时钟周期的脉冲延迟,将定时器设置为每 215 个时钟周期重复一次,因此在 10ms 内,可以重复扫描 50 个脉冲长度的 15 次,而 750 个脉冲的总延迟可以提供测量结果,延迟时间的分辨率为10^-4。
在启动时,将第一个测量值作为参考值。每当测量值相差超过预定义的阈值时,相位计数器就会开始递增。当相位计数器超过最大值时,将产生 1ms 的 LED 脉冲,并且蜂鸣器会同时发声。
按照图中所示焊接好电路,找一个大小合适的盒子,将电池和设备都放置进去。打孔并装上按钮即。
将探测棒用热熔胶粘接在手柄上,完成!