Arduino 超声波与红外线传感器整合:打造全向障碍侦测系统
为谁而做:阿哲(想制作避障小车)
父代基因:超声波传感(14)、红外线传感(09)
核心概念:结合超声波与红外线实现全向障碍侦测
想象一下:你桌面上的一辆小型避障小车,突然遇到一只手、一块浅色泡沫塑料以及远处的墙壁——面对这三种不同的障碍物,它都能正确停下来吗?
单一传感器无法做到。但如果将超声波传感器(HC-SR04)和红外线传感器结合起来,就可以实现。
1. 为什么要整合?(互补特性分析)
超声波传感器(HC-SR04)
- 原理:发射超声波,计算返回时间 \text{Distance} = \frac{\text{Sonic Speed} \times \text{Time}}{2}。
- 优点:测距范围广(约 2厘米 ~ 400厘米),对物体颜色不敏感。
-
缺点:
- 盲区:距离太近的物体测量不准。
- 声波散射:面对倾斜表面或吸音材料(如海绵、布料)时,声波被散射导致回传失败,从而“看不见”障碍物。
红外线传感器
- 原理:发射红外光,侦测反射回来的光强度。
- 优点:反应速度快,适合近距离侦测(边缘侦测、极近障碍)。
-
缺点:
- 深色物体吸收红外光:黑色或深色表面会使侦测距离大幅缩短,甚至完全侦测不到。
- 环境光干扰:强烈阳光(含有红外线成分)可能造成误判。
整合策略:双重验证
| 情境 | 超声波结果 | 红外线结果 | 系统判定 |
|---|---|---|---|
| 远处有墙 | \text{Distance} < 20\text{cm} | 无触发 | 障碍物(远) |
| 面对浅色泡沫塑料(多孔) | 无回传(散射) | 触发(吸光少) | 仅超声波(超声波失效,红外线补位) |
| 面前有白色墙壁 | \text{Distance} < 5\text{cm} | 触发 | 障碍物(极近) |
| 空旷环境 | \text{Distance} > 20\text{cm} | 无触发 | 安全 |
阿哲可能遇到的问题:为什么浅色泡沫塑料让超声波“失效”了,但红外线却侦测到了?因为泡沫塑料表面柔软且多孔,声波散射后无法返回,但红外光仍能反射回来被读取——两种传感器的物理特性不同,恰好形成互补。
2. 硬件接线
元件清单
- Arduino Uno 或 Nano × 1(约新台币200-300元)
- HC-SR04 超声波模块 × 1(约新台币50-80元)
- 红外线障碍侦测模块 × 1(约新台币30-50元)
- 面包板、杜邦线
接线表
| 元件 | 引脚 | Arduino 引脚 | 说明 |
|---|---|---|---|
| HC-SR04 | VCC | 5V | 电源 |
| Trig | D9 | 触发脉冲 | |
| Echo | D10 | 接收回传 | |
| GND | GND | 接地 | |
| 红外线传感器 | VCC | 5V | 电源 |
| OUT | D2 | 侦测信号(低电平 = 侦测到) | |
| GND | GND | 接地 |
3. 代码实现
// 定义引脚
const int TRIG_PIN = 9;
const int ECHO_PIN = 10;
const int IR_PIN = 2;
const long MAX_DISTANCE = 300; // 哨兵值:代表“测不到/超出范围”,并非真实可测距离(pulseIn 超时限制使得实际测量上限约为 51厘米)
const int DEBOUNCE_COUNT = 3; // 连续侦测次数
免责声明:本文内容来自互联网,该文观点不代表本站观点。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,请到页面底部单击反馈,一经查实,本站将立刻删除。