Arduino微型超声波悬浮器

网友投稿 2018-09-08 13:56

很久以前为大家介绍过一个「超酷的DIY声波悬浮」研究项目。

https://cdn.china-scratch.com/timg/180910/13564Bc0-0.jpg

虽然超声波悬浮,不能像磁悬浮那样悬浮比较重的物品。不过能把小泡沫球、水滴或者蚂蚁这样的小物体悬浮起来也是很有意思的。

https://cdn.china-scratch.com/timg/180910/13564B618-1.jpg

制作这样一个简易的超声波悬浮器并不需要多少成本,而且材料很容易获得。你只需要:

  • Arduino Nano/UNO

  • HC-SR04超声波测距模块

  • L293D步进电机驱动模块

    拆解超声波测距模块    

常见的超声波模块一般有两个柱状头。一个是发生器,一个是接收器。我们把它们拆下来。

https://cdn.china-scratch.com/timg/180910/1356464b8-2.jpg

这里特别提一点,拆下来的柱头里有圆形的网格,留一个备用。

https://cdn.china-scratch.com/timg/180910/1356462B4-3.jpg

    连接电路    

准备好L298N型步进驱动板。 将四个输入中的两个连接到Arduino的端口A0和A1,然后连接GND和5V。输出正负极接两个发生器的正负极。

https://cdn.china-scratch.com/timg/180910/13564H250-4.jpg

https://cdn.china-scratch.com/timg/180910/13564WT5-5.jpg

    上传代码    

将下面的代码上传到Arduino,Arduino在setup()阶段执行大部分工作。 首先,它将所有模拟端口设置为输出。 然后,Timer1配置为触发时钟频率为80kHz的比较中断。 每个中断只是反转模拟端口的状态。 将80kHz方波信号转换为40kHz的全波循环。 loop()部分没有任何操作。

byte TP = 0b10101010; // Every other port receives the inverted signal void setup() { DDRC = 0b11111111; // Set all analog ports to be outputs // Initialize Timer1 noInterrupts(); // Disable interrupts TCCR1A = 0; TCCR1B = 0; TCNT1 = 0; OCR1A = 200; // Set compare register (16MHz / 200 = 80kHz square wave -> 40kHz full wave) TCCR1B |= (1 << WGM12); // CTC mode TCCR1B |= (1 << CS10); // Set prescaler to 1 ==> no prescaling TIMSK1 |= (1 << OCIE1A); // Enable compare timer interrupt interrupts(); // Enable interrupts } ISR(TIMER1_COMPA_vect) { PORTC = TP; // Send the value of TP to the outputs TP = ~TP; // Invert TP for the next run } void loop() { // Nothing left to do here :) }

    寻找最优距离    

接下去是个体力活。我们需要不断地调整两个柱头之间的距离来找到一个能让小物品完美悬浮起来。 这里需要一些技巧和工具。

首先,这个距离必须完全正确,以产生具有足够强的高气压和低气压区域的驻波。 我们可以使用以下公式估算距离,基于室温下的声速,343米/秒: 

343,000毫米/秒/ 40,000赫兹= 8.575毫米

所以,这个距离应该是8.575毫米的倍数。但是发射器屏幕之间的距离与声波所包围的区域不同,因此结果不会很正确,最终还是需要手动微调的。

所以我们可以把柱头距离调整到20毫米左右,然后不断地调整。

https://cdn.china-scratch.com/timg/180910/13564U942-6.jpg

这里我们需要制作一个小工具,还记得拆解超声波模块时备用的小网格么?如下图,找一跟牙签用胶水把它合成如图这样的小勺。

https://cdn.china-scratch.com/timg/180910/1356494b5-7.jpg

它会帮你把那些小的泡沫塑料球放在适当的位置,因为它在声学上是透明的。 如果你试图用手或镊子,它们可能会干扰传感器产生的波,使得超生波无法形成或者不稳定。

如果你有终极工具示波器,那就更方便了(非电子专业的大部分人应该没有https://cdn.china-scratch.com/Public/Home/images/grey.gif,可以直接跳过此段)。将一个通道连接到Arduino,将另一个通道连接到两个发射器中的一个(确保将其与电路板断开以进行此测量)。 当距离恰到好处时,来自超声波接收器的正弦波应该与来自Arduino的方波信号完全同相。

https://cdn.china-scratch.com/timg/180910/1356491X8-9.jpg

有了理论和工具,剩下的就是耐心了,这里还有一些小经验:

  • 如果小泡沫球感觉马上就能悬浮了,但突然又掉了,可以尝试用再小一点的泡沫球。而且也不用特别圆的,实验发现越不规则的碎片似乎越容易悬浮

  • 如果小物体能悬浮住,但不停地抖动“跳舞”,可以尝试降低电源电压,或者串联1N4007二极管,每个二极管可以降低0.7V。供电电压建议在9V-11V之间,最方便当然是用可调节的电源。

  • 如果你成功将泡沫球悬浮了,可以尝试悬浮不同的物体,还可以尝试悬浮多个物体。

https://cdn.china-scratch.com/timg/180910/135A0J31-10.jpg

--end--

声明:本文章由网友投稿作为教育分享用途,如有侵权原作者可通过邮件及时和我们联系删除:freemanzk@qq.com