超声波测距仪的制作图解

电子说

1.3w人已加入

描述

步骤1:零件清单

只需要很少的部件:

1只有HC-SR04超声波模块或类似的

1只有Arduino Uno R3

4只有Arduino male-女性跳线

第2步:接线图

完成此项目只需要四条线。

接线图显示在photo1中。

步骤3:理论

超声波测距仪

超声波测距仪

超声波测距仪

超声波测距仪

超声波测距仪

HC-SR04超声波测距仪模块(照片1)提供2cm-400cm范围内的非接触式测量。精度通常为+/- 3mm,具体取决于距离,气温和湿度。

为获得最高精度,目标区域应至少为0.5平方米。当换能器直接指向目标时获得最佳结果。但是,可以在+/- 15度的假想“锥形”内使用可用的结果。

将HC-SR04连接到Arduino非常简单,因为除了两个电源引脚外,只有两根电线,“Trig”(触发器)和“Echo”是必需的。

必须将10uS(微秒)触发脉冲施加到“Trig”引脚以开始每次测量。

接收到触发脉冲后,模块以40kHz(千赫兹)的频率发出8个周期的“脉冲串”,然后“Echo”线变为高电平。触发脉冲和“Echo”引脚的上升沿之间有一个短的430uS间隔,在此期间,在超声波脉冲发生之前,发射器电路中会产生高能量+/- 10伏电荷。

收到回波信号时,“Echo”引脚降至LOW,或者先取210mS。

[注意:

如果阻止超声波信号(我使用过在换能器上卷起袜子,您将观察到3550cm的距离读数,该读数超出传感器范围约400cm。

超过400厘米时,距离读数会突然跳到3550厘米。原因如下:

在正常操作中,measure()函数在小于25mS(423cm)内完成其测量,然后再等待25mS,直到任务调度程序接下来将TaskFlag1设置为“TRUE”。

如果没有收到回声,任务调度程序将继续每隔50mS将TaskFlag1设置为“TRUE”,直到HC-SR04在210mS后超时并且Echo引脚降低。 HC-SR04忽略由measure()函数产生的所有10uS启动脉冲。

210mS的超时值对应3550cm的距离。..因此距离突然跳跃阅读。

重点是所有距离读数都小于400厘米是正确的。 ]

典型波形

照片2,3,4中显示了5cm,10cm,20cm和200cm距离的波形,以及5.

每张照片中的顶部曲线是“Trig”引脚。..。..每张照片中的下部曲线是“Echo”引脚。

每个“Echo”脉冲的持续时间可以通过将迹线长度乘以每张照片右下角显示的“uS/div”值来计算。

计算距离

可以从公式计算出精确距离:

距离(cm)=脉冲长度*声速/2 * 100 。..。..。..。..。..。..。..。..。..。..。..。..。..。.(1)

这假设“声速”为340m/S,并且回波距离是实际距离的两倍。

也可以计算距离使用公式:

距离(cm)=脉冲长度(uS)/59 。..。..。..。..。..。..。..。. 。..。..。..。..。..。..。..。..。..。..。..。..。..。..。..。..。. 。..。(2)

通过调整常数值59可以得到确切的距离。

[注意:

常数的59值推导如下:

声速约为340m/S,为0.034cm/uS(厘米/微秒) nd)。

0.034cm/uS的倒数是29.412uS/cm,当乘以2以允许返回路径时,倒圆时等于58.824或59。 ]

示例1:

将脉冲长度2400uS代入等式( 1)我们得到:

距离= 2400/1000000 * 340/2 * 100 = 40.8cm

示例2:

将脉冲长度2400uS代入等式(2)得到:

距离= 2400/59 = 40.7cm

步骤4:代码

代码包含一个“measure()”函数,使用instructable https://www中描述的任务调度程序每50mS调用一次。 instructables.com/id/Multi-task-Your-。..

measure()函数包含以下代码:

// ----- generate 10uS start pulse

digitalWrite(Trig,HIGH);

delayMicroseconds(10);

digitalWrite(Trig,LOW);

// ----- measure the distance

while (!digitalRead(Echo)); //wait for Echo pin to go high

start_time = micros();

while (digitalRead(Echo)); //wait for Echo pin to go low

finish_time = micros();

time_taken = finish_time - start_time;

Distance = ((float)time_taken)/59;

完整代码“Ultrasonic_range_finder将此文本文件的内容复制到Arduino草图中,将其保存为“Ultrasonic_range_finder”(不带引号),然后编译并上传到Arduino。

步骤5:测量距离

要查看距离读数,请单击“工具|串行监视器”并将速度设置为115200波特。

可以通过沿标尺放置物体然后调整“距离”的常数“59”值来校准距离读数,直到显示精确读数。

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分