你的墙里有什么?

作者:Alex Perry

一个墙体探测器只需花费10.00美元(美国)即可购买,那么为什么有人会尝试使用他们的Linux电脑来查看墙壁内部的电源线、钉子、钢筋、龙骨或其他任何东西呢?

CanDetect 项目的诞生是解决一个更困难问题的副产品,这个问题不是花费 10.00 美元的设备就能解决的。CanDetect 是 Corroding Aircraft Non Destructive Evaluation using software Tools and an Eddy Current Tester(使用软件工具和涡流测试仪进行腐蚀飞机无损评估)的缩写,旨在为 AMT(航空维修技术人员)提供一种廉价的手段来对飞机进行腐蚀检查。CanDetect 旨在消除专用计算机、外部放大器、调制器和电源的开销,但仍然允许 AMT 发现埋在油漆甚至其他金属下方的金属中的微小缺陷。

我们的方法包括可以在任何 Linux 支持的平台上运行的软件,以及一个设计为直接插入 /dev/dsp 连接器(对应于声卡的字符设备)的检测探头。为《嵌入式 Linux 杂志》的 NIC 竞赛开发了一个特定于应用程序的可引导 CD-ROM 映像。如果您有 NIC 和/或计划检查飞机,SourceForge 站点 (candetect.sourceforge.net) 提供了更多详细信息。有关如何查找墙壁中的内容,请继续阅读。

重要警告:本文中描述的简易家居改进设备未获准用于航空领域。请勿在航空领域使用此设备。

探头

在地震多发地区,例如加利福尼亚州,使用砖块建造是不安全的。相反,一个坚固而轻巧的框架,由木材或铝制垂直梁(间距约为 40 厘米)组成,覆盖着一层薄而扁平的刨花板、石膏或类似材料,其强度仅足以支撑自身。在地震期间,这样的墙壁会推倒相邻的家具,除非每件物品的顶部都已牢固地固定在墙上。当将家具或橱柜连接到框架墙时,重要的是将螺钉与可以承受负载的更坚固的内部结构对齐。墙壁还包含管道和电线,最好在将长螺钉穿过墙壁时避开它们(显然)。

What Do You Have in Your Walls?

图1. 感应线圈对,针对10KHz和2厘米深度优化。

What Do You Have in Your Walls?

图2. 图1所示探头的构造细节。

图 1 所示的探头由我的同事 Brian Whitecotton 构建。他的作品比我的更上镜。探头由两个线圈组成,它们的中心间距为 2.4 英寸,粘合在一块木头上,如图 2 所示。每个线圈的直径为 2.2 英寸,并绕有 80 匝绝缘线。线圈串联焊接,使得电流在左右信号输出线之间沿相反方向旋转。线圈之间的中点连接到单声道麦克风输入。输出和输入的接地线连接在一起,如图 3 所示。该设计的电阻为 6.2,电感为 0.8mH。

What Do You Have in Your Walls?

图3. 图1所示探头的电气连接示意图。

在构建探头时,重要的是验证电气连接是否相同,并且两个线圈尽可能相同。不要在结构中使用任何其他金属,无论多么诱人,因为此探头旨在检测附近墙壁中的任何金属。顺便说一句,此探头对于飞机上的 NDE(无损评估)毫无用处。

墙壁信号

非物理学专业的 Linux 用户有时会被这些概念的物理原理吓倒,但不要让这阻止您尝试这个项目。如果本节中的任何内容都没有意义,请了解点源(例如钉子)倾向于给出圆形信号,而线源(例如电源线)倾向于给出更尖锐的信号。

What Do You Have in Your Walls?

图4. Prostar笔记本电脑,1KHz,对一个隐形的干墙钉的线性扫描。

当它扫描墙壁以寻找隐形钉子时,当钉子位于一个线圈的圆圈内时,软件会报告正信号;当钉子位于另一个线圈的圆圈内时,软件会报告负信号。如图 4 所示。当尝试检查大面积墙壁时,线圈可以彼此相邻移动,以便信号的符号指示哪个线圈遇到了钉子。当尝试确定钉子的确切位置时,线圈沿同一路径移动,以便没有信号的中心对称性将指示位置在几毫米以内。

What Do You Have in Your Walls?

图5. Prostar笔记本电脑,1KHz,对一个隐形的110V> 电源线的线性扫描。

电源线(如图 5 所示)或金属结构组件显然会产生更大的信号。信号的形状区分了点(例如钉头)和线(例如电线)。当点位于线圈圆圈内的任何位置时,点几乎具有相同的信号,因此该图具有扁平的峰值。线的信号随位于圆圈内的线的长度而变化,当线是直径时达到最大值。因此,该图具有更尖锐的峰值。

虽然廉价的墙体探测器可以找到物体,但如果您想要比基本位置更多的信息,则必须购买更精密的设备。此外,廉价的传感器无法区分水管、结构梁和电源线。

What Do You Have in Your Walls?

图6. 信号的相位暗示了每个物体是什么类型的金属。钢铁最高,铜和铝最低,黄铜等居中。在 1KHz 左右,相位明显分为三组。

What Do You Have in Your Walls?

图7. 信号的大小暗示了每个物体有多大。与钢铁相比,铝产生的信号相对较小。

更昂贵且功能更强大的传感器将其检测结果压缩到简单的显示屏中。我们基于软件的传感器可以从更好的显示中受益,并调整测量以识别物体类别。一旦在墙壁内的某个位置找到物体,信号的相位(如图 6 所示)就会指示材料是什么。信号的大小表明物体有多大,如图 7 所示。这两个参数随频率的变化方式可用于识别物体的形状。

计算机平台

CanDetect 项目对系统要求不高,并且不需要专用 Linux 计算机。您甚至可以借用 Windows 机器,因为从 CD-ROM 或软盘启动到 Linux 是一种成熟的技术。我们在《嵌入式 Linux 杂志》竞赛参赛作品中使用了廉价的 CD 启动 New Internet Computer (NIC, www.thinknic.com)。

为了同时输出和输入波形,声卡(或集成在主板上的声卡芯片)必须能够进行全双工操作。许多较旧的声卡和较新的笔记本电脑通常无法在不降低采样分辨率和/或采样率的情况下实现全双工状态。该卡需要在 16 位模式下运行。这相当于每个电压读数名义上能够分辨满量程的 16ppm。对于这个项目,值得避免旧的设计和声音不好的设计。此外,在最大音量下,麦克风不应有可听见的嘶嘶声。

在众多计算机之间进行选择时,您可以将测量程序添加到 Linux 终端服务器项目 (LTSP, www.ltsp.org) 中,作为 inetd 下的服务。在为相关的网卡类型准备 EtherBoot (www.etherboot.org) 软盘后,您可以在一个晚上评估数百台计算机。只需使用软盘网络启动每台计算机,使用其 X 终端登录到您的远程工作站并运行脚本即可。该脚本解析 DISPLAY 变量以查找 IP 地址,连接到计算机上的 inetd 服务,运行测试,然后记录并显示摘要。

软件方法

我们开发了 AudNet 来操作声卡。然后我们修补了一个版本的 xoscope 来绘制流式传输结果,如图 8 所示。

What Do You Have in Your Walls?

图8. 显示程序元素互连的框图。

AudNet 操作声卡,因此始终有内容播放,并且 AudNet 检索记录的信号。保持播放和录制通道同步非常重要。通常,大多数声卡上都存在两个输入和两个输出电气通道,每个通道使用一个波形。所有波形值都具有满量程 -1...+1。

许多不同类型的测量请求可以随时提交,并尽快执行。库只是遍历待办事项队列,直到到达末尾(如果它曾经到达)。当请求队列变空时,只需重复最近的请求,直到出现新请求。每个请求都声明其波形应重复多少次。

由于播放数据必须在播放前一秒或更长时间放置在声音队列中,并且录制的数据在录制后一小段时间出现在声音队列中,因此库会跟踪内核缓冲区中存在多少数据。通常,发送出的请求与响应中收集数据的请求不同。

由于许多电磁系统略微共振,因此请求还指定了必须执行波形多少次,直到探头和样本达到可预测状态以进行可靠测量。这些跳过的周期仅在库从一个请求定义切换到另一个请求定义时执行;当请求重复时,它们不是必需的。

对于单频测量,示例程序 main 期望两个命令行参数:频率(以 Hz 为单位)和输出的相位调整(以度为单位)。main 请求 AudNet 生成两个干净的正弦波,其频率尽可能接近参数,但在扬声器通道上符号相反。然后,它设置重复次数,以每秒大约十次的速度给出新的测量响应。

xoscope—图形绘制

我们使用修改后的 xoscope 版本来显示我们的结果。示波器会在太忙而无法绘制到屏幕时丢弃输入信号,原始 xoscope 也会这样做。这在 CanDetect 中是一个问题,因为需要长时间查看缓慢变化的信号,因此我们修改了 xoscope 以解决此问题。

Linux 声卡驱动程序最初被替换为基于 AudNet 的驱动程序。在 NIC 上,任何文件系统访问都可能在 CD-ROM 旋转时阻塞,并且任何显示写入都可能在处理器处理未加速的视频芯片组时等待。因此,xoscope 通常会在数秒内不调用我们的驱动程序。偶尔的五秒延迟超过了内核缓冲区大小,并导致同步丢失。

What Do You Have in Your Walls?

图9. 数据采集期间xoscope窗口的快照。

xoscope 的第二个硬件驱动程序读取环境变量 XOSCOPEAUDNET,以获取预期以 10Hz 采样率提供合适数据的命令行。此环境变量在启动 xoscope 之前初始化,以确保使用所需的设置调用 main 程序。由于 main 作为完全独立的程序运行,并且不访问显示器或任何文件,因此它不会被阻止执行。

驱动程序缩放浮点值,以便显示的一个计数是声卡满量程输入的 10ppm。因此,由于 xoscope 内部存储缓冲区的动态范围有限,超过满量程 32% 的信号会被削波。

对 xoscope 的 CVS 的更改也在我们的 src 模块中跟踪,因为 xoscope.patch 应在配置之前应用。补丁添加了新的驱动程序并修改了一些默认值。新的配置脚本选项 --without-vga 强制不检测 svgalib,这在计算机上构建 svgalib 并且二进制文件将在没有 svgalib 的计算机上使用时很有用。

构建二进制文件

您可以快速尝试当前项目软件,方法是构建一个可引导软盘,如下所示

$ mkdir candetect.sf.net
$ cd candetect.sf.net
$ cvs -d :pserver:anonymous@cvs.candetect.sf.net:
/cvsroot/candetect login
$ cvs -d :pserver:anonymous@cvs.candetect.sf.net:
/cvsroot/candetect co .
$ make /dev/fd0

这使您可以获得所有准备好进行修改的源代码。项目顶层 Makefile

  • 编译库和主程序,

  • 下载特定CVS版本的xoscope,

  • 修补它并将其配置为非X11使用,

  • 编译oscope(用于svgalib的二进制文件),

  • 下载并解压缩2.4系列Linux内核,

  • 配置并使用多个声卡构建它,

  • 组装文件系统,包括BusyBox,

  • 组合所有内容并添加syslinux用于启动和

  • 将其复制到驱动器中的软盘。

此过程将在需要root权限时提示您输入root密码;请务必查看建议的命令行。请注意,这将在包含所有 CanDetect 模块的目录旁边创建一个名为 xoscope 的目录(以避免混淆 CVS)。

Makefiles将检测到缺少的实用程序,并自动尝试在基于 Debian 的系统上安装它们。在其他发行版上,您要么需要先解决依赖关系,要么修改 Makefiles。

Linux 的优势/挑战

内核是真正的多平台。开发是在桌面和实验室工作站上完成的,目标是用于现场使用的笔记本电脑和嵌入式计算机。这些共享完全相同的内核 API。驱动程序架构是多设备的,标准支持最多八个已安装的声卡。计算机可以使用不同的声卡进行多次同步测量,所有这些都共享一个简单的代码 API。

音频作为简单的字符设备访问,使用与打开网络链接相同的文件描述符。不需要特殊调用来控制远程声卡。这种情况对于简单的计算机平台尤其有价值,在这些平台上,屏幕尺寸或处理器资源将需要软件的调整。

开发无损检测系统最耗时的部分可能是验证它们。这涉及在各种操作环境中针对广泛的样本运行电子设备和处理软件,以证明算法是稳健的。开放声音系统与其他 Linux 内核功能集成后,为软件在各种计算机硬件上提供了通用的执行环境。这使得软件验证结果具有适用性,因为没有进行源代码更改。

与内核缓冲相关的延迟限制了算法的适应性,从而需要测量可能无关的值,并导致航空用户的有用速率降低。正在进行的内核开发正在缓解这种低效率,无论如何,这与墙壁检查用途无关。

未来工作

CanDetect 尚未准备好获得航空用途认证。结果的解释仍然极具挑战性。我们还希望支持具有更多通道的声卡,并将相同的软件应用于以下测量,例如

  • 组件电阻、电容、电感;

  • 用于湿度、湿度和化学物质的桥路;

  • 用于磁性位置感应的线圈耦合;

  • 用于无损检测的涡流;

  • 霍尔/磁阻读取作为指南针;

  • 材料的声吸收剖面分析;

  • 音频飞行时间,移动位置记录;

  • 声纳和类似的通过反射进行目标检测;

  • 机械应变计;结构变形;和

  • 梁式谐振器,如大多数MEMS传感器中使用的那样。

致谢

NIC 单元是在该项目入选 2001 年《嵌入式 Linux 杂志》竞赛决赛时捐赠的。有关我们获奖作品的更多信息,请参见 2001 年 5 月/6 月号的《嵌入式 Linux 杂志》(embedded.linuxjournal.com/advertising/press/nic_winners.php) 和我们的网站 (candetect.sourceforge.net)。感应探头在 Brian Whitecotton 组装后,由 Keith Ostrom 拍摄了照片。

What Do You Have in Your Walls?

Alex Perry (alex.perry@ieee.org) 拥有英国剑桥大学电子工程博士学位,是 IEEE 的高级会员、商业等级飞行员和地面教员、加利福尼亚州圣地亚哥地区的航空安全顾问,以及开源飞行模拟器 FlightGear (www.flightgear.org) 的开发人员之一。

加载Disqus评论