25浏览
查看: 25|回复: 12

[项目] 【Arduino 动手做】构建全方位声纳矩阵 让机器人感知环境

[复制链接]
本帖最后由 驴友花雕 于 2025-5-25 07:25 编辑

Arduino是一个开放源码的电子原型平台,它可以让你用简单的硬件和软件来创建各种互动的项目。Arduino的核心是一个微控制器板,它可以通过一系列的引脚来连接各种传感器、执行器、显示器等外部设备。Arduino的编程是基于C/C++语言的,你可以使用Arduino IDE(集成开发环境)来编写、编译和上传代码到Arduino板上。Arduino还有一个丰富的库和社区,你可以利用它们来扩展Arduino的功能和学习Arduino的知识。

Arduino的特点是:
1、开放源码:Arduino的硬件和软件都是开放源码的,你可以自由地修改、复制和分享它们。
2、易用:Arduino的硬件和软件都是为初学者和非专业人士设计的,你可以轻松地上手和使用它们。
3、便宜:Arduino的硬件和软件都是非常经济的,你可以用很低的成本来实现你的想法。
4、多样:Arduino有多种型号和版本,你可以根据你的需要和喜好来选择合适的Arduino板。
5、创新:Arduino可以让你用电子的方式来表达你的创意和想象,你可以用Arduino来制作各种有趣和有用的项目,如机器人、智能家居、艺术装置等。

【Arduino 动手做】构建全方位声纳矩阵 让机器人感知环境图2

【Arduino 动手做】构建全方位声纳矩阵 让机器人感知环境图1

驴友花雕  中级技神
 楼主|

发表于 15 小时前

【Arduino 动手做】构建全方位声纳矩阵 让机器人感知环境

作为我的机器人项目 Andar 的一部分,我需要构建一个声纳环,让 Andar 了解周围的环境。

这是一个关于如何构建带有 12 个超声波测距仪和一个 Arduino nano 的声纳环的教程,就像 Andar 机器人使用的一样。

【Arduino 动手做】构建全方位声纳矩阵 让机器人感知环境图1

【Arduino 动手做】构建全方位声纳矩阵 让机器人感知环境图2

【Arduino 动手做】构建全方位声纳矩阵 让机器人感知环境图3

回复

使用道具 举报

驴友花雕  中级技神
 楼主|

发表于 15 小时前

【Arduino 动手做】构建全方位声纳矩阵让机器人感知环境

第 1 步:收集材料

1. 说实话,声纳可以有你需要的机器人的任何直径。就我而言,我使用了 4 英寸 PVC 耦合器,因为它具有 Andar 的完美措施。
2. 您还需要声纳测距仪。我使用了 12 个 HC-SR04 传感器。据我所知,它们是最便宜的。
3. 其他应该列出的是
4.扁平电缆
5.连接器
6.焊料
7.花几个小时来组装和测试所有东西。

【Arduino 动手做】构建全方位声纳矩阵 让机器人感知环境图2

【Arduino 动手做】构建全方位声纳矩阵 让机器人感知环境图1

【Arduino 动手做】构建全方位声纳矩阵 让机器人感知环境图3

【Arduino 动手做】构建全方位声纳矩阵 让机器人感知环境图5

【Arduino 动手做】构建全方位声纳矩阵 让机器人感知环境图4

回复

使用道具 举报

驴友花雕  中级技神
 楼主|

发表于 15 小时前

【Arduino 动手做】构建全方位声纳矩阵 让机器人感知环境

第 2 步:布局传感器位置

您需要将圆柱体的周长分成 12 个相等的部分。
这些垂直线中的每条都将是一个超声波测距仪的轴。
为了标记每条线的绘制位置,我使用了您在宜家获得的免费纸尺之一来测量家具等(宜家是一家可以在加拿大购买家居用品的商店)。如果你没有,你甚至可以在一小段透明胶带上线性地做标记,然后用胶带把它粘在夹子上。
要画垂直线,您可以使用厨房里能找到的任何产品的任何盒子,并且足够高,即 90 度的底座。

【Arduino 动手做】构建全方位声纳矩阵 让机器人感知环境图1

回复

使用道具 举报

驴友花雕  中级技神
 楼主|

发表于 15 小时前

【Arduino 动手做】构建全方位声纳矩阵 让机器人感知环境

第 3 步:画出标记超声波测距仪孔的线条

您需要画 4 条线,分别用于 Emiter 和 Receiver Clinder,另外两条用于 Oscilator。
我在声纳传感器下方和上方放置了 5 毫米的自由线。我们将使用该空间来放置底部和顶部盖(当然,如果你想要它们)
更具体地说,这是四行中每一行的详细信息:
1.底部填充器:从底部开始,第一行应在 XX mm.2
处。顶部压片机:在 XX 毫米处画第二条线,也是从底部开始。
3. 摆动器底部:在距底部
XX mm 处画一条新线 4.振荡器顶部:在距底部

XX 毫米处画这条线现在,cilinder 已经完成了我们需要钻孔的所有点。

【Arduino 动手做】构建全方位声纳矩阵 让机器人感知环境图1

回复

使用道具 举报

驴友花雕  中级技神
 楼主|

发表于 15 小时前

【Arduino 动手做】构建全方位声纳矩阵 让机器人感知环境

第 4 步:开始钻孔

现在我们将开始在放置超声波测距仪的位置打所有孔。

使用上一步中绘制的标记检查每个孔的制作位置。请记住,如果您先打一个小孔,您将对它的位置有更多的控制权。之后,您可以使用正确的位。

我提出的另一个建议是只为一个传感器打孔,测试它是否正确安装,如果合适,则转到下一组孔。如果你一起做所有事情,你犯了错误,你将无法解决它。

从 las 图像中可以看出,两个振荡器孔应该连接在一起。

确保所有测距仪都正确安装在预期位置。如果情况并非如此(一开始我不是这样),请纠正孔,这样您就知道一切都会适合。

【Arduino 动手做】构建全方位声纳矩阵 让机器人感知环境图1

【Arduino 动手做】构建全方位声纳矩阵 让机器人感知环境图2

【Arduino 动手做】构建全方位声纳矩阵 让机器人感知环境图3

【Arduino 动手做】构建全方位声纳矩阵 让机器人感知环境图5

【Arduino 动手做】构建全方位声纳矩阵 让机器人感知环境图4

回复

使用道具 举报

驴友花雕  中级技神
 楼主|

发表于 15 小时前

【Arduino 动手做】构建全方位声纳矩阵 让机器人感知环境

第 5 步:创建电缆以连接所有传感器

如果您以前使用过超声波测距仪,那么您已经知道它们(至少)有 4 个引脚

• Vcc
• GND
• Trig
• Echo

因此,由于我们将使用 12 个声纳,因此我们谈论的是 Trig 和 Echo 的 24 个引脚。Arduino Nano 没有 24 个数字引脚可供使用。好吧,我们要做的是将 Trig 和 Echo 引脚连接在一起,这样我们每个传感器就可以只使用一个信号引脚。(这不是我的想法,它是您可以在我在代码中使用的 NewPing 库中找到的示例的一部分。

思考是..你将不得不焊接一大堆连接..

正如您在图像中看到的,所有 Vcc 都连接在一起。所有 GND pins的运行相同。

其余电缆连接到每个传感器上 Trig/Echo 的 12 个引脚。

【Arduino 动手做】构建全方位声纳矩阵 让机器人感知环境图1

【Arduino 动手做】构建全方位声纳矩阵 让机器人感知环境图2

【Arduino 动手做】构建全方位声纳矩阵 让机器人感知环境图4

【Arduino 动手做】构建全方位声纳矩阵 让机器人感知环境图5

【Arduino 动手做】构建全方位声纳矩阵 让机器人感知环境图6

【Arduino 动手做】构建全方位声纳矩阵 让机器人感知环境图3



回复

使用道具 举报

驴友花雕  中级技神
 楼主|

发表于 15 小时前

【Arduino 动手做】构建全方位声纳矩阵 让机器人感知环境

第 6 步:Arduino Nano 连接

【Arduino 动手做】构建全方位声纳矩阵 让机器人感知环境图1
回复

使用道具 举报

驴友花雕  中级技神
 楼主|

发表于 15 小时前

【Arduino 动手做】构建全方位声纳矩阵 让机器人感知环境


第 7 步:将您的 Sketch 安装到 Arduino 中

  1. /*
  2. 【Arduino 动手做】构建全方位声纳矩阵 让机器人感知环境
  3. */
  4. #include <NewPing.h>  // **引入 NewPing 库,用于控制超声波传感器**
  5. #define SONAR_NUM     12  // **超声波传感器数量**
  6. #define MAX_DISTANCE 200  // **最大检测距离(单位:厘米)**
  7. #define PING_INTERVAL 29  // **每个传感器之间的检测间隔时间(单位:毫秒),避免相互干扰**
  8. unsigned long pingTimer[SONAR_NUM];  // **存储每个传感器下一次执行 ping 的时间**
  9. unsigned int cm[SONAR_NUM];          // **用于存储测得的距离**
  10. uint8_t currentSensor = 0;           // **当前活动的传感器编号**
  11. NewPing sonar[SONAR_NUM] = {  // **初始化超声波传感器数组,每个传感器独立指定触发和回响引脚**
  12.   NewPing(2, 2, MAX_DISTANCE),  // **定义第 1 个传感器(触发引脚 2,回响引脚 2,最大测量 200cm)**
  13.   NewPing(3, 3, MAX_DISTANCE),  // **第 2 个传感器**
  14.   NewPing(4, 4, MAX_DISTANCE),  // **第 3 个传感器**
  15.   NewPing(5, 5, MAX_DISTANCE),
  16.   NewPing(6, 6, MAX_DISTANCE),
  17.   NewPing(7, 7, MAX_DISTANCE),
  18.   NewPing(8, 8, MAX_DISTANCE),
  19.   NewPing(9, 9, MAX_DISTANCE),
  20.   NewPing(10, 10, MAX_DISTANCE),
  21.   NewPing(11, 11, MAX_DISTANCE),
  22.   NewPing(12, 12, MAX_DISTANCE),
  23.   NewPing(13, 13, MAX_DISTANCE)
  24. };
  25. void setup() {
  26.   Serial.begin(115200);  // **启动串口调试**
  27.   pingTimer[0] = millis() + 75;  // **第一个传感器的首次测距延迟 75ms(让 Arduino 完全启动后再执行)**
  28.   
  29.   for (uint8_t i = 1; i < SONAR_NUM; i++)  // **初始化每个传感器的检测时间**
  30.     pingTimer[i] = pingTimer[i - 1] + PING_INTERVAL;
  31. }
  32. void loop() {
  33.   for (uint8_t i = 0; i < SONAR_NUM; i++) {  // **轮询所有传感器**
  34.     if (millis() >= pingTimer[i]) {  // **当前时间 >= 传感器的下次执行时间**
  35.       pingTimer[i] += PING_INTERVAL * SONAR_NUM;  // **更新该传感器的下次执行时间**
  36.       
  37.       if (i == 0 && currentSensor == SONAR_NUM - 1) oneSensorCycle(); // **所有传感器扫描完成,执行数据处理**
  38.       
  39.       sonar[currentSensor].timer_stop();  // **确保之前的传感器检测被终止**
  40.       currentSensor = i;  // **更新当前活动传感器编号**
  41.       cm[currentSensor] = 0;  // **如果没有回声,默认距离设置为 0**
  42.       sonar[currentSensor].ping_timer(echoCheck);  // **启动超声波测距(事件驱动方式)**
  43.     }
  44.   }
  45.   // **此处可以添加其他代码(不会影响超声波测距)**
  46. }
  47. void echoCheck() { // **测距回调函数,检测到回声后记录测得的距离**
  48.   if (sonar[currentSensor].check_timer())
  49.     cm[currentSensor] = sonar[currentSensor].ping_result / US_ROUNDTRIP_CM; // **转换为厘米**
  50. }
  51. void oneSensorCycle() { // **所有传感器扫描完成,处理测得的距离**
  52.   for (uint8_t i = 0; i < SONAR_NUM; i++) {
  53.     Serial.print(cm[i]);  // **打印测得的距离**
  54.     if(i < SONAR_NUM - 1) Serial.print(",");
  55.   }
  56.   Serial.print("|");  // **分隔符**
  57. }
复制代码


回复

使用道具 举报

驴友花雕  中级技神
 楼主|

发表于 14 小时前

【Arduino 动手做】构建全方位声纳矩阵 让机器人感知环境

第 8 步:连接到 PC 并运行 Sonar .net 应用程序

【Arduino 动手做】构建全方位声纳矩阵 让机器人感知环境图2

【Arduino 动手做】构建全方位声纳矩阵 让机器人感知环境图1
回复

使用道具 举报

驴友花雕  中级技神
 楼主|

发表于 14 小时前

【Arduino 动手做】构建全方位声纳矩阵 让机器人感知环境

附录
【Arduino 动手做】构建全方位声纳矩阵 让机器人感知环境
项目链接:https://www.instructables.com/member/_now_/
项目作者:加拿大多伦多
(我是男朋友、父亲、软件开发人员和创客,在阿根廷长大,目前住在加拿大多伦多。)
项目视频(只有类似参考演示):https://www.youtube.com/watch?v=SvLObGL-5ZY
项目代码:https://bitbucket.org/nahueltaibo/andar/src/wheelsWorking/
3D打印文件:无需打印


【Arduino 动手做】构建全方位声纳矩阵 让机器人感知环境图1

项目代码.zip

2 KB, 阅读权限: 50, 下载次数: 0

回复

使用道具 举报

帅猫  高级技师

发表于 11 小时前

哥,求您认真自己做一个吧,转载再多也不是自己的
回复

使用道具 举报

驴友花雕  中级技神
 楼主|

发表于 5 小时前

翻译、分享与引入国外开源项目 的新探索

本帖最后由 驴友花雕 于 2025-5-25 17:05 编辑
帅猫 发表于 2025-5-25 11:15
哥,求您认真自己做一个吧,转载再多也不是自己的

谢谢鼓励。几年前,从一个干簧管模块开始,我便投入大量时间深入实验,探索各种传感器、执行器、开发板及套件…… 涉及的硬件种类已接近三百,始终保持着严谨的尝试和动手实践。其中最极限的挑战之一,当属 1.28 英寸 GC9A01 圆形屏幕模块,我成功完成了 153 项小实验,并悉心记录下全过程,在博客上分享。这算不算认真?你说了算!

在 CSDN 上,我打造了栏目 《189 种传感器执行器系列开源实验》(189种传感器执行器系列开源实验_驴友花雕的博客-CSDN博客),已累计发布近 1400 篇实验项目博客。至今,Arduino 基础实验项目已坚持六年,不断深耕与优化。

而就在一周前,我开启了翻译、分享与引入国外开源项目的新探索,开始系统性介绍那些富有特色的国际创客作品。我一直欣赏国外创客脑洞大开的创新精神,更敬佩他们 坚持不懈的动手能力。但学习他人经验与自主创新并非对立,而是相辅相成——敢于借鉴先进经验,也是一种成长。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

为本项目制作心愿单
购买心愿单
心愿单 编辑
[[wsData.name]]

硬件清单

  • [[d.name]]
btnicon
我也要做!
点击进入购买页面
上海智位机器人股份有限公司 沪ICP备09038501号-4 备案 沪公网安备31011502402448

© 2013-2025 Comsenz Inc. Powered by Discuz! X3.4 Licensed

mail