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

Arduino Yun + 超声波传感器构建 180° 环境扫描成像仪:配合 MATLAB 可视化

项目原理

利用 HC-SR04 超声波测距模块安装在 Tower Pro MG996R 舵机臂上,舵机以 1° 步进扫描 0°~180°。每个角度采集 10 次超声波读数取平均,通过串口实时发送至 PC。PC 端运行 MATLAB 脚本,将极坐标 (角度, 距离) 转换为笛卡尔坐标 (x, y) 并实时绘制散点图,形成类似激光雷达的 2D 环境轮廓。

硬件清单

机械组装

  1. 在万用板焊接 HC-SR04 排针座,用双面胶固定于舵机舵盘 (舵机臂) 上,传感器朝前。
  2. 将舵机机身用双面胶粘贴在原型扩展板凸出的 USB 接口一侧,整体形似 "Wall-E 腹部"。
  3. 接线:HC-SR04 VCC/Trig/Echo/GND → 5V/D12/D11/GND;舵机信号线 → D9,电源并联 5V/GND (建议外接 5V 2A 电源避免 USB 电流不足)。

Arduino 固件 (核心逻辑)

#include <Servo.h>
#include <NewPing.h>
#define TRIGGER_PIN 12
#define ECHO_PIN 11
#define MAX_DISTANCE 200

NewPing sonar(TRIGGER_PIN, ECHO_PIN, MAX_DISTANCE);
Servo myservo;
const int samples = 10;

void setup() {
  myservo.attach(9);
  Serial.begin(9600);
  delay(3000); // 等待 MATLAB 打开串口
}

void loop() {
  for (int angle = 0; angle < 180; angle++) {
    myservo.write(angle);
    delay(20); // 舵机到位
    long sum = 0;
    for (int i = 0; i < samples; i++) {
      sum += sonar.ping_cm();
      delay(30);
    }
    int avg = sum / samples;
    Serial.println(avg); // 每行一个整数 cm
  }
}

MATLAB 可视化脚本

theta = 0:(pi/180):pi;          % 0~180° 弧度
s = serial('COM10');            % 修改为实际端口
s.BaudRate = 9600;
fopen(s);

num = zeros(1,180);
for i = 1:180
  num(i) = str2double(fgets(s));
end
fclose(s);

% 极坐标转笛卡尔
x = num .* cosd(0:179);
y = num .* sind(0:179);

figure;
plot(x, y, 'b.', 'MarkerSize', 6);
axis equal; grid on;
xlabel('X (cm)'); ylabel('Y (cm)');
title('180° Ultrasonic Scan');

实测效果与误差分析

实测在一个 60×40 cm 纸箱内,扫描结果能清晰还原箱体轮廓,但存在以下误差源:

改进方向:

  1. 改用 TFmini Plus 等 ToF 激光雷达模块,分辨率 cm 级、扫描频率 100Hz。
  2. 舵机改为步进电机 + 编码器闭环,消除抖动。
  3. 在 Arduino 端实现滑动窗口中值滤波,减少离群值。
  4. 将 MATLAB 替换为 Python (pyserial + matplotlib) 实现跨平台免费部署。

扩展应用

原理图与资源

Fritzing 文件 YunConfig.fzz 包含完整接线,可在 Schematics 标签页下载。

制造工艺

  1. 用 Arduino 打造绚丽显示器 Ambilight 系统
  2. 基于 Arduino Uno 的人体检测救援机器人:传感器集成分步指南
  3. 用 Arduino 制作超声波悬浮装置:分步指南
  4. FlickMote:基于手势的智能家居红外遥控器
  5. Arduino 与智能手机打造智能电压表——简单易做的 DIY 项目
  6. 基于 Arduino 与 MAX30100 的实时物联网心率监测系统
  7. Android 手势遥控车:Raspberry Pi + Arduino 101 + 电机扩展板,I2T 协同控制
  8. 智能物联网罐:ESP8266 + Arduino + 超声波传感器实时监测罐内物位
  9. Arduino Uno WiFi 网页服务器:通过浏览器控制 LED 开关
  10. Arduino UNO 自制循迹小车:从零构建自主巡线机器人
  11. Arduino 自动化 Chrome 恐龙游戏 - LDR 光敏电阻 + Python 实现全自动跳跃
  12. Arduino Mega 2560 综合实训平台 - 传感器/电机/显示/PCB 一体化开发板