亿迅智能制造网
工业4.0先进制造技术信息网站!
首页 | 制造技术 | 制造设备 | 工业物联网 | 工业材料 | 设备保养维修 | 工业编程 |
home  MfgRobots >> 亿迅智能制造网 >  >> Manufacturing Technology >> 制造工艺

Arduino 颜色传感器原型机:识别并显示物体颜色名称

元器件与物料清单

元器件 数量 备注
Arduino UNO 1
RGB 漫射 LED (共阳) 1 共阴/共阳均可,代码需调整逻辑
光敏电阻 (CdS Cell / LDR) 1
Adafruit 标准 LCD - 16x2 白字蓝底 1 兼容 LiquidCrystal 库即可
电阻 10kΩ 2 轻触开关和 CdS 分压用
电阻 100Ω 3 红脚 150Ω、绿/蓝脚各 100Ω (共阳极串联)
轻触开关 12mm 1
杜邦线 1 套
面包板 1

应用与在线服务

项目简介

这是完整文章的简化版,便于复现。完整实现细节请访问我的博客。建议先观看项目视频了解效果。

项目概览

模拟人眼色觉原理,基于光学的 RGB 模型包含 1600 万+ 颜色,在三维空间中由 R/G/B 整数坐标 (0-255) 定位。本项目结合光学电子元件与机器学习实现颜色检测识别:RGB LED 与 CdS 光敏电阻隔绝环境光,分别发射和感知物体反射的红/绿/蓝光强度。

多层感知机 (MLP)

MLP 是前馈人工神经网络架构,含输入层(非神经)、隐藏层、输出层,通过反向传播算法进行监督学习。

Arduino 颜色传感器原型机:识别并显示物体颜色名称

本项目网络结构:3 输入 (RGB) → 1 隐藏层 6 神经元 → 输出层 10 神经元 (对应 10 种颜色类别,输出二值化)。网络已预训练可直接识别颜色。训练细节和数据集见博客完整版。

颜色识别原理

训练过程中,网络在 RGB 空间划分出由超平面隔离的区域,每个区域对应一种颜色。新输入的 RGB 模式 (3D 点) 落入某区域即被分类为该颜色。

Arduino 颜色传感器原型机:识别并显示物体颜色名称
Arduino 颜色传感器原型机:识别并显示物体颜色名称

为获得良好泛化能力,训练集必须覆盖目标域。数据集 75 个样本,RGB 值归一化至 [0,1] (原 0-255 除以 255)。输出层仅目标神经元输出 1,其余 0。推理时取最大输出神经元为 1,其余 0:

Arduino 颜色传感器原型机:识别并显示物体颜色名称

关键提示: 训练集定义的 min/max 域外输入会导致识别失效。

Arduino 颜色传感器原型机:识别并显示物体颜色名称

电子电路

检测过程在电路中完成,Atmega328 运行计算程序。请按原理图接线:

Arduino 颜色传感器原型机:识别并显示物体颜色名称
Arduino 颜色传感器原型机:识别并显示物体颜色名称

注意: 代码基于共阳极 RGB LED,若用共阴极请反转代码逻辑。原理图中 RGB LED 共用一个电阻接在公共阳极 (偷懒做法),正确做法是各阴极分别串联对应电阻以保证色彩还原度。但该简化不影响模式识别,只是采集值与标准 RGB 空间有偏移。

RGB LED 与 CdS 紧邻布置,必须用不透光管隔绝环境光 (废胶卷罐最佳),否则校准和识别都会失效。视频中展示了隔光结构。

色彩理论基础

仅适用于不透明哑光表面,避免镜面反射干扰 CdS。漫反射是关键:入射光在粗糙面向各方向反射,无高光干扰。

加色系统中,白=全色混合、黑=无光。红光照黄色物体,反射强(黄含红绿);蓝光照黄色物体,反射弱(黄少蓝)。

Arduino 颜色传感器原型机:识别并显示物体颜色名称

测量各色光在物体上的最大/最小反射值,即可完成电路校准。黄金法则: 校准后尽量不动电路元件(尤其是面包板上)和隔光筒,保证检测稳定。

色彩理论参考 PDF: US_plugins_acrobat_en_motion_education_colorTheory.pdf

编程实现

校准和识别各执行三次迭代 (R/G/B 依次发光):

  1. 红光照物体,等待 CdS 稳定读取模拟值存储
  2. 绿光、蓝光同理

校准流程: 对黑色和白色物体各执行一次上述迭代,获得 RGB 三通道的最大/最小反射范围,将原始读数 (约 0-1023) 重映射到 [0,255] (显示用) 和 [0,1] (神经网络输入)。

稳定延时: 光敏电阻响应时间因器件而异,建议初用较大延时(如 500ms)再逐步减小至临界稳定值。

识别时,归一化 RGB 值喂入 MLP。Arduino 端使用 Neurona 库 (自行开发,Arduino 库管理器可安装) 运行神经网络。网络已预训练,权重嵌入代码,Neurona 初始化即可使用。训练过程在配套 Playground 完成。

测试结果

从数据集抽取部分颜色测试:

Arduino 颜色传感器原型机:识别并显示物体颜色名称

图中数字为样本编号,内部数字为误分类时被误判为的颜色编号。测试样本为喷墨打印在铜版纸上的色块,符合哑光不透明要求。

代码

Arduino 代码位于 GitHub 仓库 colorSensor 文件夹。使用前请确保:

  1. 电路按原理图搭建
  2. 已通过库管理器安装 Neurona 库

https://github.com/moretticb/ColorSensor/

原理图

按 LCD 提示操作轻触开关

Arduino 颜色传感器原型机:识别并显示物体颜色名称

制造工艺

  1. 智能缺水报警器 – DIY植物土壤湿度监测装置
  2. 意大利语单词时钟:Arduino Nano + NeoPixel 144 灯珠 + LCD + RTC 打造
  3. 自制简易红外避障传感器:IR LED + 光电二极管 + Arduino
  4. 基于Arduino MKR Fox 1200构建可靠Sigfox千瓦时电表
  5. 蓝牙温度监测仪:Arduino Nano + NTC 热敏电阻 + HC-06 无线传输
  6. 非接触手势门锁:APDS-9960 + Arduino 实现安全门禁
  7. Arduino Nano 多功能伴侣套件 —— 电阻/电容测量、二极管测试、RTC时钟一体化
  8. Arduino Micro/Leonardo USB MIDI 适配器套件 —— 完整元件清单与固件指南
  9. 为Arduino构建隔离模拟输入电路
  10. 两个电阻自制 Arduino UNO 视频输出线(RCA/TVout)
  11. Arduino UNO 精准视觉反应时间测试仪
  12. 电阻色环代码——解码阻值、公差与E系列标准的综合指南