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

颜色传感器原型:从对象检测颜色名称

组件和用品

Arduino UNO
× 1
RGB 扩散共阳极
普通阴极,或阳极......使用你所拥有的
× 1
光敏电阻
× 1
Adafruit 标准 LCD - 16x2 蓝底白字
任何可以与 LiquidCrystal Arduino 库一起使用的东西
× 1
电阻 10k ohm
用于触觉开关和 CdS 单元
× 2
电阻 100 ohm
RGB LED 的红色引脚为 150 欧姆,绿色和蓝色引脚为 2x 100 欧姆
× 3
SparkFun 按钮开关 12mm
× 1
跳线(通用)
× 1
面包板(通用)
× 1

应用和在线服务

MLP 拓扑工作台
用于重新训练神经网络以与 Arduino 中的 Neurona 库一起使用的工具。

关于这个项目

这是全文的简化版,为简单起见,便于本项目的复制。也可以在我的博客上查看此项目以了解更多实现细节。

本文分为右侧菜单中列出的部分。如果您想跳到技术细节,请查看右侧的目录,或在 GitHub 存储库中下载代码。在继续阅读之前,请查看项目视频以了解该项目的真正含义:)

项目概况

类似于人眼的色觉,并且基于光,RGB 模型包含超过 1600 万种颜色 , 排列在 3D 空间 ,其中分量 R(红色)、G(绿色)和 B(蓝色)的整数值,范围从 0 到 255,构成了该空间的坐标。从该模型中,使用与光相关的电子元件和机器学习机制执行颜色检测和识别;它本质上是 RGB LED 和 CdS 单元(光传感器,或 LDR)的组合,两者都与环境光隔离 .这些组件分别发射和感应从特定颜色的物体反射的每种光(红色、绿色和蓝色)的强度。

多层感知器

多层感知器 (MLP) 是人工神经网络的前馈架构,具有输入(非神经)层、隐藏层和输出层。该网络通过反向传播算法进行训练,执行监督学习(通过示例学习)。

对于这个颜色传感器,上图所示的神经网络接收 3 个输入(RGB 值) , 有一个隐藏层,有 6 个神经元 和一个具有 10 个神经元的输出层 - 回想一下:对于二值化输出,输出层必须具有相同数量的类(在本例中为颜色)。对于本教程,网络已经过训练并且能够识别颜色:)。有关训练步骤和用于训练的示例数据集的更多详细信息,请查看我博客中的完整帖子。

颜色识别

可以使用我们训练有素的 MLP 网络执行此任务。它允许对空间可分离模式进行分类和识别 - 在这种情况下非常有用。在其训练步骤中,网络将区域映射到下图所示的 RGB 颜色空间中,以便每个被超平面隔离的区域代表一种颜色 .因此,每个新的 RGB 颜色模式(表示为 3D 点)都属于特定区域,被归类为各自的颜色。

为了使用 MLP 进行泛化以很好地识别 RGB 模式,必须将训练集(具有上述 3D 空间所需输出的颜色示例)呈现给网络以进行训练步骤。此项目中使用的训练集可在项目的 GitHub 上获得 存储库。如果您热衷于神经网络,请继续阅读本节并查看我开发的这个 Playground,这样您就可以使用数据集自己训练网络并在代码中使用它:)。否则,跳到实现细节 .

泛化会发生在训练集所包含的领域,所以注意最小值和最大值 空间的每个组成部分!不要用这个域之外的模式输入网络,否则输出不会正常工作。

数据集(所有示例)包含 75 个颜色模式实例,范围从 0 到 1。最初的范围从 0 到 255,这些实例通过简单地将每个值除以 255 来重新缩放,例如 0 <=x1、x2、x3 <=1从数据集中可以看出,需要指出的是,输出层只有一个神经元必须输出1,而其余神经元必须输出0。由于经过训练的网络输出浮点值,后处理如下:

其中 yi 是第 i 个神经元的输出,max(y) 是最大的输出值。实际上,输出最大的神经元输出1,其余神经元输出0。就这么简单。

电子电路

由物体产生的所有检测过程都发生在电子电路中,包括在 Atmega328 中运行的计算活动,它连接在 Arduino 板上。从下面的示意图检查接线。

代码遵循上述使用公共阳极的方案 RGB LED。也就是说,检查您的 RGB LED 是否也是共阳极,否则只需反转代码中的逻辑 .

另一个重要的细节是我在 RGB LED 上只使用了一个电阻。由于一次点亮一种颜色,我将电阻器放在共阳极中,电阻器的平均电阻应该 使用阴极 - 这是懒惰的,我知道,我很抱歉!当我去购买项目部件时,他们并没有我需要的一切 - 但是使用正确的电阻器和阴极非常重要,以便使收集的 RGB 值与计算机中的 RGB 值保持一致。我的做法还不错,因为图案没有扭曲;它们与我们在计算机屏幕上看到的颜色(以及人眼捕捉到的颜色)不同。

从原理图中可以看出RGB LED 和CdS Cell 之间的邻接关系。那是因为它们必须与环境光隔离(旧的黑色胶片管是完美的选择),因此可以执行校准(在编程中解释)和识别。 查看项目视频,了解此类组件与环境光隔离。

色彩理论

电子电路执行的颜色感知基于颜色理论概念。由于(尚)不涉及镜头,只应考虑具有不透明(和哑光)材料的物体 ,避免处理LED的镜面反射。另一方面,漫反射是用光进行颜色检测的关键。入射光在不规则表面反射,不会产生破坏 CdS 细胞功能的发光效果。

回到实际的颜色理论,当(某种颜色的)光到达一个物体时,它会根据该物体颜色的特性进行反射。例如,到达黄色物体的红光将根据该黄色的成分中存在多少红色而被反射 - 请记住,我们正在谈论光! - 所以预计会有很多红光被反射,当我们想到黄色(基本上是红色和绿色)的 RGB 组合时,这是有道理的。然而,当蓝光到达黄色物体时,由于颜色成分中蓝色的含量较低,预计不会有强烈反射。

考虑加色系统,其中白色和黑色分别代表每种颜色的存在和不存在(更多细节这里 ),可以测量(使用 CdS 单元)来自 RGB LED 的每种光线的最大和最小反射,这些反射将到达有色物体。也就是说,可以对电路中涉及的电子元件进行校准。这是获得检测保真度以及确保稳定检测模式(避免异常值)的另一个关键 - 这是一个金技巧 :校准后,尽量(努力!)不要移动或触摸电子元件(特别是当它们放置在面包板中时),也不要移动或触摸您正在使用的部件(您必须使用)以将组件与环境光隔离。

US_plugins_acrobat_en_motion_education_colorTheory.pdf

编程

对于校准和识别,一旦有色物体暴露于 RGB LED 和 CdS 单元,颜色传感器就会执行三个迭代。在第一次迭代中,红光击中物体,程序等待 CdS 细胞稳定其传感;然后读取模拟输入并存储红光的反射。该程序对绿色和蓝色再重复两次。颜色理论中显示的图很好地直观地解释了这个迭代过程。

关于校准,上述迭代过程执行两次:一次用于黑色,一次用于白色。正如颜色理论中所解释的,这是为了检测最大值和最小值 - 最初从 接近零接近 1024 ,根据阅读分辨率 - 红色、绿色和蓝色光的反射,获得真实范围以正确重新缩放到区间 [0, 255](用于信息目的)和 [0, 1](馈送神经网络的实际输入) ).

等待时间 建立光传感器的读数可以变化 根据每个电子元件,因此最好给出良好的延迟以确保稳定的感应。在我的例子中,我给出了 500 毫秒的延迟,但值得一开始使用更大的值,然后减小它直到出现不稳定行为的边缘。

在检测中,收集到的 RGB 值(范围从 0 到 1)提供给 MLP,执行实际的颜色识别。对于在 Arduino 中运行的 MLP,我使用的是 Neurona - 我编写的一个库,用于在 arduino 中轻松使用 ANN,可以使用库管​​理器从 Arduino IDE 安装。也检查这篇文章 了解更多详情。

如前所述,网络已经经过训练,可以在项目代码中进行检测。它使用我开发的 Playground 进行训练,将调整后的权重嵌入代码中,以便 Neurona 库使网络准备好运行。

测试

为了提供信息,我们从数据集中提取了一些颜色来进行一些识别测试:

图外的数字用于识别,图内的数字表示错误分类,指的是哪些颜色被分类。这些颜色是用喷墨打印机在亚硫酸盐纸上打印的——请查看本文开头视频中的小纸方块——所以对象 由不透明材料组成,适合颜色检测​​。

代码

颜色传感器原型
发送到 arduino 的代码位于 colorSensor 文件夹中。确保您的电子电路是根据提供的原理图构建的,并且 Neurona 库已正确安装(您可以从 Arduino 库管理器安装)。https://github.com/moretticb/ColorSensor/

示意图

根据 LCD 显示屏上的说明使用按钮

制造工艺

  1. 电阻颜色代码
  2. 干渴警报植物警报
  3. 意大利字时钟
  4. 带有 Arduino 的简单障碍物传感器
  5. Sigfox kWh Meter
  6. 蓝牙温度监视器
  7. 手势控制锁
  8. 伴侣 IC
  9. USB MIDI 适配器
  10. Arduino 的隔离模拟输入
  11. Arduino TV 输出电缆
  12. 测量你的反应时间