TCS230/TCS3200 颜色传感器 Arduino 颜色识别全攻略
传感器原理
8×8 光二极管阵列:16 红滤波、16 绿滤波、16 蓝滤波、16 无滤波。通过 S2/S3 选择读取哪组:
| S2 | S3 | 选择 |
|---|---|---|
| L | L | 红 |
| H | H | 绿 |
| L | H | 蓝 |
| H | L | 清除(白光) |
S0/S1 设置输出频率分频(100%/20%/2%),适配不同 MCU 计数能力。输出为频率与光强成正比的方波。
接线与基础读取
S0~S3、OUT 接数字引脚。pulseIn(pin, LOW) 测量低电平脉宽,频率 = 1e6 / 脉宽(μs)。
频率映射为 RGB 0~255
实测白色约 70 Hz,红色约 25 Hz(20% 分频下)。用 map() 线性映射:
// 红色通道示例
digitalWrite(S2, LOW); digitalWrite(S3, LOW);
frequency = pulseIn(sensorOut, LOW);
frequency = map(frequency, 25, 72, 255, 0); // 反向映射:频率越低光强越强
Serial.print("R="); Serial.print(frequency);
绿、蓝通道分别标定对应范围(如 G: 30~90, B: 25~70)。
完整循环代码
void loop() {
// 红
digitalWrite(S2, LOW); digitalWrite(S3, LOW);
frequency = pulseIn(sensorOut, LOW);
frequency = map(frequency, 25, 72, 255, 0);
Serial.print("R="); Serial.print(frequency); Serial.print(" ");
// 绿
digitalWrite(S2, HIGH); digitalWrite(S3, HIGH);
frequency = pulseIn(sensorOut, LOW);
frequency = map(frequency, 30, 90, 255, 0);
Serial.print("G="); Serial.print(frequency); Serial.print(" ");
// 蓝
digitalWrite(S2, LOW); digitalWrite(S3, HIGH);
frequency = pulseIn(sensorOut, LOW);
frequency = map(frequency, 25, 70, 255, 0);
Serial.print("B="); Serial.println(frequency);
delay(100);
}
受环境光影响较大,建议加遮光罩或标定白平衡。适用于颜色分拣、色标检测等简单场景。
制造工艺
- 树莓派光敏电阻教程:接线与 Python 读取光照强度
- 打造安全的 Arduino RFID 门锁——分步指南
- K30 CO₂ 传感器:室内空气质量实时监测
- DIY 数字身高仪:Arduino Nano + VL53L0X 激光测距 + OLED 显示
- DFRobot 电容指纹传感器 (ID809) 接入 Arduino/ESP8266 完整教程
- Arduino Cloud 传感器塔:温度、动作与气体监测
- Arduino RGB LED调色器:三电位器混色入门项目
- Arduino RGB 颜色混合器 – 分步制作教程
- 动感音乐灯光秀 —— Arduino Nano 驱动 NeoPixel 打造新年视听盛宴
- Arduino Nano 指纹传感器项目——分步教程
- 用 Arduino UNO 自制迷你钢琴 — 图文教程
- Arduino入门教程01:开始你的第一个项目