【ROS2机器人入门到实战】测量距离学会超声波传感器
本节我们成功实现使用超声波实现距离测量功能,下一节我们尝试使用第三方库驱动舵机。
·
2.测量距离学会超声波传感器
写在前面
- 当前平台文章汇总地址:ROS2机器人从入门到实战
- 获取完整教程及配套资料代码,请关注公众号<鱼香ROS>获取
- 教程配套机器人开发平台:两驱版| 四驱版
- 为方便交流,搭建了机器人技术问答社区:地址 fishros.org.cn
你好,我是爱吃鱼香ROS的小鱼。上一节简单的介绍了超声波传感器,但是没有介绍如何通过代码使用,本节我们尝试使用并封装超声波模块。
我们使用的超声波模块一共有四个引脚,分别是
TRIG即发送引脚,用于发送超声波ECHO 即接收引脚,用于接收反射回来的超声波VCC电源接5VGND电源地
一、新建工程
新建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函数用于检测某个引脚从当前时间跳变到高电平之间持续的时间。
四、下载测试
将超声波模块连接到开发板上的超声波接口上

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

五、总结
本节我们成功实现使用超声波实现距离测量功能,下一节我们尝试使用第三方库驱动舵机。
魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。
更多推荐

所有评论(0)