Arduino使用HC-SR04实现超声波测距

181 阅读2分钟

一、超声波测距简介

超声波测距原理是在超声波发射装置发出超声波,接收器接到反射回来的超声波时的时间差来计算距离,与雷达测距原理相似。 超声波发射器向某一方向发射超声波,在发射时刻的同时开始计时,超声波在空气中传播,途中碰到障碍物就立即返回来,超声波接收器收到反射波就立即停止计时。(超声波在空气中的传播速度为340m/s,根据计时器记录的时间t(秒),就可以计算出发射点距障碍物的距离(s),即:s=340t/2)

二、HC-SR04模块

HC-SR04 超声波测距模块可提供 2cm-400cm 的非接触式距离感测功能,测距精度可达高到的非接触式距离感测功能,测距精度可达高到 3mm ;

1、引脚说明

  • Vcc:+5V电源供电
  • Trig:输入触发信号(可以触发测距)
  • Echo:传出信号回响(可以传回时间差)
  • Gnd:接地

2、电气参数

3、超声时序

三、模块工作原理

flowchart TB
向Trig引脚发送高电平持续10us 
--> 向Trig引脚发送低电平
--> 触发模块向前方发送8个40khz的方波
--> 读取Echo引脚计算高电平持续的时间
--> 以持续时间换算距离

四、Arduino程序实例

ultrasonic.ino

/** 超声波雷达引脚 **/
#define ULTRASONIC_IN_PIN          6  // 超声波接收脚 E
#define ULTRASONIC_OUT_PIN         7  // 超声波发射脚 T

//距离
float distance = 0;

void setup() {
    Serial.begin(9600);
    pinMode(ULTRASONIC\_IN\_PIN, INPUT); //
    pinMode(ULTRASONIC\_OUT\_PIN, OUTPUT); //
    Serial.println("-------------- setup ok -----------------");
}

void loop() {
    digitalWrite(ULTRASONIC\_OUT\_PIN, LOW); //
    delayMicroseconds(2);
    digitalWrite(ULTRASONIC\_OUT\_PIN, HIGH); //超声波发送一个不小于10us的高脉冲
    delayMicroseconds(10);
    digitalWrite(ULTRASONIC\_OUT\_PIN, LOW); //
    float Fdistance = pulseIn(ULTRASONIC\_IN\_PIN, HIGH); // 读取返回脉冲宽度(即高电平持续的时间长短),单位为ms
    //distance = Fdistance / 3.4 / 10; // 时间转成距离 (单位:公分) 理论值340米/每秒,实际测试中并不准确
    distance = Fdistance / 5.8 / 10; // 时间转成距离 (单位:公分)
    Serial.print("检测结果:");
    Serial.print(distance);
    Serial.println("cm");
    delay(2000);
}

四、Arduino IDE运行结果

-------------- setup ok ----------------- 检测结果:0.00cm 检测结果:1377.44cm 检测结果:58.26cm 检测结果:55.56cm 检测结果:38.88cm 检测结果:39.38cm 检测结果:37.29cm 检测结果:38.71cm 检测结果:36.03cm 检测结果:53.85cm 检测结果:57.79cm