超声波传感器,用英语说就是不仅能发射超声波,还能接收超声波。对提前探测附近物体有重要作用,可以通过声波的速度计算出附近物体距离传感器的大概距离。
超声波传感器,英文超声波传感器,不仅能发射超声波,还能接收超声波。它在提前探测附近物体方面发挥着重要作用,可以通过声波的速度计算出附近物体与传感器之间的大致距离。
HC-SR04是一种非常流行且廉价的超声波传感器,非常适合嵌入式编程的技术测试。它是智能避障车的关键部件,能够提前发现车前的障碍物,并做出相应的转弯或后退动作。
HC-SR04的长外观见下图。它的工作电压是5V。据说HC-SR04P或HC-SR0-的新型号可以在3V下工作。现在我们的任务是将它插入树莓派Pico,以感知前方物体的距离。
首先,看它的引脚是否有电路连接。只有四个引脚,Vcc在左边,5V正极,GND在右边。我手里的HC-SR04是5V版本,Vcc可以接Pico的VBUS。
现在还剩两针,三角和回声。
Trig负责控制是否发射超声波,如果给它一个高电位,就会发射;如果电位低,则停止发射。在这里,我们将它连接到Pico的一个GPIO引脚,并让Pico控制它。我将它直接连接到GP18引脚。
Echo的连接稍微复杂一点。Echo在英语中是“回声”的意思,是接收超声波信号的意思。如果收到超声波,电位高;如果没有收到,就是低电位。
重要提醒:
我的HC-SR04的工作电压是5V,所以echo管脚的电位是5V,Pico的工作电压是3.3V如果echo的输出信号直接接GPIO管脚,会超过Pico的工作电压,可能会损坏Pico,所以需要降压。
有些在线教程没有解释这个问题,比如这篇文章,把echo输出直接接到GPIO管脚。
一种解决方案是加一个3.3V-5.5V的电平转换器,非常便宜的小元件,比如本文。
还有一个解决办法,就是加两个电阻,再加上清醒的头脑和细心的连接。我参考这篇文章的解释。利用高中物理知识,得出电阻的计算公式。这里,Vin=5,Vout=3.3,因此R1/R2 = 0.515。如果R1选择1000欧元,那么R2大约是2000欧元。
因此,在Echo串与GP26引脚之间连接一个1000ω的电阻,并将一个2000ω的电阻接地,可以有效地保护Pico引脚。最终逻辑连接图:
实际连接图(电阻丝很细很长,从拍摄角度不容易看清连接关系):
学习原理,写程序理解代码,需要了解超声波测距的基本原理。传感器的发射器发出超声波。遇到障碍物后,超声波返回并被传感器的接收器接收。根据时差和声速,可以计算出距离。
HC-SR04是这样工作的:1)1)触发器接收到长度为10us的方波后,开始发射超声波;2)传感器发出八组40KHz方波,然后接收回波;3)方波发出后,回声变高,收到回声时,回声变低。
下面这段代码,第一个2us是把电位设置为零,然后产生一个10us的方波。
扳机。low () utime。sleep _ us (2)触发器。high () utime。sleep _ us (10)触发器。low()然后算出回波处于高电位的时间段,乘以声速,再除以2因为超声波走了两次,最后求距离,单位是cm。
While echo . value()= = 0:start = utime . tickets _ us()While echo . value()= = 1:end = utime . tickets _ us()d =(end -start)* 0.0343/2所有最后的源代码:
从机导入引脚导入utime #超声波测距,单位:厘米def getDistance(trigger,Echo): #生成方波trigger . low()utime . sleep _ us(2)trigger . high()utime . sleep _ us(10)trigger . low()while Echo . value()= = 0:start = utime . ticks _ us()while Echo . value()= = 1:end = utime . ticks _ us()d =(end -start)* 0.0343/2返回d#主程序trigger = pin (18,pin.out格式(距离))utime。睡眠(1)看HC-SR04的规格,可以在15度范围内判断传感器前方距离2 cm到5 m的障碍物,分辨率为3 mm。
这里计算距离的函数已经很简化了,有时候并不准确。可以取几次平均值。另外,如果你对距离精度有更高的要求,就需要换其他传感器了。
评论前必须登录!
注册