HC-SR04超声波测距模块可提供2cm-400cm的非接触式距离感测功能,测距精度可达高到3mm,模块包括超声波发射器、接收器与控制电路。像智能小车的测距以及转向,或是一些项目中,常常会用到。智能小车测距可以及时发现前方的障碍物,使智能小车可以及时转向,避开障碍物。

超声波测距的原理是利用超声波在空气中的传播速度为已知,测量声波在发射后遇到障碍物反射回来的时间,根据发射和接收的时间差计算出发射点到障碍物的实际距离。首先,超声波发射器向某一方向发射超声波,在发射时刻的同时开始计时,超声波在空气中传播,途中碰到障碍物就立即返回来,超声波接收器收到反射波就立即停止计时。超声波在空气中的传播速度为C=340m/s,根据计时器记录的时间T秒,就可以计算出发射点距障碍物的距离L,即:L=C×T2L= C×\frac{T}{2} 。这就是所谓的时间差测距法。

人们可以听到的声音的频率为20Hz~2KHz,也就是可听声波。超出此频率范围的声音,20Hz以下的声音称为低频声波,20KHz以上的声音称为超声波,一般说话的频率范围是10Hz-8KHz。超声波方向性好,穿透能力强,易于获得较集中的声能,在水中传播距离远,超声波因其频率下限大约等于人的听觉上限而得名。

# 部署

使用Uno控制超声波传感器测量前方障碍物的距离,并显示到LCD显示屏上。为此,你需要同时连接LCD和超声波传感器到osepp UNO上:

  1. 超声波模块VCC接OSEPP UNO的5V
  2. 超声波模块GND接OSEPP UNO的GND
  3. 超声波模块ECHO接到OSEPP UNO的9号引脚。
  4. 超声波模块TRIG接到OSEPP UNO的8号引脚。
  5. LCD的接口RS-D7分别连接到OSEPP UNO的2~7号引脚。

# 连线图

# 程序搭建

  • oseppBlock 积木知识

超声波模块积木。
Trig(控制端),控制发出的超声波信号。
Echo(接收端)接收反射回来的超声波信号。

超声波模块返回值,单位是毫米。

  • oseppBlock代码

  • Arduino代码

    #include <oseppRobot.h>
    #include <LiquidCrystal.h>
    
    OseppUltrasonic ultrasonic1(8, 9); //定义超声波引脚
    LiquidCrystal lcd1(2, 3, 4, 5, 6, 7); //定义LCD引脚
    
    void setup()
    {
        lcd1.begin(16, 2); //LCD初始化
    }
    
    void loop()
    {
        lcd1.clear();                   //清屏
        lcd1.setCursor(0, 0);           //显示光标定位
        lcd1.print(ultrasonic1.ping()); //显示距离
        lcd1.print("mm");               //单位
        delay(1000);                    //延时
    }
    
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19

# 运行结果

代码上传成功后,如果超声波模块前面有物体,并且距离在2-4000mm之间。LCD就会显示这个物体与超声波模块之间的距离。你可以改变物体与超声波模块的距离查看LCD 显示是否产生变化。

# 解析

  1. 采用IO口TRIG触发测距,给至少10us的高电平信号。

  2. 模块自动发送840khz的方波,自动检测是否有信号返回。

  3. 有信号返回,通过IO口ECHO输出一个高电平,高电平持续的时间就是超声波从发射到返回的时间。

    测试距离=(高电平时间声速(340M/S))/2测试距离=(高电平时间*声速(340M/S))/2

# 操作视频