科创科普:机器人的「五官」——红外、超声波、颜色传感器的判断逻辑

科创科普:机器人的「五官」——红外、超声波、颜色传感器的判断逻辑

一、传感器的本质:把物理世界翻译成电信号 机器人本身只会算数,它对世界一无所知。传感器干的事只有一件:把一种物理量(光、声、颜色、距离)变成控制器能读的数字。 这个翻译过程分三步,理解这三步就能看懂几乎所有传感器: 1. 敏感元件感受物理量,产生电信号(电压、电流、电阻); 2. 处理电路把微弱的信号放大、整形,变成稳定的模拟电压; 3. 控制器用模数转换(ADC)把电压变成数字,通常是 0 到 1023 这样的整数。 所以「传感器读数」永远是一个连续变化的数字,而不是「有 / 没有」这个结论。从数字到结论这一步,要靠程序里的阈值判断——这正是机器人编程和普通编程最大的区别:所有判断都建立在实测数据上,而不是想当然。

二、红外传感器:循迹小车的主力 最常见的是反射式红外对管,一个管发射红外光,另一个管接收反射回来的光。它的工作原理只有一句话: · 照到白纸或浅色地面 → 反射强 → 接收管导通; · 照到黑线 → 光被吸收 → 反射弱 → 接收管截止。 接收端的通断会被模块上的比较电路转成高低电平,于是控制器就能区分「白」和「黑」。 但有一条必须记住:不同厂家模块的输出极性可能完全相反,有的「检测到黑线输出 1」,有的输出 0。所以上手第一件事不是写逻辑,而是把读数打印出来实测:把小车分别放在白纸上和黑线上,看串口监视器给出的数字,记下两个值,再取中间值作为阈值。 红外传感器的三个物理限制,也决定了它的常见故障: · 受环境光影响:强日光或射灯里有大量红外成分,会把「黑线」误判成「白色」。室内使用、加遮光罩是标准做法。 · 探测距离短:一般只有 1 到 3 厘米,装得太高就永远读同一个值。 · 对材质敏感:光泽黑胶带和磨砂黑纸的反射率差很多,换场地要重新标定。

三、超声波传感器:用「回声」量距离 超声波模块(如 HC-SR04)有两只「眼睛」,一只发、一只收。工作流程是:控制器先给触发脚一个至少 10 微秒的高电平脉冲,模块发出一串 40 kHz 的超声波;声波遇到障碍物反射回来,接收端收到后把回声脚拉高,高电平持续的时长就是声波往返的时间。 距离的计算公式来自小学就学过的「路程 = 速度 × 时间」,只是要除以 2: 往返距离 = 声速 × 时间 单程距离 = 声速 × 时间 ÷ 2 声速取 340 米/秒,换算成厘米和微秒后,得到一个可以直接用的工程公式: 距离(厘米)≈ 回声脉宽(微秒)÷ 58 例题:测得回声高电平持续 1160 微秒,距离是多少? 1160 ÷ 58 = 20,所以障碍物在 20 厘米处。 反过来,想让小车在 30 厘米处停下,就要判断 读数 < 30。 超声波有三个典型坑: · 测不到软的东西。棉花、绒布、海绵会把声波吸收掉,读数直接跳到最大值。 · 测不准斜面和细小物体。声波打在斜面上会反射到别处,回不来。 · 相邻两台小车同时工作会互相干扰。要么错开测距时机,要么加随机延时。 还有一个细节:超声波有最小盲区(通常 2 厘米左右),贴得太近反而读不到。所以设计避障逻辑时,别把「停车距离」设得比盲区还小。

四、颜色传感器:把「颜色」拆成三个数字 颜色传感器(如 TCS34725)内部有红、绿、蓝三组滤光片加光电二极管,输出 R、G、B 三个通道的强度值,另外还有一个「清晰光」通道表示总亮度。 它带来的第一个认知转变是:颜色不是一种属性,而是三个数字的组合。所谓「红色」,就是 R 明显大于 G 和 B。 第二个转变是:颜色判断必须标定。同样是红色卡片,在日光灯下和窗边自然光下,RGB 数值能差出一大截。正确做法是现场采集样本:把要识别的几种颜色各读 10 次,算出每种的数值范围,找出区间不重叠的那个通道做判断。 工程上的常用技巧是归一化,用比例代替绝对值,抵消整体亮度变化: 红占比 = R ÷ (R + G + B) 这样即使灯变亮了,比例也基本稳定,判断规则不用重写。

五、从模拟量到判断:阈值 + 去抖动 拿到数字之后,程序要做两件事。 第一件是设阈值。阈值不要凭感觉,要实测:把传感器在两种状态下各读几十次,取两组数据的中间值。如果两组数据本身有重叠,说明这个传感器在这个场景下不可靠,换方案比调参数更值得。 第二件是去抖动。真实世界的读数会跳:地面有一道划痕、光线抖一下,单个采样就可能给出错误值。解决办法是「连续确认」——连续 3 次读到同一个结论才认,代码上就是一个计数器: 读到黑线 → 计数加 1;读到白 → 计数清零;计数达到 3 才执行转向。 这一招能消掉绝大多数「小车在路上突然抽一下」的怪现象,代价只是几毫秒的延迟。

六、案例:双红外循迹小车的决策表 小车左右各装一个红外传感器,贴着黑线走。先定好约定:读到黑线记为 1,读到白色记为 0。四种组合对应四个动作: · 左 0 右 0:两个都在白区,说明压线居中,直行。 · 左 1 右 0:左边压线,车身偏右,向左微调。 · 左 0 右 1:右边压线,车身偏左,向右微调。 · 左 1 右 1:两个都在黑线上,可能是十字路口或终点横线,按预设策略处理——数路口就继续直行,找终点就停车。 写代码时按「读传感器 → 判断 → 输出电机」三步组织,每个循环都完整走一遍,不要在不同分支里各读一次传感器,否则判断依据会不一致。 如果想让小车走得平滑,就把「向左微调」从「左轮停、右轮转」换成「左轮慢、右轮快」,用两路 PWM 的占空比差值控制转向幅度,而不是非开即关。

七、五个常见故障与排查顺序 · 读数永远不变:先看接线(信号线是否插对引脚)、再看供电(红外模块通常 3.3 到 5 伏)、最后看安装高度。 · 时好时坏:八成就环境光或接触不良,加遮光、重新插紧排线。 · 超声波一直是 0 或最大值:检查触发脉冲是否够 10 微秒,回声脚是否接对,以及前面是不是有吸音材料。 · 小车走 S 形:阈值太靠近某一侧,或者转向幅度过大,降低速度、缩小差速值。 · 换了场地就失灵:反射率变了,阈值必须重新标定,这不是 bug 而是物理规律。

八、练习 1. 超声波测得回声高电平 580 微秒,障碍物距离多少厘米?若想让小车在 15 厘米处报警,判断条件怎么写? 2. 为什么超声波测距公式里要除以 2?如果不除会得到什么结果? 3. 某红外模块在白色地面读数为 120,在黑线上读数为 860。阈值应设多少?如果编写的是「大于阈值判为黑线」,那么读到 500 时结论是什么? 4. 颜色传感器读到一组数据 R=210、G=60、B=55,最可能是什么颜色?如果整体亮度翻倍变成 R=420、G=120、B=110,用绝对阈值判断会不会出错?怎么改? 5. 写出「连续 3 次确认才认为检测到黑线」的文字版逻辑流程。 6. 一台循迹小车在体育馆木地板上正常,换到黑色橡胶地垫上就频繁冲出赛道,请按可能性从高到低列出三个原因。

参考答案思路 1. 580 ÷ 58 = 10 厘米;判断条件写成 距离 < 15 时报警。 2. 因为声波走的是「去 + 回」两段路程,脉宽记录的是往返总时间,除以 2 才是单程。不除会把距离算大一倍。 3. 阈值取中间值约 490(可行范围大致 120 到 860 之间任取,取中点最稳);读到 500 大于阈值,判定为黑线。 4. 红色。亮度翻倍后绝对阈值必然失效(原本的 R 上限被突破),应改用比例判断:R ÷ (R+G+B) 约为 0.65,仍然远大于另外两个通道。 5. 设 count=0 → 每个循环读一次 → 若为黑则 count 加 1,否则 count 归零 → 若 count ≥ 3 则执行「已确认黑线」的动作,并把 count 保持或清零后重新计数。 6. 一是黑色橡胶反射率与黑线接近,模块分不清线与地,需要重新标定甚至换用灰度更敏感的方案;二是地垫表面粗糙或有纹理,导致读数抖动,需要加强去抖动;三是地垫可能偏软或有接缝,使小车行进高度变化,红外探测距离超出有效范围。