第1章:碰撞检测原理
大家好,我是你们的嵌入式系统讲师。今天咱们来聊聊扫地机器人最核心的感知能力——碰撞检测。
你想想看,一台扫地机要是连撞墙了都不知道,那还怎么干活?我最早做机器人项目时,就吃过这个亏。当时用的机械碰撞传感器,结果因为安装角度不对,机器人愣是跟墙角较了半天劲。嗯,从那以后我对碰撞检测就格外上心。
1.1 机械碰撞传感器工作原理
机械碰撞传感器,说白了就是最朴素的「碰了就触发」。它的结构其实很简单:一个弹簧片加一个微动开关。
当机器人撞到障碍物时,保险杠会向内压缩。这个力会推动弹簧片,进而触发微动开关。开关一闭合,电路就通了,主控芯片就知道:「哦,撞上了」。
关键参数:
- 触发力:通常在 0.5N - 2N 之间
- 响应时间:约 5ms - 20ms
- 寿命:一般 10 万次以上
我在项目中遇到过一个问题:机械传感器用久了,弹簧片会疲劳。结果就是,轻轻碰一下不触发,使劲撞才反应。所以我现在做设计时,都会留一个「预压余量」——让弹簧片在未触发状态下就有一点点预紧力。
我的小技巧:安装时让保险杠和开关之间留 0.5mm 左右的间隙。这样既不会误触发,又能保证灵敏度。
1.2 红外碰撞传感器工作原理
红外传感器就不一样了。它不用物理接触,靠的是光。
原理其实很简单:发射管发出一束红外光,如果前方有障碍物,光就会反射回来。接收管收到反射光后,输出信号就会变化。
但这里有个坑——我踩过。红外光对不同颜色的物体反射率差别很大。白色墙面反射率能到 90%,黑色家具可能只有 10%。你想想看,同样的距离,白色能检测到,黑色就检测不到。
注意:红外传感器容易受环境光干扰。阳光直射时,接收管可能饱和,导致检测失效。我建议在传感器外面加一个遮光罩。
常用的红外碰撞传感器型号有:
| 型号 | 检测距离 | 工作电压 | 输出方式 |
|---|---|---|---|
| GP2Y0A21YK0F | 10cm - 80cm | 4.5V - 5.5V | 模拟电压 |
| SHARP 2Y0A02 | 20cm - 150cm | 4.5V - 5.5V | 模拟电压 |
| E18-D80NK | 3cm - 80cm | 5V DC | 数字高低电平 |
我个人习惯用 E18-D80NK,因为它输出的是数字信号,直接接 GPIO 就行,省事。不过它的检测距离可调,记得用螺丝刀拧一下背后的电位器。
1.3 超声波碰撞传感器工作原理
超声波传感器,原理跟蝙蝠一样。发射一个 40kHz 的声波,然后等回声回来。算一下时间差,距离就出来了。
公式很简单:
距离 = (声速 × 时间差) / 2
为什么除以2?因为声波走了个来回。发射出去,碰到障碍物,再反射回来。这个坑我刚开始也犯过——忘了除以2,算出来的距离翻了一倍。
实际应用中的注意事项:
- 声速受温度影响:0℃ 时约 331m/s,每升高 1℃ 增加 0.6m/s
- 检测角度:一般 ±15°,太偏了反射信号就弱了
- 盲区:通常 2cm - 5cm,太近反而测不准
我曾经在一个项目里用 HC-SR04 做悬崖检测。结果发现,当机器人在地毯上时,超声波会被地毯吸收,根本收不到回声。嗯,这就是为什么很多扫地机用红外做悬崖检测,而不是超声波。
三种传感器各有各的脾气。机械的可靠但会留痕迹,红外的灵敏但怕干扰,超声波的测距准但有盲区。我一般建议:
- 正面碰撞:用机械传感器,皮实耐用
- 侧面避障:用红外传感器,反应快
- 悬崖检测:用红外或超声波,看具体场景
好了,这一章就聊到这儿。下一章咱们会深入讲讲怎么把这些传感器接到单片机上,以及怎么处理它们的信号。到时候我会带大家手写一段驱动代码。