【Arduino 动手做】构建全方位声纳矩阵 让机器人感知环境
本帖最后由 驴友花雕 于 2025-6-6 18:02 编辑【Arduino 动手做】构建全方位声纳矩阵 让机器人感知环境
作为我的机器人项目 Andar 的一部分,我需要构建一个声纳环,让 Andar 了解周围的环境。这是一个关于如何构建带有 12 个超声波测距仪和一个 Arduino nano 的声纳环的教程,就像 Andar 机器人使用的一样。
【Arduino 动手做】构建全方位声纳矩阵让机器人感知环境
第 1 步:收集材料1. 说实话,声纳可以有你需要的机器人的任何直径。就我而言,我使用了 4 英寸 PVC 耦合器,因为它具有 Andar 的完美措施。
2. 您还需要声纳测距仪。我使用了 12 个 HC-SR04 传感器。据我所知,它们是最便宜的。
3. 其他应该列出的是
4.扁平电缆
5.连接器
6.焊料
7.花几个小时来组装和测试所有东西。
【Arduino 动手做】构建全方位声纳矩阵 让机器人感知环境
第 2 步:布局传感器位置您需要将圆柱体的周长分成 12 个相等的部分。
这些垂直线中的每条都将是一个超声波测距仪的轴。
为了标记每条线的绘制位置,我使用了您在宜家获得的免费纸尺之一来测量家具等(宜家是一家可以在加拿大购买家居用品的商店)。如果你没有,你甚至可以在一小段透明胶带上线性地做标记,然后用胶带把它粘在夹子上。
要画垂直线,您可以使用厨房里能找到的任何产品的任何盒子,并且足够高,即 90 度的底座。
【Arduino 动手做】构建全方位声纳矩阵 让机器人感知环境
第 3 步:画出标记超声波测距仪孔的线条您需要画 4 条线,分别用于 Emiter 和 Receiver Clinder,另外两条用于 Oscilator。
我在声纳传感器下方和上方放置了 5 毫米的自由线。我们将使用该空间来放置底部和顶部盖(当然,如果你想要它们)
更具体地说,这是四行中每一行的详细信息:
1.底部填充器:从底部开始,第一行应在 XX mm.2
处。顶部压片机:在 XX 毫米处画第二条线,也是从底部开始。
3. 摆动器底部:在距底部
XX mm 处画一条新线 4.振荡器顶部:在距底部
XX 毫米处画这条线现在,cilinder 已经完成了我们需要钻孔的所有点。
【Arduino 动手做】构建全方位声纳矩阵 让机器人感知环境
第 4 步:开始钻孔现在我们将开始在放置超声波测距仪的位置打所有孔。
使用上一步中绘制的标记检查每个孔的制作位置。请记住,如果您先打一个小孔,您将对它的位置有更多的控制权。之后,您可以使用正确的位。
我提出的另一个建议是只为一个传感器打孔,测试它是否正确安装,如果合适,则转到下一组孔。如果你一起做所有事情,你犯了错误,你将无法解决它。
从 las 图像中可以看出,两个振荡器孔应该连接在一起。
确保所有测距仪都正确安装在预期位置。如果情况并非如此(一开始我不是这样),请纠正孔,这样您就知道一切都会适合。
【Arduino 动手做】构建全方位声纳矩阵 让机器人感知环境
第 5 步:创建电缆以连接所有传感器如果您以前使用过超声波测距仪,那么您已经知道它们(至少)有 4 个引脚
• Vcc
• GND
• Trig
• Echo
因此,由于我们将使用 12 个声纳,因此我们谈论的是 Trig 和 Echo 的 24 个引脚。Arduino Nano 没有 24 个数字引脚可供使用。好吧,我们要做的是将 Trig 和 Echo 引脚连接在一起,这样我们每个传感器就可以只使用一个信号引脚。(这不是我的想法,它是您可以在我在代码中使用的 NewPing 库中找到的示例的一部分。
思考是..你将不得不焊接一大堆连接..
正如您在图像中看到的,所有 Vcc 都连接在一起。所有 GND pins的运行相同。
其余电缆连接到每个传感器上 Trig/Echo 的 12 个引脚。
【Arduino 动手做】构建全方位声纳矩阵 让机器人感知环境
第 6 步:Arduino Nano 连接【Arduino 动手做】构建全方位声纳矩阵 让机器人感知环境
第 7 步:将您的 Sketch 安装到 Arduino 中
/*
【Arduino 动手做】构建全方位声纳矩阵 让机器人感知环境
*/
#include <NewPing.h>// **引入 NewPing 库,用于控制超声波传感器**
#define SONAR_NUM 12// **超声波传感器数量**
#define MAX_DISTANCE 200// **最大检测距离(单位:厘米)**
#define PING_INTERVAL 29// **每个传感器之间的检测间隔时间(单位:毫秒),避免相互干扰**
unsigned long pingTimer;// **存储每个传感器下一次执行 ping 的时间**
unsigned int cm; // **用于存储测得的距离**
uint8_t currentSensor = 0; // **当前活动的传感器编号**
NewPing sonar = {// **初始化超声波传感器数组,每个传感器独立指定触发和回响引脚**
NewPing(2, 2, MAX_DISTANCE),// **定义第 1 个传感器(触发引脚 2,回响引脚 2,最大测量 200cm)**
NewPing(3, 3, MAX_DISTANCE),// **第 2 个传感器**
NewPing(4, 4, MAX_DISTANCE),// **第 3 个传感器**
NewPing(5, 5, MAX_DISTANCE),
NewPing(6, 6, MAX_DISTANCE),
NewPing(7, 7, MAX_DISTANCE),
NewPing(8, 8, MAX_DISTANCE),
NewPing(9, 9, MAX_DISTANCE),
NewPing(10, 10, MAX_DISTANCE),
NewPing(11, 11, MAX_DISTANCE),
NewPing(12, 12, MAX_DISTANCE),
NewPing(13, 13, MAX_DISTANCE)
};
void setup() {
Serial.begin(115200);// **启动串口调试**
pingTimer = millis() + 75;// **第一个传感器的首次测距延迟 75ms(让 Arduino 完全启动后再执行)**
for (uint8_t i = 1; i < SONAR_NUM; i++)// **初始化每个传感器的检测时间**
pingTimer = pingTimer + PING_INTERVAL;
}
void loop() {
for (uint8_t i = 0; i < SONAR_NUM; i++) {// **轮询所有传感器**
if (millis() >= pingTimer) {// **当前时间 >= 传感器的下次执行时间**
pingTimer += PING_INTERVAL * SONAR_NUM;// **更新该传感器的下次执行时间**
if (i == 0 && currentSensor == SONAR_NUM - 1) oneSensorCycle(); // **所有传感器扫描完成,执行数据处理**
sonar.timer_stop();// **确保之前的传感器检测被终止**
currentSensor = i;// **更新当前活动传感器编号**
cm = 0;// **如果没有回声,默认距离设置为 0**
sonar.ping_timer(echoCheck);// **启动超声波测距(事件驱动方式)**
}
}
// **此处可以添加其他代码(不会影响超声波测距)**
}
void echoCheck() { // **测距回调函数,检测到回声后记录测得的距离**
if (sonar.check_timer())
cm = sonar.ping_result / US_ROUNDTRIP_CM; // **转换为厘米**
}
void oneSensorCycle() { // **所有传感器扫描完成,处理测得的距离**
for (uint8_t i = 0; i < SONAR_NUM; i++) {
Serial.print(cm);// **打印测得的距离**
if(i < SONAR_NUM - 1) Serial.print(",");
}
Serial.print("|");// **分隔符**
}
【Arduino 动手做】构建全方位声纳矩阵 让机器人感知环境
第 8 步:连接到 PC 并运行 Sonar .net 应用程序【Arduino 动手做】构建全方位声纳矩阵 让机器人感知环境
本帖最后由 驴友花雕 于 2025-6-6 18:03 编辑附录
【Arduino 动手做】构建全方位声纳矩阵 让机器人感知环境
项目链接:https://www.instructables.com/member/_now_/
项目作者:加拿大多伦多
(我是男朋友、父亲、软件开发人员和创客,在阿根廷长大,目前住在加拿大多伦多。)
项目视频(只有类似参考演示):https://www.youtube.com/watch?v=SvLObGL-5ZY
项目代码:https://bitbucket.org/nahueltaibo/andar/src/wheelsWorking/
3D打印文件:无需打印
哥,求您认真自己做一个吧,转载再多也不是自己的
翻译、分享与引入国外开源项目 的新探索
本帖最后由 驴友花雕 于 2025-5-25 17:05 编辑帅猫 发表于 2025-5-25 11:15
哥,求您认真自己做一个吧,转载再多也不是自己的
谢谢鼓励。几年前,从一个干簧管模块开始,我便投入大量时间深入实验,探索各种传感器、执行器、开发板及套件…… 涉及的硬件种类已接近三百,始终保持着严谨的尝试和动手实践。其中最极限的挑战之一,当属 1.28 英寸 GC9A01 圆形屏幕模块,我成功完成了 153 项小实验,并悉心记录下全过程,在博客上分享。这算不算认真?你说了算!
在 CSDN 上,我打造了栏目 《189 种传感器执行器系列开源实验》(189种传感器执行器系列开源实验_驴友花雕的博客-CSDN博客),已累计发布近 1400 篇实验项目博客。至今,Arduino 基础实验项目已坚持六年,不断深耕与优化。
而就在一周前,我开启了翻译、分享与引入国外开源项目的新探索,开始系统性介绍那些富有特色的国际创客作品。我一直欣赏国外创客脑洞大开的创新精神,更敬佩他们 坚持不懈的动手能力。但学习他人经验与自主创新并非对立,而是相辅相成——敢于借鉴先进经验,也是一种成长。
【Arduino 动手做】构建全方位声纳矩阵 让机器人感知环...
页:
[1]