首页 > 编程语言 >【雕爷学编程】Arduino动手做(165)---TCS34725颜色识别模块

【雕爷学编程】Arduino动手做(165)---TCS34725颜色识别模块

时间:2023-07-18 10:14:46浏览次数:39  
标签:动手做 传感器 Arduino --- RGB 模块 print TCS34725 Serial

37款传感器与模块的提法,在网络上广泛流传,其实Arduino能够兼容的传感器模块肯定是不止37种的。鉴于本人手头积累了一些传感器和执行器模块,依照实践出真知(一定要动手做)的理念,以学习和交流为目的,这里准备逐一动手试试多做实验,不管成功与否,都会记录下来——小小的进步或是搞不掂的问题,希望能够抛砖引玉。

【Arduino】168种传感器模块系列实验(资料代码+仿真编程+图形编程)
实验一百六十五:TCS34725颜色识别传感器 RGB IIC明光感应模块 ColorSensor

 

知识点:TCS3472芯片
TCS3472 器件提供红色、绿色、蓝色 (RGB) 和清晰光感测值的数字返回。 IR阻塞滤波器,集成在芯片上并定位到颜色感应光电二极管,最大限度地减少红外光谱入射光的组成部分,并允许准确地进行颜色测量。灵敏度高,宽动态范围和 IR 阻挡滤波器使 TCS3472 成为理想的颜色传感器解决方案,适用于不同的照明条件和通过衰减材料。

TCS3472 颜色传感器具有广泛的应用,包括 RGB LED 背光控制、固态照明、健康/健身产品、工业过程控制和医疗诊断设备。除此之外IR 阻挡滤波器使 TCS3472 能够执行环境光感测 (ALS)。环境光感测应用广泛用于基于显示的产品,如手机、笔记本电脑和电视,以感知照明环境和启用自动显示亮度以获得最佳观看效果和节能效果。 TCS3472 本身可以输入一个光感测之间的低功耗等待状态,以进一步降低平均功耗。

TCS34725特征
1、红色、绿色、蓝色 (RGB) ,
并清除光红外阻塞过滤器检测
− 可编程模拟增益和积分时间
− 3,800,000:1 动态范围
− 非常高的灵敏度− 比较适合黑玻璃背后的操作

2、可屏蔽中断
− 可编程的上、下阈值与持久性过滤器

3、电源管理
− 低功耗 — 2.5- A 睡眠状态
− 65- 具有可编程等待的等待状态
状态时间从 2.4 ms 到 > 7 秒

4、I2C 快速模式兼容接口
− 数据速率高达 400 kbit/s
− 输入电压电平与 VDD 兼容
或 1.8 V 总线

5、寄存器组和引脚兼容
TCS3x71系列

TCS34725功能框图

TCS3472工作原理
TCS3472 光数字转换器包含一个 3 × 4 光电二极管阵列、四个模数转换器(ADC) 集成光电二极管电流、数据寄存器、状态机和 I2C 接口。 3×4光电二极管阵列由红色过滤、绿色过滤、蓝色过滤和透明(未过滤)光电二极管组成。

此外,光电二极管还涂有红外线阻挡滤光片。四个积分 ADC 同时将放大的光电二极管电流转换为 16 位数字值。转换周期完成后,结果被传送到数据寄存器,这些寄存器是双缓冲的,以确保数据的完整性。全部内部时序以及低功耗等待状态由状态机控制。

TCS3472 数据的通信是通过高达 400 kHz 的快速两线 I2C 串行总线完成的。这行业标准 I2C 总线有助于轻松、直接连接到微控制器和嵌入式处理器。除了 I2C 总线,TCS3472 还提供单独的中断信号输出。当中断是启用,并且超过用户定义的阈值,低电平有效中断被断言并保持断言直到它被控制器清除。这种中断功能简化并提高了系统的效率无需轮询 TCS3472。用户可定义上下中断阈值并应用中断持久性过滤器。中断持久过滤器允许用户定义产生中断之前所需的连续超出阈值事件的数量。中断输出是漏极开路的,因此它可以与其他设备进行线或。

TCS3472 光谱响应

相关技术资料(英文版)
http://pdf-html.ic37.com/pdf_file_B/20200531/pdf_pdf/pdf6/AMSCO/TCS3472_datasheet_1159592/188527/TCS347_datasheet.pdf
傲雪电子(中文版)
[https://www.waveshare.net/w/upload/3/3c/TCS34725_Color_Sensro_user_manual_cn.pdf](https://www.waveshare.net/w/upload/3/3c/TCS34725_Color_Sensro_user_manual_cn.pdf)

TCS34725颜色传感器模块

【简介】
我是一款颜色传感器,支持通过I2C接口输出RGB颜色数据和光照强度,具有高灵敏度、宽动态范围和测量精确等优点。
【特点】
采用TCS34725FN,内置ADC,高灵敏度,宽动态范围
通过I2C接口通信,不会占用太多接口引脚资源
集成红外阻挡滤光片,可大幅度地减少入射光的红外频谱
支持输出RGB颜色数据,不需要白平衡
支持输出光强度,能够得到近似人眼对光的反应
支持光强中断输出,可编程设置上下限阈值
支持LED灯补光控制,可通过PWM调节亮度
板载电平转换电路,可兼容3.3V/5V的工作电平
提供完善的配套资料手册(Raspberry/Arduino/STM32等示例程序)
【参数】
控制芯片:TCS34725FN
通信接口:I2C
工作电压:3.3V/5V
产品尺寸:27mm × 20mm
分辨率:4通道RGBC,每个通道16位
推荐检测距离:2mm
【用途】
颜色排序、感应与校准环境光、产品颜色识别和分类等。

TCS34725颜色识别传感器模块电原理图

TCS34725颜色识别模块概述
本模块是 ams AG 的 TCS34725FN 彩色光数字转换器为核心的颜色传感器,传感器提供红色,绿色,蓝色(RGB)和清晰光感应值的数字输出。集成红外阻挡滤光片可最大限度地减少入射光的红外光谱成分,并可精确地进行颜色测量。具有高灵敏度,宽动态范围和红外阻滤波器。最小化 IR 和 UV 光谱分量效应,以产生准确的颜色测量。并且带有环境光强检测和可屏蔽中断。通过 I2C 接口通信。

参数
工作电压: 3.3V/5V
控制芯片 TCS34725FN
逻辑电压: 3.3V/5V
通信接口: I2C
产品尺寸: 27X20(mm)

接口说明

实验硬件连接示意图

 【Arduino】168种传感器模块系列实验(资料代码+仿真编程+图形编程)

  实验一百六十五:TCS34725颜色识别传感器 RGB IIC明光感应模块 ColorSensor

  项目之一:简单的颜色识别,串口输出识别情况

Arduino实验开源代码

 

/*

 【Arduino】168种传感器模块系列实验(资料代码+仿真编程+图形编程)

  实验一百六十五:TCS34725颜色识别传感器 RGB IIC明光感应模块 ColorSensor

 项目之一:简单的颜色识别,串口输出识别情况

*/

#include "DEV_Config.h"

#include "TCS34725.h"

RGB rgb, RGB888;

UWORD  RGB565 = 0;

void setup() {

 Config_Init();

 if (TCS34725_Init() != 0) {

  Serial.print("TCS34725 初始化错误!\r\n");

  return 0;

 }

 Serial.print("TCS34725 初始化成功!\r\n");

}

void loop() {

 rgb = TCS34725_Get_RGBData();

 RGB888 = TCS34725_GetRGB888(rgb);

 RGB565 = TCS34725_GetRGB565(rgb);

 Serial.print("RGB888 :R=");

 Serial.print(RGB888.R);

 Serial.print(" G=");

 Serial.print(RGB888.G);

 Serial.print(" B=");

 Serial.print(RGB888.B);

 Serial.print("\r\n");

 Serial.print("RGB 编号= 0x");

 Serial.println((RGB565), HEX);

 if (TCS34725_GetLux_Interrupt(0xff00, 0x00ff) == 1) {

  Serial.print("Lux_Interrupt = 1\r\n");

 } else {

  Serial.print("勒克斯中断 = 0\r\n");

 }

 Serial.print("\r\n");

 DEV_Delay_ms(1000);

}

  

实验串口返回情况

实验场景图

实验开源图形编程(Mind+、Mixly、编玩边学)
项目之二:TCS34725颜色识别

实验串口返回情况

 【Arduino】168种传感器模块系列实验(资料代码+仿真编程+图形编程)

  实验一百六十五:TCS34725颜色识别传感器 RGB IIC明光感应模块 ColorSensor

  项目之三:测试Adafruit TCS34725 的突破库

Arduino实验开源代码

 

/*

 【Arduino】168种传感器模块系列实验(资料代码+仿真编程+图形编程)

  TCS34725颜色识别传感器 RGB IIC明光感应模块 ColorSensor

 项目之三:测试Adafruit TCS34725 的突破库

 模块接线:

 TCS34725 Arduino

 VCC    5V

 GND    GND

 SDA    A4

 SCL    A5

*/

#include <Wire.h>

#include "Adafruit_TCS34725.h"

/* Initialise with default values (int time = 2.4ms, gain = 1x) */

// Adafruit_TCS34725 tcs = Adafruit_TCS34725();

//使用特定的 int 时间和增益值初始化

Adafruit_TCS34725 tcs = Adafruit_TCS34725(TCS34725_INTEGRATIONTIME_614MS, TCS34725_GAIN_1X);

void setup(void) {

 Serial.begin(9600);

 if (tcs.begin()) {

  Serial.println("Found sensor");

 } else {

  Serial.println("No TCS34725 found ... check your connections");

  while (1);

 }

 // 现在我们准备好获取读数了!

}

void loop(void) {

 uint16_t r, g, b, c, colorTemp, lux;

 tcs.getRawData(&r, &g, &b, &c);

 // colorTemp = tcs.calculateColorTemperature(r, g, b);

 colorTemp = tcs.calculateColorTemperature_dn40(r, g, b, c);

 lux = tcs.calculateLux(r, g, b);

 Serial.print("Color Temp: "); Serial.print(colorTemp, DEC); Serial.print(" K - ");

 Serial.print("Lux: "); Serial.print(lux, DEC); Serial.print(" - ");

 Serial.print("R: "); Serial.print(r, DEC); Serial.print(" ");

 Serial.print("G: "); Serial.print(g, DEC); Serial.print(" ");

 Serial.print("B: "); Serial.print(b, DEC); Serial.print(" ");

 Serial.print("C: "); Serial.print(c, DEC); Serial.print(" ");

 Serial.println(" ");

}

  

实验串口返回情况

最简接线法的实验示意图

 【Arduino】168种传感器模块系列实验(资料代码+仿真编程+图形编程)

  实验一百六十五:TCS34725颜色识别传感器 RGB IIC明光感应模块 ColorSensor

  项目之四:使用 TCS34725 模块的 RGB 灯颜色传感器

Arduino实验开源代码

 

/*
  【Arduino】168种传感器模块系列实验(资料代码+仿真编程+图形编程)
  实验一百九十三:TCS34725颜色识别传感器 RGB IIC明光感应模块 ColorSensor
  项目之四:使用 TCS34725 模块的 RGB 灯颜色传感器
*/

#include <Wire.h>
#include "Adafruit_TCS34725.h"

#define redpin 3
#define greenpin 5
#define bluepin 6

#define commonAnode false
byte gammatable[256];
Adafruit_TCS34725 tcs = Adafruit_TCS34725(TCS34725_INTEGRATIONTIME_50MS, TCS34725_GAIN_4X);

void setup() {
  Serial.begin(9600);
  Serial.println("Color View Test!");

  if (tcs.begin()) {
    Serial.println("Found sensor");
  } else {
    Serial.println("No TCS34725 found ... check your connections");
    while (1); // halt!
  }

  // use these three pins to drive an LED
  pinMode(redpin, OUTPUT);
  pinMode(greenpin, OUTPUT);
  pinMode(bluepin, OUTPUT);

  for (int i = 0; i < 256; i++) {
    float x = i;
    x /= 255;
    x = pow(x, 2.5);
    x *= 255;

    if (commonAnode) {
      gammatable[i] = 255 - x;
    } else {
      gammatable[i] = x;
    }
    //Serial.println(gammatable[i]);
  }
}

void loop() {
  uint16_t clear, red, green, blue;
  tcs.setInterrupt(false);      // turn on LED
  delay(60);
  tcs.getRawData(&red, &green, &blue, &clear);
  tcs.setInterrupt(true);

  Serial.print("C:\t"); Serial.print(clear);
  Serial.print("\tR:\t"); Serial.print(red);
  Serial.print("\tG:\t"); Serial.print(green);
  Serial.print("\tB:\t"); Serial.print(blue);

  // Figure out some basic hex code for visualization
  uint32_t sum = clear;
  float r, g, b;
  r = red; r /= sum;
  g = green; g /= sum;
  b = blue; b /= sum;
  r *= 256; g *= 256; b *= 256;
  Serial.print("\t");
  Serial.print((int)r, HEX); Serial.print((int)g, HEX); Serial.print((int)b, HEX);
  Serial.println();

  //Serial.print((int)r ); Serial.print(" "); Serial.print((int)g);Serial.print(" ");  Serial.println((int)b );
  analogWrite(redpin, gammatable[(int)r]);
  analogWrite(greenpin, gammatable[(int)g]);
  analogWrite(bluepin, gammatable[(int)b]);
}

  

代码分解:

#define redpin 3
#define greenpin 5
#define bluepin 6

这部分是您将 RGB 引脚分配到 arduino 的地方。这里选择了 3 作为红色引脚,5 作为绿色引脚,6 作为蓝色引脚,最后一个引脚用于 GND,因为使用了一个普通的 共阴极 RGB LED。如果您使用的是共阳极,则应将其接VCC。

#define commonAnode false

如果使用了通用阳极 RGB LED,请将其设置为 true。

pinMode(redpin, OUTPUT);
pinMode(greenpin, OUTPUT);
pinMode(bluepin, OUTPUT);

在这部分中,我们将 RGB LED 指定为 RGB 传感器的输出。我们使用这三个引脚驱动的 RGB LED。

analogWrite(redpin, gammatable[(int)r]);
analogWrite(greenpin, gammatable[(int)g]);
analogWrite(bluepin, gammatable[(int)b]);

最后,使用了 AnalogWrite函数,因为与 DigitalWrite函数相比,我们希望我们的输出为任意数字(模拟量),而DigitalWrite输出只有 HIGH 和 LOW(数字量)。

 

实验串口返回情况

测量红色物体,RGB灯发红色光

测量红色物体,RGB灯发红色光,实验串口返回情况

 

测量绿色物体,RGB灯发绿色光

测量绿色物体,RGB灯发绿色光,实验串口返回情况

 

标签:动手做,传感器,Arduino,---,RGB,模块,print,TCS34725,Serial
From: https://www.cnblogs.com/eagler8/p/17562028.html

相关文章

  • javascript-js正则表达式-常用的正则表达式
    js常用的正则表达式1.匹配Email地址:constemailRegex=/^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$/;2.匹配URL:consturlRegex=/^(https?:\/\/)?([a-zA-Z0-9.-]+\.[a-zA-Z]{2,})(:[0-9]+)?(\/[^\s]*)?$/;3.匹配日期(YYYY-MM-DD):constdateRegex=/^\d{4}-(0[1-9]|......
  • 使用podman-compose快速部署应用
    我们对于docker-compose并不陌生,它是一个用于编排多个可能相互依赖的容器的工具。而PodmanCompose项目的目标是作为docker-ompose的替代品,而不需要对docker-compose.yaml文件进行任何修改。要想使用podman-compose需要先安装podman,然后安装podman-compose。Rocky8下安装po......
  • 介绍社交论坛问答发帖系统源码-java+vue+uniapp开发前后端
    前后端分离社交论坛问答发帖BBS源码,社交论坛小程序|H5论坛|,app论坛是java+vue+uniapp开发的前后端分离社交论坛问答发帖/BBS项目,包括论坛图文帖,视频,圈子,IM私聊,微信支付,付费贴,积分签到,钱包充值等论坛小程序论坛app完整功能演示地址:www.runruncode.com/java/19462.html ......
  • 防缓存穿透利器-布隆滤器(BloomFilter)
    布隆过滤器1、布隆过滤器原理1.1什么是布隆过滤器1.2使用场景1.3原理1.4布隆过滤器的优缺点2、实现方式2.1初始化skuId的布隆过滤器2.1.1RedisConst常量类2.1.2修改启动类2.2给商品详情页添加布隆过滤器1、布隆过滤器原理1.1什么是布隆过滤器......
  • 2023-7-17
    暑假上班第一天,先开始补作业(昨天忘发了)关于sqlmap的使用sqlilabs靶场:sqlmap最基本的参数:-u sqlmap需要一个能够传参的地方才能使用,这里的注入点是id这个参数,使用的方式是GET想要改成POST方式有两种方法,一种比较简单的是直接将post的数据复制下来,放到-data里但是不管哪一......
  • OCS无法启动,api-ms-win-crt-runtime-l1-1-0.dll丢失
    简介:win7sp1vl版,安装ocsagent2.10后无法打开,提示api-ms-win-crt-runtime-l1-1-0.dll丢失一:VC经查是VC2015没有安装。二:下载DownloadVisualC++RedistributableforVisualStudio2015fromOfficialMicrosoftDownloadCenter根据系统版本装一下,重启即可解决问题。......
  • 电脑桌面app客户端、微信公众号-小程序测试方法
    1、找到微信小程序的网络通信exe程序打开任务管理器,找到微信的网络通信exe程序右键打开文件位置2、安装代理软件proxifiler下载地址:https://download.csdn.net/download/weixin_43264067/87672675无脑下一步,傻瓜式操作安装好后,打开app3、配置代理服务器设置为burp地......
  • MIT6.S081学习笔记--lec 1
    引言操作系统的目标abstractH/W抽象化硬件multiplex多路复用isolation隔离性sharing共享(进程通信,数据共享)security/accesscontrol安全性/权限控制performance性能/内核开销rangeofapplications多应用场景操作系统概览操作系统应该提供的功能:1.多进程支......
  • 理解ASP.NET Core - 限流(Rate Limiting)
    注:本文隶属于《理解ASP.NETCore》系列文章,请查看置顶博客或点击此处查看全文目录概述在微服务化的架构设计中,网关扮演着重要的看门人角色,它所提供的功能之一就是限流。而对于众多非微服务化的系统来说,可能并不会部署网关(无论是因为成本还是复杂度),在这种场景下,为了实现限流,微......
  • 聊聊代码之外的事--贪婪与毁灭
        遏制自己内心的知识优越感,才能让自己发自内心的去尊重他人,避免狂妄自大,才能让自己不断的丰富自己的内心。所有通过捷径所获取的快乐,无论是金钱、性还是名望,最终都会给自己带来痛苦。人其实很难抵制诱惑,人只能远离诱惑,千万不要高看自己的定力。必须接受批评,因为它可以帮......