成为订阅者(免费)

加入29,000名其他订阅者以获得用户销售折扣和 其他免费资源。
:
:
大学教师'担心 - 您的邮件地址完全是 安全的。我保证使用它 只要 to send you MicroZine.

TCS230颜色传感器模块

TCS230彩色探测器测量三原色红色,绿色 和蓝色,也有一个单独的白光探测器。既然有的话 color can be 从这些主要颜色的不同级别创建,可以找出光源的颜色组成。

突破的四个LED 电路板(如下所示)有没有亮起 受试者具有均匀光源,使测量更可靠。

笔记: 光线测量应在约1〜3cm才能获得 更准确的结果。

您可以使用TCS230(或更新设备TCS3200 看 here 有关差异)您需要根据颜色采取行动 一个东西。该设备确实对红外作出反应,所以可能需要 红外线过滤器 或在封闭空间中使用该设备。

这 TSC230芯片安装在突破板上。

TCS230正面视图

TCS230规范

  Parameter
价值
  Voltage Supply (VDD.)
2v7〜5v5
  Abs.Max VDD.
-0.3V〜6v3
  Measurement range
约。 300nm至980nm [3]
  输出接口类型
频率引脚O / P单引脚 [2]
  Logic Levels CMOS或TTL.
  逻辑输入电压(L,H) 0v0〜0v8,2v0〜vDD.
  逻辑输出电压(L,H) 0v4,4.5(对于vDD.=5V)
  输出频率尺度100%
600khz(典型值) [1][2]
  输出频率尺度20% 120khz(典型值) [1][2]
  输出频率尺度2% 12khz(典型值) [1][2]
  Active current
2mA(典型值),3mA(最大值)
  Power down current
7ua(典型值),15ua(max)
  工作温度
-40°C〜70°C
[1]由寄存器S0,S1控制的输出频率分割输出。
[2] R,G,B,W输出中的每一个单独选择软件。
[3]见 响应图.

TCS230数据表

下载数据表 这里.

TCS230如何工作

TC230的输出来自单个方波输出 改变频率,感测光量。特定传感器 使用两个数字控制输入选择R,G,B或W.

方波的频率比例 落在一组光检测二极管上的光量。从那里 是四种不同的信息来源红色,绿色,蓝色和清晰 photodiodes.

你控制哪套 二极管使用两个数字控制输入连接到输出。所以只有一个 一组光电二极管一次连接以生成输出。

在下面的照片中,您可以看到个体红色,蓝色,绿色和清晰 filters. It'有点模糊 - 但那是一个非常困难的照片 记住每个部分是120um平方,所以每个部分都是围绕头发的宽度 (17-181um)[Brian Ley]!

特写 of the TCS230

TCS230 CLOYUP显示R,G,B,& clear filters

放大 在上面的图像中的TCS230的过滤器中。

过滤TCS230.

实际上,每种颜色的几个光电二极管并联连接 这些在传感器表面上均匀地蔓延,正如您在照片中看到的那样 以上。该布局对于不仅仅是来自单个光电二极管的每种颜色都会获得整体读数。为了 TCS230总共有64个光电二极管。 16上方有一个红色过滤器,16 有一个绿色过滤器,16个具有蓝色过滤器,16个具有清晰的过滤器。

显示芯片如何工作的框图


TCS230块的操作
笔记: 还有一个输出使输出的输出使能 当高(OEN)。这将允许您附上几种不同的TCS230芯片 仅使用一个输入检测来自机器的不同部位的颜色。什么时候 仅使用一个设备将其设置为低。

信号输出

TCS230输出的信号通过电流频率获得 转换器,以其输入所选集的平均电流 光电二极管。这个想法是你切换一个设置,读一下然后 切换到下一个设置,直到完成所有四次测量。输出信号 是平方波,甚至标记为空间比:50%高,低50%。

分频器

设备输出的方波也可以划分(内部在TCS230中)和此 允许更慢的处理器更容易进行测量。没有 作为分开的输出的测量惩罚只是平均值 原来的。唯一的缺点是,因为信号是较低的 频率您无法快速进行测量。

如果重要的是让光线读取非常快,那么你想要 使用高速处理器并不会划分输出信号。你可以 想象一下,这在工业过程测量中可能变得重要 例如用于测量产品的状态。你想要快 测量传送带上的物品的颜色,如果它是拒绝它 wrong color.

频率输出

显示了TCS230的最大全尺度频率输出 below for 由S0和S1控制的缩放因子。缩放真的只是 使用内部时钟芯片计算输入信号(主要 从光电二极管电流输出到变频器的时钟输出)和 生成分开的时钟。

控制 Scaling
S0 S1 最大输出频率KHz %规模
H H 600kHz 100%
H L 120kHz 20%
L H 12kHz 2%
L S1 = L 断电 断电
控制 Photodiodes
S2 S3 选择的光电二极管
L L 红色的
L H 蓝色
H L 清除
H H 绿色的

注意:对于TCS230,TCS3200和TCS3210上述参数是 identical.

如何使用TCS230

在Arduino上最简单的使用TCS230的方法是使用 Planein() 功能,首先设置分隔符 输出最低频率。

TC230和TCS3200之间的差异

TCS的规范230不同 到TCS3200和TCS3210


范围 TCS230 TCS3200 / [TCS3210] 单位
光电二极管数量 64 64 / [24] -
电流电源 2(最多3) 1.4(最多2)
电源电流 7(最多15个) 0.1(最多0.1) ua
MIN操作温度。 0 -40 °C.

注意:典型值如上所示。

从上表中,您可以看到TCS3200和TCS3210已成为 优化用于低功耗操作(以关闭电源模式),并在0°C以下操作。

TCS230电路布局

图1:TCS230的Fritzing布局或 TCS3200突破板
TCS230与Arduino的连接
View larger image 这里.

软件库和版本

arduino. IDE Version

版本:1.8.3.

图书馆

没有使用:只需使用函数脉冲素。

arduino. Uno的示例素描

击中任何关键都会向您展示当前的传感器读数(RGB)并尝试 检测当前颜色。目前的颜色存储在两个数组中:

  • 在 t rgb [[numcol] [3]
  • Char Colname [Numcol] [11]

RGB阵列保存在Colname阵列时要找到的颜色值 保存要为相应的RBG值显示的文本。

警告: 第一次使用代码时,颜色将不会 自从您的照明设置和检测对象将是正确的 不同于我的。按照下面的校准过程进行操作。

TCS230校准

传感器对光线的任何变化和实践非常敏感 意味着从传感器到对象的任何轻微距离会导致一个 不同的阅读。此外,任何环境光变化也会导致一个 different reading.

所以要准确(可重复的)读数,您需要控制两个 elements:

  • 环境光。
  • 到对象的距离。

要校准传感器,请将传感器推到彩色纸上,甚至是a 由于传感器非常敏感,因此小调整失败。

将串行监视器设置为115200波特,然后将传感器推下来并打击 'Enter'串行监视器输入字段中的键。然后这将向您展示 当前的RGB值。将这些值复制到RBG阵列中并设置等效物 COLNAME文本。重新编译(或添加一些不同的彩色对象)。重新编译和 check that the 'color' is found.

现在你可以测试'objects'使用代码现在报告颜色 object.

至于"real"校准 - 它的困难和你唯一的方法 实现它是将传感器放在您可以的封闭环境中 控制照明电平 - 这将可重复可靠 measurements.

单击下面的代码以将其复制到 clipboard.

//
// Detect colors using TCS230.
//

// Arduino uno pins for control of TCS230
#define TCS320_OE 7
#define TCS320_S0 10
#define TCS320_S1 11
#define TCS320_S2 2
#define TCS320_S3 3
#define TCS320_OUT 4

#define 方差 50  // Acceptable detection error 2%.

#define SEL_RED  \
   digitalWrite(TCS320_S2,LOW);digitalWrite(TCS320_S3,LOW)
#define SEL_GREEN \
   digitalWrite(TCS320_S2,HIGH);digitalWrite(TCS320_S3,HIGH)
#define SEL_BLUE \
   digitalWrite(TCS320_S2,LOW);digitalWrite(TCS320_S3,HIGH)
#define SEL_CLEAR \
   digitalWrite(TCS320_S2,HIGH);digitalWrite(TCS320_S3,LOW)

#define TWO_PER \
   digitalWrite(TCS320_S0,LOW);digitalWrite(TCS320_S1,HIGH);

#define debug(a) Serial.println((a));


#define NUMCOL 5

// int RGB[NUMCOL][3]; // Five colors with 3 elements.
// Array of NUMCOL strings len 10. 11 for null.
// Char Colname [Numcol] [11];

// Typical values for 2% dividers (set variance to 50).
在 t RGB[NUMCOL][3]={
   {248,647,393},
   {188,261,265},
   {404,710,546},
   {506,493,304},
   {930,1199,837},
};

char colname[NUMCOL][11]={
"red",
"yellow",
"brown",
"blue",
"black",
};

////////////////////////////////////////////////////////////////
void setup() {

   pinMode(TCS320_OE,OUTPUT);
   pinMode(TCS320_S0,OUTPUT);
   pinMode(TCS320_S1,OUTPUT);
   pinMode(TCS320_S2,OUTPUT);
   pinMode(TCS320_S3,OUTPUT);
   pinMode(TCS320_OUT,INPUT);

   TWO_PER;

   digitalWrite(TCS320_OE,LOW); // On always.

   Serial.begin(115200);
   Serial.println("TCS230 color detector");
}

////////////////////////////////////////////////////////////////
unsigned long get_TCS230_reading(void) {
  unsigned long val;
  noInterrupts();
  val = pulseIn(TCS320_OUT,HIGH,20000); // 2000us=2ms  2Hz min.
  在 terrupts();
  return val;
}

static 在 t clr,red,green,blue;

////////////////////////////////////////////////////////////////
uint16_t detect(void) {
   unsigned long val;

    SEL_RED;
    red = val = get_TCS230_reading();
    Serial.print("RED: "); Serial.print(val);

    SEL_GREEN;
    green = val = get_TCS230_reading();
    Serial.print(" GREEN: "); Serial.print(val);

    SEL_BLUE;
    blue = val = get_TCS230_reading();
    Serial.print(" BLUE: "); Serial.print(val);

    Serial.print(" \n");
}

////////////////////////////////////////////////////////////////
在 t withinEQ(在 t c, 在 t xl, 在 t xh) {
   if (c>=xl && c<=xh) return 1;
   return 0;
}

////////////////////////////////////////////////////////////////
// Compare a value to a value and variance.
在 t compare(在 t c, 在 t v, 在 t err) {
在 t xh=v+err, xl=v-err;
   if (withinEQ(c,xl,xh)) return 1;
   return 0;
}

////////////////////////////////////////////////////////////////
void loop() {
uint8_t chr,i,fnd;

   if (Serial.available()>0) {

      chr = Serial.read(); // Consume.

      // Find color match.
      detect();
      fnd=0;
      for (i=0;i<NUMCOL;i++) {
         if ( compare(red,RGB[i][0],variance) &&
              compare(green,RGB[i][1],variance) &&
              compare(blue,RGB[i][2],variance)
            ) { // Found
              Serial.print("Col is :");
              Serial.println(colname[i]);
              fnd=1;
              break;
            }
      }
      if (!fnd) Serial.println("NOT Found");
   }
}


为什么代码使用2%的分隔符?

您可以选择使用原始100%,20%或2%的输出和大多数其他代码 examples use 20%.

用于测量芯片输出的功能是脉冲素,即 准确到4us,因此获得最大精度,我们需要一个大的输出 足够与脉冲的准确性相比。

从我的设置中取出以下数据,这可能是平均值 照明设置在办公室。提供这些以显示典型的最小值和 可使用的微秒内的最大时间段 pulseIn function.

要回答的问题是:

改变分频器输出的效果是多少 来自TCS230的输出周期待测量?
改变分隔符如何影响输出周期?

2%分隔符的典型输出:

{248,647,393},

{188,261,265},

{404,710,546},

{506,493,304},

{930,1199,837}

来自上述测量的最大和最小期间是:

1199us和188us

这里所涉及的频率是:

1.0 / 1199E-6 = 834Hz至1.0 / 188E-6 = 5319Hz (5.3khz)。 (MAX是12kHz - T = 83us)。

20%分隔符的典型值:

{18,26,26},

{48,47,30},

{40,69,54},

{27,71,43},

{92,119,83}

来自上述测量的最大和最小期间是:

119us和18us。

这里所涉及的频率是:

1.0 / 119E-6 = 8403Hz至1.0 / 18E-6 = 55555Hz(55kHz)。 (MAX是120khz - t = 8.3us)。

原始输出的典型值

引用的最大频率为600kHz - 未测量。这段时间将是 1.6us.

结论

对于20%的分隔线,您正在接近测量能力 脉冲蛋白是4us i.e测量的最小时期是18US并且仅限 -5脉冲数据计数。因此,测量也靠近存在 小而且因此不太准确,即颜色之间的差异需要 要更大以注册芯片输出的差异=较少的敏感性。

这里的决议是最短时期的22%,这是相当糟糕的。

100%输出的时期将更小(1.0 / 600E3 = 1.6us)和 使用Arduino Atmega328P微控制器不会测量。

当使用2%的分隔符时,该程序可以实现最准确的时间 测量由于芯片输出的时段长度相比 脉冲素精度为4us。即,测量的最低时段为188US 分隔师(〜48期4us)与18卢比(〜5期4us)相比 20% dividers.

这里的决议是最短时期的2.13%,这是相当不错的。

因此,2%的分频器输出是更好的测量精度选择。

警告: 光探测器非常敏感,但虽然 您可以获得最高精度,测量的时段将根据批次而变化 在照明条件和物体距离上。这就是为什么变量 'variance'允许您在每个RBG中心点周围指定错误值 用于可靠的颜色检测。

有关颜色检测的详细信息

所有的光电二极管的光谱响应都很有趣 光电二极管对红外光反应(700nm以上的时段)。当你添加时 绿色和蓝色过滤器,每个响应都显示了可见的两个峰值 光谱和红外光谱中的一个。所以,当您使用TCS230或 TCS3200(相同的光电二极管)用于测量红色,绿色,蓝色或白光 将实际上收集红外反应。所以这绝对是 与你的眼睛不同的反应's response to light.

问题是:这真的很重要吗? ......答案是:它 depends!

如果您的项目试图衡量尽可能接近的响应 对人的眼睛反应然后是的,它确实很重要。另一方面,如果 项目是根据颜色对项目进行排序,并用于定义良好的 环境,(不改变荧光和白炽灯泡)那么没有, it does not matter.

只要探测器被括在一个定义的环境中,那么它就会 始终以相同的方式操作,即在机器内关闭,有自己的LED 光源;检测器的输出将产生相同的测量 结果(然而,考虑Aeging和温度效应)。

笔记:TCS230 / 3200检测器非常敏感,所以即使 将物体的距离更改为传感器将改变测量的 颜色 - 在环境光线条件下进行 - 所以删除红外检测 无论如何可能无法解决检测问题。

在TCS230的数据表中,有两个光谱图:复制 以下 。此外,我已添加来自维基百科的颜色谱图 显示人眼反应。

重要的是要注意光电二极管的颜色检测 他们自己受到红外线的影响,并获得更好的结果 受红外线影响,您必须使用红外过滤器。


颜色 波长(NM)
红色的 700〜635.
绿色的 560〜520
蓝色 490〜450

这是TCS230对左侧没有红外过滤器的响应 用红外线过滤器 on the right.

TCS230光谱响应和IR滤波器的响应

[来源:陶斯数据表]。

在左侧,您可以看到绿色响应有两个峰(〜550nm和 〜830nm),蓝色响应有两个峰(〜470nm和〜800nm)和红色 响应从600nm到1100nm。你真正想要的最大响应是 从450nm到700nm,由于700nm波长是您的眼睛最大的最大值 探测。这意味着您的眼睛无法看到的任何红外辐射 除非使用IR过滤器,否则影响红色,绿色和蓝色读数。

Taos建议的过滤器是:

  • 肖特BG18.
  • 肖特BG39.
  • Hoya cm500.

当您使用IR过滤器(上面的右图)过滤器平滑 沿700nm的波长排出波长,每种类型只有一个峰值响应 光电二极管。响应与所示的人眼反应相似。 below.

人体颜色眼睛反应光

[资源 //en.wikipedia.org/wiki/Color]

霍伊亚或肖特过滤器的唯一麻烦是他们花了很多钱 超过传感器本身;您可以在eBay上找到一个廉价的红外线过滤器 搜索X2 IR-CUT CS镜头安装。

结论TCS230颜色检测

获得更准确的色彩检测的最佳方法,更紧密 匹配人眼反应,是在前面使用红外线过滤器 传感器。请注意,这也适用于TSC3200和TCS3210 还采用具有类似响应曲线的类似光电二极管。

但是,您仍然可以使用没有IR过滤器的设备,并仍然存在 获得颜色结果,只要照明条件和距离 对象保持不变。


新的! Comments

让你说到你刚刚阅读的东西!留下下面的框中的评论。




隐私政策 | 接触 | 关于我

网站地图 | 使用条款


ezoic.报告此广告

访问我们的Facebook页面:

   点击这里



最近的文章

  1. 如何使用ADS1115

    使用ADS1115精度16位ADC进行教程进行低功耗。

    阅读更多

  2. arduino.模拟输出...易模拟输出生成

    arduino.模拟输出:如何创建最精确的PWM模拟输出以及如何创建模拟PWM正弦波。

    阅读更多

  3. 数号和等效的快速宏。加快代码!

    了解DigitalWrite()的工作原理......现在使用17倍宏宏!

    阅读更多

  4. TCS230颜色传感芯片:如何运作以及如何使用它。

    如何使用TCS230(/ TCS3200)彩色检测器芯片并轻松将其添加到您的任何项目中。

    阅读更多

  5. 如何使用ADXL345进行运动感测等。

    使用ADXL345 Acellerometer,您可以检测到16G!您还可以了解如何使用它来点击检测等。

    阅读更多

  6. HMC5883L 3轴数字MAGENTOMTER如何运作

    HMC5883L - 如何制作数字罗盘,了解HMC5883L和QMC5883L之间的差异以及它们是否兼容。

    阅读更多



读者 Comments

"I wanted to thank
你这么好
对于所有信息
你已经提供了
你的网站's

高超极好的."

- 逃亡Potthath.

"This site really is
最好的和我最喜欢的。
我发现这里有很多很有用
项目和提示。"

- 米兰

Bursach.<at>gmail.com<

"Awesome site,
非常,非常容易和好
导航!"


-
镭_tr.<at>
wolf359.cjb.net.


学习微控制器

"Interested in
微控制器?"

注册
免费7天指南:

自由 GUIDE : CLICK HERE


"I am a newbie to PIC
我想说
 how great your
网站一直在为我。"


- 戴夫

de_scott.<at>bellsouth.net

"Your site is a great
和完美的工作。
恭喜。"


- SURESH.

IntegratedInfosys.<at>
Yahoo.com.

"I couldn't find the correct
要定义的词语
你的网页。

非常有用,揭开,
诚实明确。

非常感谢
你的时间和作品。
问候。"


- Anon.

回到顶部