有多少人工,就有多少智能

ros microros 使用超声波雷达测量距离

我们使用的超声波模块一共有四个引脚,分别是

TRIG 即发送引脚,用于发送超声波
ECHO 即接收引脚,用于接收反射回来的超声波
VCC 电源接5V
GND 电源地

一、新建工程
新建example18_sr04

二、编写代码
带注释的代码如下

#include <Arduino.h>
#define Trig 27 // 设定SR04连接的Arduino引脚
#define Echo 21

void setup()
{
  Serial.begin(115200);
  pinMode(Trig, OUTPUT); // 初始化舵机和超声波
  pinMode(Echo, INPUT);  // 要检测引脚上输入的脉冲宽度,需要先设置为输入状态
}

void loop()
{
  static double mtime;
  digitalWrite(Trig, LOW); // 测量距离
  delayMicroseconds(2);    // 延时2us
  digitalWrite(Trig, HIGH); 
  delayMicroseconds(10); // 产生一个10us的高脉冲去触发SR04
  digitalWrite(Trig, LOW);
  mtime = pulseIn(Echo, HIGH);                  // 检测脉冲宽度,注意返回值是微秒us
  float detect_distance = mtime / 58.0 / 100.0; // 计算出距离,输出的距离的单位是厘米cm
  Serial.printf("distance=%f\n", detect_distance);
  delay(500);
}

三、代码注解
核心代码分为两部分

3.1发送超声
方波产生,低-高-低

 

 

  digitalWrite(Trig, LOW); // 测量距离
  delayMicroseconds(2);    // 延时2us
  digitalWrite(Trig, HIGH); 
  delayMicroseconds(10); // 产生一个10us的高脉冲去触发SR04
  digitalWrite(Trig, LOW);

3.2 检测回响计算距离

mtime = pulseIn(Echo, HIGH);                  // 检测脉冲宽度,注意返回值是微秒us
float detect_distance = mtime / 58.0 / 100.0; // 计算出距离,输出的距离的单位是米m

58是一个时间系数,根据声音在空气中传播速度计算而来。pulseIn函数用于检测某个引脚从当前时间跳变到高电平之间持续的时间。

四、下载测试
将超声波模块连接到开发板上的超声波接口上

 下载代码,打开串口,查看距离不断变化

 五、总结
本节我们成功实现使用超声波实现距离测量功能,下一节我们尝试使用第三方库驱动舵机。

 

posted @ 2024-07-01 17:29  lvdongjie-avatarx  阅读(13)  评论(0编辑  收藏  举报