stm32超声波测距代码_超声波模块另类用法,悬浮,你也能做到

今天,给大家介绍一个

「超酷的DIY声波悬浮」研究项目。

400a3ede3e2e1bb2c9d492c0cc193aa6.png

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

3403270e59bf3c50033d05953dc71a4f.png

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

  • Arduino Nano/UNO
  • HC-SR04超声波测距模块
  • L293D步进电机驱动模块

拆解超声波测距模块

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

3639175d9baa8798c0d903945e848e44.png

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

386e78caa44e1da8ac47740e77423463.png

连接电路

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

d4eb02853d1bc36c6e6154d160a49d4b.png
fdec3394e624cc54916ccb3bc150ea9d.png

上传代码

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

byte TP = 0b10101010;

void setup() {

DDRC = 0b11111111;

noInterrupts();

TCCR1A = 0;

TCCR1B = 0;

TCNT1 = 0;

OCR1A = 200;

TCCR1B |= (1 << WGM12);

TCCR1B |= (1 << CS10);

TIMSK1 |= (1 << OCIE1A);

interrupts();

}

ISR(TIMER1_COMPA_vect) {

PORTC = TP;

TP = ~TP;

}

void loop() {

}

寻找最优距离

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

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

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

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

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

815a1ec46028e972293f4822bea9bab1.png

这里我们需要制作一个小工具,如下图,找一跟牙签用胶水把它合成如图这样的小勺。

368f57ddc271f19961177a588955da1f.png

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

调试

  • 如果小泡沫球感觉马上就能悬浮了,但突然又掉了,可以尝试用再小一点的泡沫球。而且也不用特别圆的,实验发现越不规则的碎片似乎越容易悬浮
  • 如果小物体能悬浮住,但不停地抖动“跳舞”,可以尝试降低电源电压,或者串联1N4007二极管,每个二极管可以降低0.7V。供电电压建议在9V-11V之间,最方便当然是用可调节的电源。
  • 如果你成功将泡沫球悬浮了,可以尝试悬浮不同的物体,还可以尝试悬浮多个物体。
d0ff9cf1a895813e868fb1ea3b4685a6.png
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 下面是一个使用STM32超声波传感器进行测距的示例代码: 首先,需要在STM32上配置相应的GPIO引脚来连接超声波传感器。超声波传感器一般有两个引脚,一个是触发引脚(Trig),一个是接收引脚(Echo)。 首先,我们需要设置超声波传感器的触发引脚为输出模式,接收引脚为输入模式。然后,我们将触发引脚输出一个10微秒的高电平信号,之后立即将其设为低电平。这样就会启动超声波传感器开始发送超声波信号。 接下来,我们需要使用STM32的定时器来测量超声波传感器接收到回声的时间。我们可以使用定时器的输入捕获功能来实现。一旦接收到回声信号,定时器会记录下当前的计数值。 然后,我们可以根据定时器的计数值和声速的大小来计算出距离。公式为:距离 = 回声时间 * 声速 / 2。其中回声时间可以通过测量超声波传感器触发信号和接收到回声信号之间经过的时间来得到,声速则一般取为343米/秒。 最后,我们将计算得到的距离数据输出到显示屏或其他需要的设备上。 需要注意的是,具体的代码实现可能会因具体的STM32型号和超声波传感器型号而有所不同。这里只是提供了一个基本的思路和步骤,具体的实现还需要根据具体情况进行调整和编写。 希望以上的回答对您有所帮助! ### 回答2: STM32超声波测距代码用于通过超声波模块测量距离。以下是一个简单的示例代码,用于使用STM32超声波模块实现测距功能。 首先,我们需要配置相关的GPIO引脚和定时器。通过设置正确的引脚和定时器,我们可以发送超声波脉冲并测量回波脉冲的时间差,从而计算出距离。 接下来,我们需要编写一个函数来发送超声波脉冲。这个函数会设置GPIO引脚输出高电平一段时间,然后恢复为低电平。这样超声波模块就会发送一个脉冲信号。 然后,我们需要编写一个中断处理函数来处理回波脉冲的检测。当超声波模块接收到回波信号时,它会将一个引脚的电平状态改变。我们可以通过检测引脚状态的变化来计算出回波的时间差。 最后,我们需要计算出实际的距离。根据声速和回波时间差,我们可以将时间转换为距离。声速通常是一个已知的常数,在空气中约为343米/秒。 这只是一个简单的超声波测距代码示例,更详细的代码实现方式可能会有所不同,具体取决于使用的STM32型号和超声波模块。在实际使用过程中,还需要考虑一些额外的因素,例如脉冲宽度、测量的稳定性、多次测量取平均值等等。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值