亿迅智能制造网
工业4.0先进制造技术信息网站!
首页 | 制造技术 | 制造设备 | 工业物联网 | 工业材料 | 设备保养维修 | 工业编程 |
home  MfgRobots >> 亿迅智能制造网 >  >> Manufacturing Technology >> 制造工艺

袖珍金属定位器

组件和用品

SparkFun Arduino Pro Mini 328 - 5V/16MHz
× 1

必要的工具和机器

3D 打印机(通用)

关于这个项目

介绍:袖珍金属定位器 - Arduino

这款很酷的小型袖珍金属定位器足够灵敏,可以识别木头上的小钉子和大头钉,并且足够紧凑,可以放入尴尬的空间,便于携带和用于金属定位。

该装置具有四个独立的搜索线圈和彩色LED指示灯,可以在准确识别目标的同时轻松快速覆盖更大的搜索区域。

这个整洁的小设备通过一键操作进行自我校准,可通过 USB 端口充电,并使用彩色 LED、声音和振动来指示目标强度。

本教程中包含自行构建所需的所有设计、测试、代码和 3D 文件。我希望你和我一样喜欢构建和使用它!!

第 1 步:材料清单及其工作原理

1.怎么样 作品

袖珍金属定位器使用四个独立的脉冲感应搜索线圈,由 Arduino Pro Mini 供电。每个搜索线圈由单独的 TX 和 RX 线圈组成,其中一个脉冲被感应到 TX 线圈中,从而在 RX 线圈周围产生电磁场。变化的磁场在 RX 线圈中感应出电压,该电压在 Arduino 读取信号的脉冲宽度之前被检测和放大。

Arduino 代码中的平滑算法用于去除有效脉冲中的噪声,使其非常稳定。

代码中的校准算法在启动的短时间内取读数的平均值,并设置一系列阈值以与信号进行比较。

当金属物体进入电磁场范围内时,该场被破坏,一些能量从 RX 线圈转移到目标物体中形成的“埃迪电流”中。目标物体的这种寄生效应导致 RX 线圈中检测到的脉冲宽度减小。本质上,我们正在测量进入目标物体的功率损耗。

当 RX 线圈中检测到的脉冲宽度低于阈值时,LED 会亮起,蜂鸣器会发出声音并触发触觉反馈电机 - 取决于目标信号的预定大小。

在过去的一年里,用于此的电路已经发展成为一个非常稳定且性能可靠的检测器。线圈配置和方向经过精心设计,以最大限度地提高稳定性和深度检测。

2.材料清单

  • 3.7v 350mAh 锂电池尺寸:38mm x 20mm x 7.5mm
  • TP4056 USB LiPo 电池充电器数据表
  • 4.7K 电阻将 LiPo 电池充电电流限制在 300mA 以下
  • Arduino Pro Mini
  • FTDI USB 转串口模块,用于对 Mini Pro 进行编程
  • LM339 四路差分比较器集成电路
  • Vero 板 - 2 块切割成 20x9 孔和 34x9(正确方向见照片)
  • BC548 NPN 晶体管 x 4
  • 2N7000 MOSFET 开关 x 5
  • 压电蜂鸣器
  • 用于触觉反馈的硬币振动电机
  • WS2812 RGB LED 模块 x 4
  • 1k 电阻 x 4
  • 10k 电阻 x 4
  • 47 欧姆电阻 x 4
  • 2.2K 电阻 x 4
  • 150pf 陶瓷电容器 x 8
  • 0.18uF 聚酯电容器 x 4
  • 一卷 0.3 毫米漆包铜线(通常成卷约 25 克重量)
  • PCB 安装按钮开关
  • 热胶枪
  • 10 毫米钻头
  • 手持电钻
  • 适合标记 16 根独立电线的标签枪或胶带
  • 使用 3D 打印机

3.比较器操作

我对LM339的操作有很多疑问,所以我想我会给出更清楚的解释。

LM339 仅用作电压比较器,比较正负引脚之间的差分电压,并根据输入差分极性输出逻辑低或高阻抗(带上拉的逻辑高)。

在该电路中,比较器的正输入连接到 Vcc 线,Vcc 的上拉电阻应用于比较器输出。在这种配置中,实际上比较器的输出电压保持在高电平,直到负输入端的输入电压超过 3.5v

可以从 LM339 数据表中解释该操作,其中概述了“输入电压范围”介于 0 V 至 Vsup-1.5 V 之间

当IN-和IN+都在共模范围内时,如果IN-低于IN+和偏置电压,输出为高阻,输出三极管不导通

当 IN– 高于共模且 IN+ 处于共模范围内时,输出为低电平且输出晶体管正在吸收电流。下面链接到数据表和解释 http://www.ti.com/lit/ds/symlink/lm2901.pdf

lm2901.pdf

第 2 步:打印案例

3D 打印的案例是使用 5 个单独的打印完成的。尺寸和 3D 文件可在 Thingiverse 上找到。设计的中心是使设备易于握持,同时确保搜索线圈尽可能靠近被搜索区域。

仔细打印外壳并去除多余的塑料。现在执行此步骤很重要,以便在最终连接和测试之前将电子元件在外壳中对齐。

第 3 步:构建和安装搜索线圈

取出印刷线圈架并在每个线圈架上缠绕 25 匝铜线。确保留出 20 厘米的额外铜线以连接到主机。

使用线圈上印刷的孔,使每个线圈的线圈缠绕和方向一致。执行此操作时,将前者倒置并逐渐将前者粘合到基本单元中。

按照提供的照片组装,结果是 8 个线圈安装在线圈组件中,所有电线的方向一致,并且足够长以连接到上部外壳中的主板单元。

使用两个导丝块,每个线圈都有孔,印刷底座可以跟踪每个特定的线圈。

我将内线圈的电线沿着接线盒的顶部放置,外线圈沿着接线块的底部放置,这样我就可以跟踪每个特定的线圈,从而更容易连接到主板。

第 4 步:构建电路

该单元具有四个独立构建的关键电路 - 驱动板、主板、LED 组件和可充电电源。在这一步中,我们将构建驱动板和主板。

1.驱动板

使用工艺刀沿着孔 22x11 切割一块 Vero 板,结果是一块带有 20x9 孔的 Vero 板,按照附带的图片定向。最好在板子两侧的孔上多次划线,然后轻轻地折断多余的板子。检查电路板是否位于机柜底部,两侧有足够的间隙。

用手使用照片和 10 毫米钻头小心地打破 Vero 板底部显示的大头钉。按照电路图和元件照片布局组装电路板,小心确保没有短路。

把这块板子放在一边,待会儿测试。

2.主板

使用工艺刀沿着孔 36x11 切割一块 Vero 板,结果是一块带有 34x9 孔的 Vero 板,按照附带的图片定向。最好在板子两侧的孔上多次划线,然后轻轻地折断多余的板子。检查电路板是否位于机柜底部,两侧有足够的间隙。

使用照片和手动 10 毫米钻头小心地打破 Vero 板底部显示的大头钉。

按照Arduino和LM339 IC和其他组件的电路图和照片布局组装电路板,小心确保没有短路。

把这块板子放在一边,待会儿测试。

第 5 步:添加 LED 指示灯

我使用了 WS2182 LED,它有一个内置 IC,使它们能够由 Arduino 使用三根单独的电线寻址,但是可以通过向 LED 发送命令来创建广泛的颜色和亮度颜色。这是通过加载到测试部分中介绍的 Arduino IDE 中的特殊库来完成的。

1.将 LED 安装在线圈外壳盖中

小心地放置四个 LED,使其方向正确,使 VCC 和 GND 连接对齐并位于孔的中心。

使用热胶将 LED 固定到位。

2.为 LED 接线

小心地将三根 25 厘米长的单芯连接线剥离并放置在 LED 的触点上。

将它们焊接到位,并确保中心数据线与照片中的 IN 和 OUT 触点连接。

3.案例对齐检查

检查外壳的盖子是否与线圈外壳齐平,然后使用热胶将电线固定在盖子底部的位置。

将其留作以后测试。

第 6 步:组装和测试单元

1.准备组装

在组装之前,我们会逐步测试每块电路板,以便更轻松地解决问题。

Arduino Pro Mini 需要一个 USB 串行板才能由您的 PC 进行编程。这使得电路板的尺寸更小,因为它没有串行接口。要对这些电路板进行编程,您需要投资购买零件清单中列出的电路板。

在加载 Arduino 代码之前,您需要添加库“FastLED.h”作为驱动 WS2182 LED 的库。如果出现问题,已提供一系列示波器跟踪用于故障排除。

还有一个使用 Graph Plot 功能的 IDE 串行数据输出屏幕截图,其中显示了每个通道的脉冲宽度输出以及阈值。这在测试期间很有用,因为您可以查看每个通道的性能是否达到相似的灵敏度水平。

我已经包含了代码的两份副本。一种是测试串行数据流以进行故障排除。

注意: 在最后一步之前不要连接锂聚合物电池单元,因为在组装过程中不小心将其短路会导致单元过热甚至着火。

2.测试主板

在将主板连接到任何东西之前,建议先连接 Arduino 串行电缆并验证代码是否加载。

这将简单地测试您是否正确连接了 Arduino 以及是否加载了 IDE 和库。通过 IDE 加载代码,加载时应该没有错误,任何组件都应该没有冒烟!!

3.连接驱动板

按照电路图将驱动板连接到主板,并将设备物理放置在机箱中以确保物品适合机箱内。这是一个反复试验的案例,需要坚持。

通过 IDE 加载代码,加载时应该没有错误,任何组件都应该没有冒烟!!

4.连接线圈 按照电路图将线圈连接到主板,并将设备物理放置在机箱中以确保物品合适。仔细确保线圈按照电路图与驱动板和主板输入对齐。

加载测试代码后,串行端口将在接收线圈上显示 5000 - 7000uS 之间的脉冲宽度。这也可以使用 IDE Graph Plotter 进行查看。

这将使您能够对每个通道进行故障排除,还可以看到在搜索线圈附近移动硬币的效果,随着目标靠近搜索线圈,这应该会降低脉冲宽度。

如果您有示波器,您还可以检查电路各个阶段的波形以诊断问题。

一旦所有通道都按照预期的位置运行,电线以便外壳正确组装和关闭。

5.连接 LED

小心地从线圈外壳 LED 上取下三根电线并将它们连接到主板。加载代码并验证 LED 是否正常运行。使用胶水将线圈外壳盖固定到位。

Pocket_Metal_Locator_V11__TEST_CODE.zip Pocket_Metal_Locator_V11.zip

步骤 7:连接充电电池

注意:

1.在最后一步之前不要连接锂聚合物电池单元,因为在组装过程中意外短路会导致单元过热甚至着火。

2.处理电池和充电器时,确保小心不要使电池连接短路。

3.锂聚合物电池与其他可充电电池不同,过流充电可能很危险,因此请确保正确配置充电电路。

4.请勿在按下电源按钮时将 Arduino 串行电缆连接到设备,否则可能会损坏电池。

1.修改充电器电流限制

袖珍金属定位器使用锂聚合物电池,可使用微型 USB 手机充电器充电。 TP4056 USB LiPo Batt Charger Board 首先修改了 4.7K 电阻,将充电电流限制在 300mA 以下。可以在此处找到有关如何完成此操作的说明。

TP4056.pdf

这需要您移除现有的表面贴装电阻器并更换为如图所示的电阻器。一旦到位,用一些热胶枪保护电阻器的任何意外移动。

连接主板前,先将手机充电器与Micro USB接口连接,测试充电器是否正常工作。正常工作时红色充电灯应亮。

2.安装按钮电源开关

确保按钮安装在正确的位置,使其从外壳盖的中心突出,然后将按钮焊接到位。按照电路图在按钮开关和充电器输出与 Arduino 上的 VCC 线之间安装电线。

安装正确后,按下开关将激活装置。

使用热胶将电池固定到位,并确保 Micro USB 插座与盒盖上的孔对齐,以便充电。

第 8 步:最终测试和运行

1.物理组装

最后一步是仔细重新排列电线,以便外壳正确关闭。使用热胶将主板固定在盖子上,然后将盖子合上。

2.操作单位

按住电源按钮后,设备通过校准进行操作。当设备准备好使用时,所有的 LED 都会闪烁。搜索时按住按钮。 LED 会根据目标物体的强度从蓝绿色、红色、紫色变化。当 LED 变为紫色时,会发生触觉反馈。

您还没有准备好用于实际应用!

代码

  • Pocket_Metal_Locator_V11.ino
Pocket_Metal_Locator_V11.inoC/C++
这款很酷的小型袖珍金属定位器足够灵敏,可以识别木头上的小钉子和大头钉,并且足够紧凑,可以放入尴尬的空间,便于携带和用于金属定位。

该装置具有四个独立的搜索线圈和彩色 LED 指示灯,可轻松快速覆盖更大的搜索区域,同时能够准确识别目标。

这个整洁的小设备通过一键操作进行自我校准,可通过 USB 端口充电,并使用彩色 LED、声音和振动来指示目标强度。

教程中包含您自己构建所需的所有设计、测试、代码和 3D 文件。我希望你像我一样喜欢构建和使用它!!
/* Pocket Metal Locator - Arduino Pro Mini April 2018 TechKiwiGradgetsVersion 11 - First Instructable Release*/// WS2182 LED Driver Library Setup#include "FastLED.h "// 你的灯条中有多少个 LED?#define NUM_LEDS 4 // 注意:第一个 LED 是地址 0#define DATA_PIN 11 // 注意:D11 用于控制 LED 链 // 定义 LEDsCRGB LEDs[NUM_LEDS] 数组;/ / LPFconst 的平滑变量 float alpha =0.85;浮动平滑值1 =1000;浮动平滑值2 =1000;浮动平滑值3 =1000;浮动平滑值4 =1000;int sthreshold =100; //从pulseIn函数的最小读数确保采样高于noisefloat ledthreshold1 =0.93; // 设置 LED 之前低于基线的百分比 Purplefloat ledthreshold2 =0.96; // 设置 LED 之前低于基线的百分比 Redfloat ledthreshold3 =0.99; // 设置 LED 之前低于基线的百分比 Greenfloat ledthreshold4 =0.998; // 设置 LED 为蓝色之前低于基线的百分比 // 校准变量布尔样本 =false; // 如果为真,则不重新调整阈值int calcounter =0; // 用于统计一个样本被抽取的次数int scount =200; // 仅在上电后校准一次之前的读取次数 numsamples =20; // 在平均之前采集的样本数 t1 =100; // 在校准期间 LED 亮起的持续时间(以微秒为单位)long calav1 =0; // 用于计算十个样本的平均值calav2 =0; // 用于计算十个样本的平均值calav3 =0; // 用于计算十个样本的平均值calav4 =0; // 用于计算十个样本的平均值int div1 =0;// 所取样本数的除数计数器int div2 =0;int div3 =0;int div4 =0;// 四个通道表示为A,B,C,Dint divA =0;long tempA =0;long pcounterA =0; // 通道 1 的未过滤脉冲宽度 int divB =0;long tempB =0;long pcounterB =0; // 通道 2 的未过滤脉冲宽度int divC =0;long tempC =0;long pcounterC =0; // 通道 1 的未过滤脉冲宽度 int divD =0;long tempD =0;long pcounterD =0; // 通道 1 的未过滤脉冲宽度 int pwindow =7500; // 脉宽的最大超时值// ********************************************* ***********int dly1 =4; // TXR 引脚保持高电平的时间段 (typicLLY 4uS)int dly2 =1; // 在 TXR 引脚变为低电平后延迟读取开始读取脉冲持续时间 - 通常为 1 uS int dly3 =500; // 在开始下一个周期之前采样脉宽之后的延迟(以微秒为单位)// ************************************ ****************int threshdiff =15; // 添加到平均值成为 LED 点亮的特定阈值(将 V21 从 25 更改为 20)long pulseav =0; // 存储校准输出值// 振动电机 boolean haptic =false; // 用于开启振动电机一段时间的标志 int vduration =1; // 振动电机启用的程序周期数 int vcounter =vduration; // v 周期计数器 void setup() {// 振动电机/触觉反馈 pinMode(12,OUTPUT); // 来自 Arduino 的振动电机驱动程序 - D10 digitalWrite(12,LOW); // 关闭电机 Serial.begin(115200); // Setupserial interface for test data output// WS2182 LED Driver Setup LEDS.addLeds(leds,NUM_LEDS); // 如果为此使用 RGB,则默认值可能因 LED 制造商而异 LEDS.setBrightness(5); //在此处设置 LED 的亮度 // 在 5v 的功率消耗下将我的消耗限制为 1A FastLED.setMaxPowerInVoltsAndMilliamps(5,100); FastLED.setDither(0); // 关闭自动抖动功能以消除闪烁// Arduino Mini Pro 逻辑引脚分配// 逻辑引脚名称 2,3,4,5,6,7,8,9 等同于板上印刷的 D2-D9 引脚名称 //逻辑引脚名称 10、11、12、13、14、15、16、17 相当于 D10-D13、A0-A3 引脚名称印刷在板上// Piezo Buzzer pinMode(10,OUTPUT); // 来自 Arduino 的压电蜂鸣器驱动程序 - D10 // 传输 pinMode(2,OUTPUT); // Arduino 的脉冲输出 - D2 pinMode(4,OUTPUT); // Arduino 的脉冲输出 - D4 pinMode(6,OUTPUT); // Arduino 的脉冲输出 - D6 pinMode(8,OUTPUT); // Arduino 的脉冲输出 - D8 // 通道 A pinMode(3,INPUT); // 从 LM339 上的引脚 2 到 Arduino 的信号输入 - D3// 通道 B pinMode(5,INPUT); // 从 LM339 上的引脚 1 到 Arduino 的信号输入 - D5// 通道 C pinMode(7,INPUT); // 从 LM339 上的引脚 14 到 Arduino 的信号输入 - D7// 通道 D pinMode(9,INPUT); // 从 LM339 上的引脚 13 到 Arduino 的信号输入 - D9 }void loop(){// 脉冲和读取线圈 ------------------------- --------------------// 通道 1(魔杖点)digitalWrite(2,HIGH); // 将 TX 引脚设置为 highdelayMicroseconds(dly1); // 在输出 pindigitalWrite(2,LOW) 上设置低电平之前的延迟; // 将 TX 引脚设置为 lowdelayMicroseconds(dly2); // 采样脉冲宽度前的延迟 pcounterA =pulseIn(3,LOW,pwindow);digitalWrite(2,LOW); // 将 TX 引脚设置为 LOWdelayMicroseconds(dly3); // 采样脉冲宽度之前的延迟 // 应用低通滤波器以平滑通道 1 if (pcounterA>=sthreshold) { smoothedvalue1 =(alpha * smoothedvalue1) + ( (1 - alpha) * pcounterA); } pcounterA =smoothedvalue1;// 通道2digitalWrite(4,HIGH); // 将 TX 引脚设置为 highdelayMicroseconds(dly1); // 在输出 pindigitalWrite(4,LOW) 上设置低之前的延迟; // 将 TX 引脚设置为 lowdelayMicroseconds(dly2); // 采样脉冲宽度前的延迟 pcounterB =pulseIn(5,LOW,pwindow);digitalWrite(4,LOW); // 将 TX 引脚设置为 LOWdelayMicroseconds(dly3); // 采样脉冲宽度之前的延迟 // 应用低通滤波器来平滑通道 2 if (pcounterB>=sthreshold) { smoothedvalue2 =(alpha * smoothedvalue2) + ( (1 - alpha) * pcounterB); } pcounterB =smoothedvalue2;// 通道3digitalWrite(6,HIGH); // 将 TX 引脚设置为 highdelayMicroseconds(dly1); // 在输出 pindigitalWrite(6,LOW); 上设置低之前的延迟; // 将 TX 引脚设置为 lowdelayMicroseconds(dly2); // 采样脉冲宽度前的延迟 pcounterC =pulseIn(7,LOW,pwindow);digitalWrite(6,LOW); // 将 TX 引脚设置为 LOW //delayMicroseconds(dly3); // 采样脉冲宽度之前的延迟 // 应用低通滤波器以平滑通道 3 if (pcounterC>=sthreshold) { smoothedvalue3 =(alpha * smoothedvalue3) + ( (1 - alpha) * pcounterC); } pcounterC =smoothedvalue3;// 通道4 digitalWrite(8,HIGH); // 将 TX 引脚设置为 highdelayMicroseconds(dly1); // 在输出 pindigitalWrite(8,LOW); 上设置低之前的延迟; // 将 TX 引脚设置为 lowdelayMicroseconds(dly2); // 采样脉冲宽度前的延迟 pcounterD =pulseIn(9,LOW,pwindow);digitalWrite(8,LOW); // 将 TX 引脚设置为 LOWdelayMicroseconds(dly3); // 采样脉冲宽度之前的延迟 // 应用低通滤波器以平滑通道 4 if (pcounterD>=sthreshold) { smoothedvalue4 =(alpha * smoothedvalue4) + ( (1 - alpha) * pcounterD); } pcounterD =smoothedvalue4;// 打印值然后重置计数器/* Serial.print(pcounterA); Serial.print(" "); Serial.print(calav1); Serial.print(" "); Serial.print(pcounterB); Serial.print(" "); Serial.print(calav2); Serial.print(" "); Serial.print(pcounterC); Serial.print(" "); Serial.print(calav3); Serial.print(" "); Serial.print(pcounterD); Serial.print(" "); Serial.println(calav4);*/// 上电阈值校准 // 等待一段时间为每个线圈设置基线 if (sample ==false){ calcounter++; } if ( calcounter> (scount-numsamples) ) { // 等待 90 然后将样本相加准备计算平均值 if (pcounterA> sthreshold) { calav1 =calav1 + pcounterA; div1++; } if (pcounterB> sthreshold) { calav2 =calav2 + pcounterB; div2++; } if (pcounterC> sthreshold) { calav3 =calav3 + pcounterC; div3++; } if (pcounterD> sthreshold) { calav4 =calav4 + pcounterD; div4++; } } if ((calcounter> scount)&&(sample ==false)){ // 设置阈值 calav1 =calav1/div1; calav2 =calav2/div2; calav3 =calav3/div3; calav4 =calav4/div4; // 闪烁 LED 显示校准完成 // 0-3 Blue leds[3] =CRGB::Blue; FastLED.show();延迟(t1); leds[3] =CRGB::黑色; leds[2] =CRGB::蓝色; FastLED.show();延迟(t1); leds[2] =CRGB::黑色; leds[1] =CRGB::蓝色; FastLED.show();延迟(t1); leds[1] =CRGB::黑色; leds[0] =CRGB::蓝色; FastLED.show();延迟(t1); leds[0] =CRGB::黑色; // 3-0 绿色 LED[3] =CRGB::Green; FastLED.show();延迟(t1); leds[3] =CRGB::黑色; leds[2] =CRGB::绿色; FastLED.show();延迟(t1); leds[2] =CRGB::黑色; leds[1] =CRGB::绿色; FastLED.show();延迟(t1); leds[1] =CRGB::黑色; leds[0] =CRGB::绿色; FastLED.show();延迟(t1); leds[0] =CRGB::黑色; FastLED.show();// 声音蜂鸣器 // digitalWrite(10,HIGH); // 将输出引脚设置为高电平以激活 LED // delay(t1*2);数字写入(10,低); // 将输出引脚设置为高电平以激活 LED // 重置采样标志 sample =true;计算器 =0; } if (sample ==true) { updateLEDs(); }// 触觉反馈 - 如果超过阈值,则为“vduration”周期打开振动电机 if(haptic ==true) { // 如果设置了标志,则打开电机 digitalWrite(12,HIGH); // 将输出引脚设置为高电平以激活振动电机 if (vcounter>=1){ vcounter--; // 递减计数器 }else{ digitalWrite(12,LOW); // 将输出引脚设置为低电平以停用振动电机触觉 =false; // 循环次数后重置振动标志 vcounter =vduration; // 重置振动计数器 } } }// Subroutinesvoid updateLEDs() {// 显示结果// 紫色 - 最强目标信号 +(蜂鸣压电和触觉反馈)// 红色 - 高 +(触觉反馈)// 绿色 - 中等 + (触觉反馈)// 蓝色 - 最弱的目标信号// 关闭所有 LEDsleds[0] =CRGB::Black;leds[1] =CRGB::Black;leds[2] =CRGB::Black;leds[3] =CRGB::Black;digitalWrite(10,LOW); // 将输出引脚设置为低电平以停用压电扬声器digitalWrite(12,LOW); // 将输出引脚设置为低电平以停用振动电机// *************** 通道 1 if (pcounterA <(calav1*(ledthreshold1))) { // 如果强则显示紫色目标 LED[3] =CRGB::紫色;数字写入(10,高); // 将输出引脚设置为高电平以激活压电扬声器触觉 =true; } elseif (pcounterA <(calav1*(ledthreshold2))) { // 为中等强度目标显示蓝色 leds[3] =CRGB::Red;触觉 =真; } elseif (pcounterA <(calav1*(ledthreshold3))) { // 为中等强度目标显示蓝色 leds[3] =CRGB::Green;触觉 =真; } elseif (pcounterA <(calav1*(ledthreshold4))) { // 由于通道 1 leds[3] =CRGB::Blue 的敏感性,将额外的百分点添加到阈值; } // 通道 2 显示 if ((pcounterB  

定制零件和外壳

Thingiverse
This cool little Pocket Metal Locator is sensitive enough to identify small nails and tacks in wood and compact enough to fit into awkward spaces making it convenient to carry and use for metal locating.The unit has four independent search coils and color LED indicators making it easy to cover a larger search area quickly while being able to accurately identify the target.This neat little device is self-calibrating with one button operation, rechargeable through a USB port and uses color LEDs, sound and vibration to indicate target strength.Included in the instructable is all of the designs, testing, code and 3D files required to build on your own. I hope you enjoy building and using this as much as I have!!CAD file on thingiverse.com

示意图

This cool little Pocket Metal Locator is sensitive enough to identify small nails and tacks in wood and compact enough to fit into awkward spaces making it convenient to carry and use for metal locating.

The unit has four independent search coils and color LED indicators making it easy to cover a larger search area quickly while being able to accurately identify the target.

制造工艺

  1. 陶瓷过滤器
  2. 厕所
  3. 救生员
  4. 16 锻造技术
  5. 金属剪切
  6. 钣金冲压的成本效益
  7. 什么是钣金冲孔?
  8. 穿孔金属机及应用
  9. 什么是铸造厂?
  10. 金属卷材的成型:卷材分切
  11. 薄板金属概述
  12. 什么是矫直钣金?