共计 1681 个字符,预计需要花费 5 分钟才能阅读完成。
一、背景痛点:为什么选择红外对码管?
弧形赛道与传统直线赛道的核心差异在于 路径曲率连续性变化。传统直线寻迹常用的灰度传感器在弧形区域会出现:
- 检测盲区增大(传感器间距固定)
- 反射信号强度突变(赛道边缘曲率变化)
红外对码管方案的优势突显在:
- 抗干扰能力:940nm 波长红外光可有效抑制环境光干扰
- 响应速度:调制解调电路可实现微秒级响应(实测 <200μs)
- 安装灵活:可呈弧形阵列排布匹配赛道曲率
二、技术方案对比
| 传感器类型 | 灵敏度 | 成本 | 复杂度 | 适用曲率范围 |
|---|---|---|---|---|
| 光电编码器 | ★★★☆ | 高 | 高 | <0.5m 半径 |
| 摄像头 | ★★★★ | 极高 | 极高 | 全范围 |
| 红外对管 | ★★☆ | 低 | 中 | >0.2m 半径 |
注:灵敏度评级基于 5cm 检测距离下的实测数据
三、核心实现细节
3.1 电路设计关键点

- 发射端:
- 使用 TSAL6200 红外 LED
- 限流电阻 R1=100Ω(If=20mA 时)
-
38kHz 载波由 NE555 产生
-
接收端:
- TSOP4838 解调接收器
- 旁路电容 C1=0.1μF(必须靠近 VCC 引脚)
- 上拉电阻 R2=10kΩ
3.2 信号处理代码(PlatformIO 格式)
// 红外传感器阵列定义
const uint8_t irPins[] = {A0, A1, A2, A3, A4};
#define SAMPLE_COUNT 5 // 滑动窗口大小
void setup() {Serial.begin(115200);
for(auto pin : irPins) pinMode(pin, INPUT);
}
void loop() {static uint16_t history[5][SAMPLE_COUNT] = {0};
static uint8_t idx = 0;
// 带滑动平均的 ADC 采样
for(uint8_t i=0; i<5; i++) {history[i][idx] = analogRead(irPins[i]);
uint16_t avg = 0;
for(uint8_t j=0; j<SAMPLE_COUNT; j++) avg += history[i][j];
avg /= SAMPLE_COUNT;
// 动态阈值判断
bool isBlack = avg > (getBaseline(i) + 50);
trackStatus |= (isBlack << i);
}
idx = (idx + 1) % SAMPLE_COUNT;
// 赛道边缘检测算法
int16_t error = calculateError(trackStatus);
// ...PID 计算部分省略...
}
四、调优实战技巧
4.1 环境光干扰消除
- 载波频率选择 38kHz(避开日光灯 100Hz 干扰)
- 在接收端添加光学滤光片(建议 RG850 玻璃)
- 代码实现动态基线校准:
uint16_t getBaseline(uint8_t ch) {static uint16_t baselines[5] = {512};
if(millis() % 1000 == 0) { // 每秒校准
baselines[ch] = analogRead(irPins[ch]);
}
return baselines[ch];
}
4.2 曲率自适应策略
- 建立曲率 - 阈值对照表:
- 直线段:阈值差±30
- R=0.5m 弯道:阈值差±45
-
R=0.3m 急弯:阈值差±60
-
通过传感器阵列的激活模式判断当前曲率
五、常见问题排查
5.1 焊接缺陷检测
- 症状:某通道始终输出最大值
- 诊断:
- 测量接收端 VCC-GND 间电阻(正常应 >1MΩ)
- 用手机摄像头观察发射管(应可见紫色光点)
5.2 多传感器仲裁逻辑
当相邻传感器出现冲突时:
- 优先信任内侧传感器(弯道内侧)
- 检查信号上升沿斜率(真实赛道边缘变化更陡)
- 启用历史数据加权(最近 3 次采样占 70% 权重)
六、测试验证方法
6.1 示波器诊断
- 正常信号特征:
- 接收端输出脉冲宽度 >200μs
- 无信号时基线噪声 <50mV
6.2 PID 整定建议
- 先调 D 参数抑制过冲(典型值 0.5-1.5)
- 再调 P 参数提升响应速度(典型值 2.0-4.0)
- 最后微调 I 参数消除静差(典型值 0.01-0.05)
延伸思考
- 如何结合光电编码器实现里程辅助定位?
- 在 S 弯道场景下,传感器阵列的最佳间距是多少?
- 当需要检测交叉线时,信号处理算法需要哪些改进?
实战建议:先用纸板制作可变曲率测试轨道,逐步调整传感器倾角(推荐 15°-30°)
正文完
发表至: 未分类
近一天内
