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

一、超声波测距简介

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

二、HC-SR04模块

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

1、引脚说明

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

2、电气参数

3、超声时序

三、模块工作原理

向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

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

ArslanRobot

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值