这里'我如何在空中工作的世界中建立第一个超声波3D扫描仪,使用搁板的组件(< $ 100)。 1
四年前,我15岁,想要建立一个自主的无人机来提供焦炭罐头。为此,我需要一个准确的3D地图,我的无人机周围环境避免墙壁和物体。 Lidars太昂贵了,猛烈2点' T良好。有超声波传感器,但它们只能在40°锥形中展开到最近物体的距离,这对我来说是足够的。
但是,如果人类可以找到声音的确切方向,为什么可以' t一个超声波传感器也这样做?这将允许我扫描3D。
发射机发出波浪,它在对象上反弹,两个接收器三角形转向将其放在地图上。但是,这对于一个对象来说才能很好。一旦在错误的地方,你就可以' t' t'从另一个' s的回声。 3.
一些人建立了扫描仪。它们适用于虚拟键盘的手指,但可以' t处理多于几个物体。
拯救了我的是干扰原则。假设我们在空间中有两个声波,让' s调用它们f 1(m)f_1(m)f 1(m)和f 2(m)f_2(m)f 2)( m),其中f 1(m)f_1(m)f 1(m)返回第一波在点M处移动粒子的距离。
f 1(m)f_1(m)f 1(m)可以是正的或阴性的。当您看到水上的波浪时,有水线低于其平均-f 1(m)f_1(m)f 1(m)负的地方,并且水管线高于平均-f 1的地方(m)f_1(m)f 1(m)阳性。现在,如果我们打电话给f(m)"最终"颗粒在点m,we'重新进入f(m)= f 1(m)+ f 2(m)f(m)= f_1(m)+ f_2(m)f(m)(m) )= f 1(m)+ f 2(m)。
但是在f 1(m)= - f 2(m)f_1(m)= -f_2(m)f 1(m)= - f 2(m)的情况下会发生什么?嗯f(m)= 0 f(m)= 0 f(m)= 0!颗粒在' t在m中移动,即使存在两个非零波。这种现象称为破坏性干扰。干扰统治所有波源在空间中的辐射。水面上的闪电模式,等式统治镜,透镜和天线都来自该叠加原理。
事实证明,如果您在平面中定期安排大量发射器,则波浪将保持像灯塔之一的梁内部的限制。以下排除者的排列,所有相位:
真正的奇迹是,如果你延迟每个发射器' s的线性量nφn \ phinφ,例如:
[E(t +φ)] [e(t +φ)] [e(t +2φ)] [e(t + 2 \ phi)] [e(t + 2φ )[e(t + 3φ)] [e(t +3φ)] [e(t +4φ)] [e(t + 4 \ phi)] [ E(t +4φ)] [e(t +5φ)] [e(t + 5 \ phi)] [e(t +5φ)]
然后,光束将点的角度将与φ\phiφ成比例!如果我们控制φ\phiφ,我们控制光束点的位置!
问题是,如果发射器相距太远,那么赢得' t是三个梁。有三个光束,扫描是不可能的。发射器必须尽可能靠近波长的一半,以避免向错误的地方发送声音。
但是,商业超声换能器比波长大于"捏"辐射模式。他们主要用于停车传感器。
我在Aliexpress和Banggood上搜索了几个小时,没有办法找到足够的超声波传感器。
在整个晚上都花了试图理解为什么当发射器相距太远时会出现两个额外的梁,一些闪烁的直觉闪现了我。
如果我想象我的发射器就像互相接触一样,它们产生的波浪就可以朝着梁的方向朝向梁。侧面可以没有第二和第三梁。它'难以解释的这些直觉之一。
到目前为止,我的模拟和几乎所有您可以在线找到的模拟假设发射器是零半径的点。并通过模拟这些来源,而不是像"盘子" (即,10个单位彼此放在彼此相邻),声纳工作!
' s仍然是高角度的第二梁,并且最大扫描角度低于如果我的发射器更近于半波长。但它应该能够工作!
我计划制作10毫米换能器的10x10格。我认为驾驶相控阵将类似于驾驶阵列LED。
我在Aliexpress上购买了数百美元的换能器。在我身上,我所需要的所有情况是74小时595班次寄存器(它们用于驱动许多LED的东西)和NPN晶体管,以将移位寄存器的5V转换为40V超声换能器。然后,我' LL焊料数百种这些组件在Protoboard上。我已经在Protoboards上建造了火箭降落伞定时器。我以为它会是一样的。
我收到了我的组件后,我试图制作超声波传感器工作。当D13高电平时,电流在晶体管中流动,并打开它到它旁边的共激节。
如果你之前已经做过电子产品,你可能很难笑。超声换能器大致相当于电容器。电容器就像一个水库,除了电子。因此,推动它电路需要空,并填充每秒40 000次电容器。这里的NPN电容器仅切出电容器的消解,但是没有任何东西可以排出它。
我花了几天了解这个问题,然后尝试了另一个电路,半桥:当D13高时,顶部晶体管打开,底部晶体管关闭。电流从电容到地,电容器放电。当D13低时,顶部晶体管闭合,底部晶体管打开。电流从40V到电容器。
但是,在实践中,该电路仅适用于电源电压低于Arduino信号的电压,在我的情况下为5V。其中(它花了5天的原因)是PNP晶体管(顶晶体管的种类)当电流从顶部引脚流到左销时,5V(我的Arduino' S电压)ISN' t足以阻止40V源的电压诱导电流。我需要用40V信号驱动它,这意味着另一个晶体管! 5.
这里,最左侧的NPN晶体管驱动PNP。结果是我需要三个晶体管,三个电阻和两个换能器的两个arduino引脚。那个' s 300晶体管和200 arduino引脚,即200/8 = 25档寄存器销。那个'太多,以靠近换能器。
虽然,使用功能变送器,我可以得到我的第一束。我连接8个发射器并联到半桥并获得梁!发射器是底部的绿灯。蓝色是低信号,白色/红色/紫色是高信号。我使用了Teensy 3.2,它显示了信号强度作为LED上的颜色。然后,我在束中的青铜行驶时拍了一张长时间的照片。 6.
然后,我试图直接从移位寄存器构建半桥。我购买了移位寄存器以替换PNP晶体管和移位寄存器以替换NPN。那些分别是TPIC9B585NS和MIC5891S。
它有点工作,但两个班次寄存器之间的时间不同。因此,有时换档寄存器都会允许电流通过,从而导致短路。 MIC5891S在高频下具有差的定时,因此我回到了绘图板。
最后,我意识到,两个NPNS(驱动顶部PNP的一个驱动电容器到接地为清空器的一个驱动电容器)可以由开漏换档寄存器(在我最新的实验中工作得很好)取代。所以我终于解决了这一点。对于每个换能器,我只需要两个移位寄存器引脚,晶体管和电阻器。该量为25次移位寄存器,100个晶体管和100个焊料电阻。
我很快意识到有太多的组件来手动焊接。我必须设计一个PCB。
我以前从未做过任何EDA,所以我开始学习和使用KICAD。两天后,我的PCB准备被制造!
使用JLCPCB.COM我每周有10个PCB,以20美元的价格为20美元,包括快速送货的18美元。我讨厌在法国可以在法国完成的工作,但没有当地公司提供相同的服务。
在一个晚上焊接8 * 25 + 2 * 100 + 3 * 100 = 700 8 * 25 + 2 * 100 + 3 * 100 = 700 8 * 25 + 2 * 100 + 3 * 100 = 700 =我的PCB的700销,我挂了teensy和...它没有工作。我已经忘记将PIN放在每个TPICS上的地面上。在我的PCB中加入25个电线后,它运作了!
然后,我不得不将我的100个发射器紧紧地包装在10x10网格中,并将所有排放物连接到我的半桥。我从底部到顶部开始:青少年3.6,它产生信号,TS1080将3.3V信号转换为5V,半桥PCB,传感器。所有导线都焊接了L'通过标头到换能器到换能器,所以我可以轻松替换或改变各个换能器的极性。
我开始在接待侧进行光束成形进行实验以获得额外的精度。我为&#34 Googled;音频放大器"并使用了我发现的第一个原理图。我删除了帽子,因为它们'重新毫无用处,并用LM386S建立这个9x定向接收器。当然,它给出的信号太吵了。我有几个备用的HC-SR04。我有线了一个并使用示波器探头在放大后寻找模拟信号。我发现它并将其焊接到了teensy。
我的传感器直接由25次移位寄存器驱动。要驱动移位寄存器,有三个引脚:时钟,锁存器和数据。要将一系列位写入移位寄存器,该算法如下:
在数据引脚上写入第一位(如果希望将移位寄存器的第一个引脚连接到地面,则否则返回返回寄存器,否则)
锁存高(这告诉Shift寄存器更改其输出,类似于视频游戏中的缓冲区交换。
因此要在移位寄存器中更改值,我需要8 * 3 + 2 = 26 8 * 3 + 2 = 26 8 * 3 + 2 = 26在引脚上写入。换能器在40khz工作,但是我喜欢对于我的光束有40个位置,这意味着更新率为40kHz * 40 = 1.6 M Hz 40kHz * 40 = 1.6MHz 40kH Z * 40 = 1.6 m H z。我需要21个Teensy写入1个移位寄存器写入,即1.6 M Hz * 21 = 33.6 M Hz 1.6MHz * 21 = 33.6MHz 1.6 M Hz * 21 = 33.6 M H ZTHERE是25次移位寄存器,所以我需要更新我的输出引脚33.6 M Hz * 25 = 840 M Hz 33.6MHz * 25 = 840MHz 33.6 M Hz * 25 = 840 m H Z.
哎哟!那个'对于600MHz微控制器来说将很难!对于那种要求,工程师通常使用FPGA。 FPGA是一种可编程逻辑芯片,对于这种工作更快。但是,我手头没有,所以我住在teensy 3.6。
青少年的优点是数字输出值存储在32bits寄存器中。我可以使用几个指令并行更改所有引脚。通过改变所有引脚,以平行,我的代码"只有"需要在33.6MHz上运行。通过预先计算和存储寄存器值,我能够轻松地转到该速度。
PC通过串行端口到发射器中的特定位置发射(例如:40°垂直,水平-20°),并且同时告诉接收器开始收听。接收器听到发射器' s ping,它开始录制。在几毫秒之后,它将数据转储串行端口上的数据。
S IGNAL↦Bandpass滤波器↦HILBERTt ransform↦s(t)= t * s(t)↦t hreshold信号\ mapsto带通\,过滤器\ mapsto hilbert \;变换\ mapsto s(t)= t * s( t)\ Mapsto阈值S Ig NaL↦B一种DPA SS FI LT ER↦HILBERT r A SF或M = S(t)= t * s(t)↦↦↦↦res
之后,阈值上方的所有点都被写为回声,并将其保存到文件中。在启动Gnuplot时,我在此处获得了我的第一个3D图像,接收器在左侧房间的顶部,因为我第一次扫描它第一次扫描它从整个房间的右侧3D扫描从右侧3D扫描中查看。我们可以看到前面的鸟,墙后面和墙的元素。发射器是左边的红色圆圈放大鸟。腿和大多数躯干aren' t可见,因为它们'从传感器中退出和#39;的视野
有时声波是发射器 - >第一个对象 - >第二个对象 - >接收器,所以有时候有一个"鬼回声"背后的物体。
扫描速度为单点几毫秒,为全部分辨率为一分钟,为全部分辨率为一秒钟,全分辨率为2D平面。虽然足够无人机只需要2D地图的无人机,但对于某些应用来说,它可能太慢了。
我对这些问题中的每一个都有解决方案,但会让他们成为自己♥。我计划明年将此扫描仪发展成为一个有用的商业解决方案。
到达那里并不容易,但很长一段时间都可能是可行的。这仍然是一些假设:
许多试图构建超声波扫描仪的人只有两个接收器,并试图将信号相关联。我没有去那条路线,因为数学太复杂,因为它的拓扑限制。在这里,在数学上不够好,帮助了我。
当您执行通常的计算时,相位阵列波束成形似乎是不可能的。但正如我所说的那样,我知道如何做我做电脑模型的平时计算。它允许我比通常的计算更精确。这台计算机模型帮助我看到数学家伙无法' t。
对于那些仍然去序列的阵列路线的人来说,他们都没有足够疯狂的时间去3D,从10到100个传感器。我缺乏电子知识帮助我这里。 "常见的"解决方案Weren' t小。但是因为我没有知道它是多么努力,我仍然开始了。一旦我开始建造这件事,我必须完成它。它让我想出了我骄傲的相当创新的设计。如果我留在第一款舞台上,我设计了电路供电的电路,我永远不会建造它。在进行新项目或当您的知识限制时,您可以' t预测事情将如何结果。它更好地开始在简单的事情上工作并按比特向前移动。规划一切都是不可能的。
因为我单独,我不必在尝试较少的道路之前问任何人和#39;'我想如果我一直在公司工作,那么没有经理将批准我的任何技术选择。
如果你建造了类似的东西,就可以了解我!我' ll将您添加到文章中以纠正我的谎言。
我在github上发表了所有代码和原理图。如果您需要任何帮助构建设备,请发送电子邮件给我或打开GitHub问题和i' ll写文档。
我的设备可以帮助雷达,波束形成和相控阵的实验。如果你想让我寄给你一个,给我发电子邮件!
我在线搜索了靠近事情的人。几个人调查了Hackaday.io的原则,但其中只有一些人成功地建造了一个2D扫描仪。无可以在同一个领域中处理两个物体。有一些研究人员是关于该主题的文章,包括建立工作2D扫描仪的团队。如果我在这个问题上给我发电子邮件。 ↩
同时本地化和映射,基本上使用相机来计算世界的3D地图。 ↩
我为十亿美元的想法感到骄傲,所以我向我的一个朋友展示了一个原则。在一分钟内,他摧毁了这一切。 "嘿,如果一只第二只鸭子来到这里,你怎么知道鸭子是侧面还是在另一鸭子前面的一个?"我生气了。我正在考虑为学校项目做这件事。相反,我们建造了一个声学悬浮钻机。 ↩
由Arduino论坛和Sackoverflow的电子部分提供提供错误的原理图。不要相信你在互联网上看到的一切:s↩
对这种技术的CNLOHR学分,他用于用ESP8226可视化WiFi信号。 ↩