亿迅智能制造网
工业4.0先进制造技术信息网站!
首页 | 制造技术 | 制造设备 | 工业物联网 | 工业材料 | 设备保养维修 | 工业编程 |
home  MfgRobots >> 亿迅智能制造网 >  >> Manufacturing Technology >> 制造工艺

使用 Arduino Yun 的超声波地图制作器

组件和用品

Arduino Yun
× 1
超声波传感器
× 1
舵机(Tower Pro MG996R)
× 1
跳线(通用)
× 10

应用和在线服务

Arduino IDE
MATLAB

关于这个项目

第一步:理论

在这个项目中,我们使用超声波距离传感器。它产生超出人类听觉范围的声波,并通过计算这些声波撞击障碍物并返回所需的时间来测量距离。这类似于蝙蝠和游轮使用的原理。

我们将要使用的另一个组件是伺服电机。它不同于通常的直流电机,因为它可以非常精确地转动到给定的角度位置并保持在那里的状态。当伺服电机被给予特定持续时间的脉冲时,它会移动到相应的角位置。

我们将使用这两个组件为我们的机器人获得 180 度的视野。

第 2 步:收集材料

本项目使用以下硬件

  • Arduino Uno/Yun(请注意,任何 Arduino 封装板均可用于代替 Uno 或 Yun)
  • Arduino 原型开发板
  • HC-04 超声波传感器
  • 伺服电机(我使用了 Tower Pro SG90,因为它非常紧凑)
  • 在软件方面,我们使用以下程序
  • Arduino IDE 将控制代码上传到 Arduino 以旋转舵机并从超声波传感器获取距离数据并将其推送到串口。
  • Mathworks MatLab 从串行线路接收数据,对其进行处理并将其可视化为图形。

第三步:机械组装

使用一小块通用PCB,为HC-04制作一个小接头,并使用一块双面胶带将其连接到伺服喇叭上。

这一步是可选的,但为了使系统更紧凑,我也使用双面胶带将伺服器连接到原型板屏蔽的突出部分。

最终的结果应该看起来像 Wall-E 的腹部。

第 4 步:Arduino 代码

Arduino 代码控制伺服电机的运动,以及何时捕获来自超声波传感器的读数以及频率。它还将传感器数据推送到串口。

  • 导入库
  • 初始化变量和引脚。
  • 初始化伺服对象
  • 初始化串行通信
  • 等待 3 秒
  • 将计数器初始化为 0
  • 将舵机旋转 1 度
  • 获取超声波传感器数据 10 次(默认设置)
  • 平均数据
  • 将平均值发送到串口
  • 返回第 7 步

第 5 步:MatLab 代码

MatLab 代码处理的数据比实际控制板的要多,因此所有传感器数据都通过串行方式推送到 PC,由 MatLab 读取。

现在,我们从 Arduino 收到的数据告诉我们两件事。舵机的旋转度数和障碍物在该方向上的距离。因此,我们此时拥有的数据在极坐标系中。为了在可视化时对人眼有意义,必须将其转换为笛卡尔或 X-Y 坐标系。

所以 MatLab 代码就是这样做的。它从COM口串行获取数据,将其保存为带有旋转角度的矩阵,然后用上面给出的公式将其转换为笛卡尔坐标。

完成后,它会通过在图形上绘制点来给出输出。我把板子放在盒子里,得到如下结果。

第六步:结论

虽然系统并不完美,但它可以完成工作。可以粗略估计箱体的宽度和长度,并准确发送数据。

目前我能看到的唯一错误是由于伺服器移动时传感器的晃动以及传感器本身的错误读数。

除此之外,该系统运行良好,可用于深度感知实验以及基本的计算机视觉项目。

代码

  • matlab_code_to_run_on_pc.m
  • Arduino 代码
matlab_code_to_run_on_pc.mMATLAB
在 PC 上编译和执行的 MatLab 代码
theta =0:(pi/180):pi;s =serial('COM10');s.BaudRate=9600fopen(s)i =0;inc =1;while i<180 A =fgets(s); num(i+1) =str2num(A); i =i+1;endfclose(s)j =1while j<181 tab(j,1) =(j-1)*inc tab(j,2) =num(j) tab(j,3) =num( j)*cosd((j-1)*inc) tab(j,4) =num(j)*sind((j-1)*inc) j =j+1end%figure%polar(theta,num)plot (tab(:,3),tab(:,4))
Arduino 代码Arduino
Arduino代码上传到Arduino Yun
#include #include #define TRIGGER_PIN 12 #define ECHO_PIN 11 #define MAX_DISTANCE 200 NewPing sonar(TRIGGER_PIN, ECHO_PIN, MAX_DISTANCE);伺服myservo; int pos =0; int it =10;void setup() { myservo.attach(9); Serial.begin(9600);延迟(3000);}void loop(){ int i =0;整数 t =0; int a =0; for (i =0; i <180; i ++) { unsigned int uS =sonar.ping(); myservo.write(i);延迟(20); for (t =0; t  

示意图

伺服和超声波传感器连接的 Fritzing 文件 YunConfig.fzz

制造工艺

  1. 使用 Arduino 制作流光溢彩监视器
  2. 使用 Arduino Uno 的人体检测机器人系统
  3. 使用 ARDUINO 的超声波悬浮机器
  4. FlickMote
  5. 使用 Arduino 和智能手机的 DIY 电压表
  6. 使用物联网的心率监测器
  7. 使用 Raspberry Motor Shield 的 Android 控制玩具
  8. IOT - 使用 ESP8266、Arduino 和超声波传感器的智能罐
  9. WebServerBlink 使用 Arduino Uno WiFi
  10. 线跟随机器人
  11. 使用 arduino 的自动化恐龙游戏
  12. Arduino 培训平台