【Arduino 动手做】脑洞大开构建一个全方位声纳阵,让您的机器人了解环境态势

在这里插入图片描述

《Arduino 手册(思路与案例)》栏目介绍:
在电子制作与智能控制的应用领域:广泛涉及了Arduino BLDC、Arduino CNC、Arduino ESP32 SPP、Arduino FreeRTOS、Arduino FOC、Arduino GRBL、Arduino HTTP、Arduino HUB75、Arduino IoT Cloud、Arduino JSON、Arduino LCD、Arduino OLED、Arduino LVGL、Arduino PID 及 Arduino TFT 等方面的相关拓展思路和众多参考案例。本专栏目前博客近2300篇。
https://blog.csdn.net/weixin_41659040/category_12422453.html

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

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

在这里插入图片描述

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

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

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

第 1 步:收集材料

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

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

第 2 步:布局传感器位置

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

在这里插入图片描述

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

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

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

在这里插入图片描述

第 4 步:开始钻孔

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

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

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

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

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

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

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

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

• Vcc
• GND
• Trig
• Echo

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

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

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

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

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

第 6 步:Arduino Nano 连接

在这里插入图片描述

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

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

#include <NewPing.h>  // **引入 NewPing 库,用于控制超声波传感器**

#define SONAR_NUM     12  // **超声波传感器数量**
#define MAX_DISTANCE 200  // **最大检测距离(单位:厘米)**
#define PING_INTERVAL 29  // **每个传感器之间的检测间隔时间(单位:毫秒),避免相互干扰**

unsigned long pingTimer[SONAR_NUM];  // **存储每个传感器下一次执行 ping 的时间**
unsigned int cm[SONAR_NUM];          // **用于存储测得的距离**
uint8_t currentSensor = 0;           // **当前活动的传感器编号**

NewPing sonar[SONAR_NUM] = {  // **初始化超声波传感器数组,每个传感器独立指定触发和回响引脚**
  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[0] = millis() + 75;  // **第一个传感器的首次测距延迟 75ms(让 Arduino 完全启动后再执行)**
  
  for (uint8_t i = 1; i < SONAR_NUM; i++)  // **初始化每个传感器的检测时间**
    pingTimer[i] = pingTimer[i - 1] + PING_INTERVAL;
}

void loop() {
  for (uint8_t i = 0; i < SONAR_NUM; i++) {  // **轮询所有传感器**
    if (millis() >= pingTimer[i]) {  // **当前时间 >= 传感器的下次执行时间**
      pingTimer[i] += PING_INTERVAL * SONAR_NUM;  // **更新该传感器的下次执行时间**
      
      if (i == 0 && currentSensor == SONAR_NUM - 1) oneSensorCycle(); // **所有传感器扫描完成,执行数据处理**
      
      sonar[currentSensor].timer_stop();  // **确保之前的传感器检测被终止**
      currentSensor = i;  // **更新当前活动传感器编号**
      cm[currentSensor] = 0;  // **如果没有回声,默认距离设置为 0**
      sonar[currentSensor].ping_timer(echoCheck);  // **启动超声波测距(事件驱动方式)**
    }
  }
  // **此处可以添加其他代码(不会影响超声波测距)**
}

void echoCheck() { // **测距回调函数,检测到回声后记录测得的距离**
  if (sonar[currentSensor].check_timer()) 
    cm[currentSensor] = sonar[currentSensor].ping_result / US_ROUNDTRIP_CM; // **转换为厘米**
}

void oneSensorCycle() { // **所有传感器扫描完成,处理测得的距离**
  for (uint8_t i = 0; i < SONAR_NUM; i++) {
    Serial.print(cm[i]);  // **打印测得的距离**
    if(i < SONAR_NUM - 1) Serial.print(",");
  }
  Serial.print("|");  // **分隔符**
}

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

在这里插入图片描述
在这里插入图片描述

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

在这里插入图片描述

评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

驴友花雕

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

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

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

打赏作者

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

抵扣说明:

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

余额充值