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

Arduino 颜色检测

组件和用品

Arduino Nano R3
× 1
颜色传感器模块颜色识别
× 1
Adafruit 标准 LCD - 16x2 蓝底白字
× 1
面包板(通用)
× 1

应用和在线服务

Arduino IDE

关于这个项目

项目

这是一个简单的教程,我们将在其中探索如何使用 Arduino 和传感器(如 TCS 3200)读取颜色。我们的想法是检测对象颜色,并将其显示在 LCD 上。该项目是一个更大项目的一个组成部分,该项目将是一个机械臂,它根据对象的颜色选择适当的动作。上面的框图显示了主要组件。

下面的视频显示了最终的项目工作:

第 1 步:物料清单

以下链接及价格仅供参考。

  • Arduino Nano(8.00 美元)
  • TCS3200 颜色传感器模块(9.00 美元)
  • IIC/I2C/TWI 1602 串行蓝色背光 LCD 模块(8.00 美元)
  • 面包板(2.00 美元)
  • 电缆

第 2 步:TSC 3200 颜色传感器

如其数据表所述,TCS3200 是一种可编程彩色光频率转换器,在单个单片 CMOS 集成电路上结合了可配置硅光电二极管和电流频率转换器。

输出是方波(50% 占空比),其频率与光强度(辐照度)成正比。满量程输出频率可以通过两个控制输入引脚(S0 和 S1)按三个预设值之一进行缩放。数字输入和数字输出允许直接连接到微控制器或其他逻辑电路。

输出使能 (OE) 将输出置于高阻抗状态,以便多单元共享微控制器输入线。在 TCS3200 中,光频转换器读取 8 x 8 光电二极管阵列。

  • 16 个光电二极管带有蓝色滤光片
  • 16 个光电二极管具有绿色滤光片
  • 16 个光电二极管带有红色滤光片
  • 16 个光电二极管清晰,无滤镜。

引脚 S2 和 S3 用于选择激活哪一组光电二极管(红色、绿色、蓝色、透明)。光电二极管尺寸为 110 μm x 110 μm,位于 134 μm 中心。

OE (Enable) 应连接到 GND (LOW)。

传感器是封装的,应在 2.7 和 5.5 VDC 之间供电。我们将使用 5V Arduino 输出为传感器供电。为了正确使用传感器,我们会安装一个小橡胶圈来将传感器与侧光隔离。我用热胶固定它。

第 3 步:连接硬件

如下连接 TSC3200 传感器:

  • S0 ==> 纳米针 D4
  • S1 ==> 纳米针 D5
  • S2 ==> 纳米针 D6
  • S3 ==> 纳米针 D7
  • OUT ==> Nano Pin D8
  • EN ==> GND
  • VCC ==> +5V
  • GND ==> GND

连接 I2C LCD 2/16 串行显示器:

  • SDA ==> 纳米针 A4
  • SCL ==> Nano Pin A5

在面包板上安装 Arduino Nano。在两个电源轨上连接 Nano 5V 输出和 GND。

第 4 步:Arduino 代码

首先要定义的是上表中定义的频率缩放。引脚 S0 和 S1 用于此目的。缩放输出频率有助于优化各种频率计数器或微控制器的传感器读数。我们将 S0 和 S1 都设置为 HIGH (100%):

 digitalWrite(s0,HIGH); digitalWrite(s1,HIGH); 

接下来要做的是选择光电二极管要读取的颜色(红色、绿色或蓝色),我们为此使用控制引脚 S2 和 S3。由于光电二极管并联,将S2和S3设置为低、高的不同组合,可以选择不同的光电二极管,如上表所示。

 digitalWrite(s2, LOW);数字写入(s3,低);红色 =脉冲输入(输出引脚,低); // 读取颜色 digitalWrite(s2, HIGH) 的红色分量;数字写入(s3,高); grn =脉冲输入(输出引脚,低); // 读取颜色 digitalWrite(s2, LOW);数字写入(s3,高);蓝光 =脉冲输入(输出引脚,低); // 读取颜色的蓝色分量 

在最终的代码中,我们将每个RGB分量读取几次并取平均值,因此如果其中一个读数不好,我们可以减少误差。

一旦我们有了 3 个分量 (RGB),我们就必须定义那是什么颜色。以前校准项目的方法。您可以使用已知的彩色试纸或物体读取生成的 3 个组件。

你可以从我的开始,改变你的光照水平的参数:

void getColor(){ readRGB(); if (red> 8 &&red <18 &&grn> 9 &&grn <19 &&blu> 8 &&blu <16) color ="WHITE"; else if (red> 80 &&red <125 &&grn> 90 &&grn <125 &&blu> 80 &&blu <125) color ="BLACK"; else if (red> 12 &&red <30 &&grn> 40 &&grn <70 &&blu> 33 &&blu <70) color ="RED"; else if (red> 50 &&red <95 &&grn> 35 &&grn <70 &&blu> 45 &&blu <85) color ="GREEN"; else if (red> 10 &&red <20 &&grn> 10 &&grn <25 &&blu> 20 &&blu <38) color ="YELLOW"; else if (red> 65 &&red <125 &&grn> 65 &&grn <115 &&blu> 32 &&blu <65) color ="BLUE"; else color ="NO_COLOR";} 

正如您在上面看到的,我预定义了 6 种颜色:白色、黑色、红色、绿色、黄色和蓝色。随着环境光的减弱,参数趋于升高。

在 loop() 内部,我定义了每 1 秒在 LCD 上的显示读数。

完整代码可以在我的GitHub上找到。

第 5 步:结论

一如既往,我希望这个项目可以帮助其他人在激动人心的电子、机器人和物联网世界中找到自己的方向!

请访问我的 GitHub 获取更新文件:Color Detector

更多项目请访问我的博客:MJRoBot.org

来自世界南部的Saludos!

我的下一个教程见!

谢谢,

马塞洛

代码

  • 代码片段#2
  • 代码片段 #3
代码片段#2纯文本
 digitalWrite(s2, LOW);数字写入(s3,低);红色 =脉冲输入(输出引脚,低); // 读取颜色 digitalWrite(s2, HIGH) 的红色分量;数字写入(s3,高); grn =脉冲输入(输出引脚,低); // 读取颜色 digitalWrite(s2, LOW);数字写入(s3,高);蓝光 =脉冲输入(输出引脚,低); // 读取颜色的蓝色分量
代码片段 #3纯文本
void getColor(){ readRGB(); if (red> 8 &&red <18 &&grn> 9 &&grn <19 &&blu> 8 &&blu <16) color ="WHITE"; else if (red> 80 &&red <125 &&grn> 90 &&grn <125 &&blu> 80 &&blu <125) color ="BLACK"; else if (red> 12 &&red <30 &&grn> 40 &&grn <70 &&blu> 33 &&blu <70) color ="RED"; else if (red> 50 &&red <95 &&grn> 35 &&grn <70 &&blu> 45 &&blu <85) color ="GREEN"; else if (red> 10 &&red <20 &&grn> 10 &&grn <25 &&blu> 20 &&blu <38) color ="YELLOW"; else if (red> 65 &&red <125 &&grn> 65 &&grn <115 &&blu> 32 &&blu <65) color ="BLUE"; else color ="NO_COLOR";}
Github
https://github.com/Mjrovai/Color-Detectorhttps://github.com/Mjrovai/Color-Detector

示意图

硬件
https://github.com/Mjrovai/Color-Detector/blob/master/Color%20Detector.fzz

制造工艺

  1. 使用 Arduino 制作流光溢彩监视器
  2. Arduino Pong Game - OLED 显示器
  3. 音频检测器
  4. Arduino Tamagotchi Clone - Digital Pet
  5. 无线灯开关操纵器
  6. Tech-TicTacToe
  7. 运动感应水枪
  8. Arduino 倒数计时器
  9. Arduino RGB 混色器
  10. Arduino 向日葵:电子太阳舞者
  11. 遥控保时捷汽车(Arduino 项目)
  12. 基于Arduino的碰撞检测预警系统