颜色传感器 Color Sensor
FLL 最重要的传感器,没有之一。巡线、找线、识别场地标记全靠它。
能测什么
| 模式 | 读值 | 说明 |
|---|---|---|
| 颜色(Color) | 黑、白、红、黄、绿、蓝、青、洋红/紫、无颜色 | 识别离散颜色 |
| 反射光(Reflected Light) | 0-100% | 传感器发光,测反射回来多少。巡线用这个 |
| 环境光(Ambient Light) | 0-100% | 不发光,测环境亮度,FLL 很少用 |
安装要点
- 朝下,离地约 16 mm(官方最佳读取距离,约 5 块乐高平板高)。太高读值发散,太低会蹭地。
- 装在底盘前部、两驱动轮轴线之前——传感器越靠前,巡线纠偏越及时。
- 双传感器巡线时,两个并排装,间距约一条线宽。
- 遮光:传感器周围用乐高件围一圈,减少环境光干扰,比赛场馆的射灯很坑。
Word Blocks 积木
<颜色传感器 [C] 颜色 = [黑色]> ← Sensors 类,条件积木
(颜色传感器 [C] 反射光) ← 圆形读值积木
等待到 <颜色传感器 [C] 颜色 = [黑色]>示例 1:走到黑线停
当程序启动时
设置移动马达 [A+E]
开始移动 [前进]
等待到 <颜色传感器 [C] 反射光 < [30]>
停止移动示例 2:数线
设置 [线数] 为 [0]
开始移动 [前进]
重复执行直到 <(线数) = [3]>
等待到 <颜色传感器 [C] 反射光 < [30]>
将 [线数] 增加 [1]
等待到 <颜色传感器 [C] 反射光 > [60]> ← 关键:等出线,否则一条线数好几次
停止移动Python 写法
python
import runloop, color_sensor, color
from hub import port
async def main():
# 读颜色(返回 color.BLACK 等常量)
if color_sensor.color(port.C) == color.BLACK:
pass
# 读反射光 0-100
value = color_sensor.reflection(port.C)
runloop.run(main())阈值标定:必做
"反射光 < 30 算黑线"里的 30 不能抄,必须在你的场地、你的灯光下实测:
- 写一段程序把反射光实时显示到灯光矩阵:
重复执行 → 显示文字 (反射光)。 - 把传感器放在黑线上读一个数(比如 12),放在白场上读一个数(比如 85)。
- 阈值取中间:(12 + 85) / 2 ≈ 48。判黑用
< 48,判白用> 48。
每换一个场地都要重标
灯光、垫子新旧、传感器高度都影响读值。比赛日到场第一件事:重测黑白值。用变量存阈值,只改一处。
常见坑
- 颜色模式在快速移动时不可靠:机器人一快,颜色跳变。巡线永远用反射光,不用颜色模式。
- 场地上的彩色图案会骗过"找黑线":深蓝、深绿的反射光也很低。数线时结合位置(先走固定距离再开始找线)。
- 两个传感器读值不一样是正常的:每个各标各的阈值。