打印
[活动专区]

【杰发科技AC7802x测评】+色彩识别仪

[复制链接]
1382|19
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
#申请原创# @21小跑堂

AC7802x开发板是一款十分便于功能移植的开发板,先前曾在其它开发板上实现过以色彩传感器检测色彩的功能,这次将它移植到AC7802x开发板上进行了一下尝试,实践证明实现起来还是比较容易的,其状态构成如图1所示。
1 整体构成

这里所所用的色彩传感器是TCS34725,它是一款以I2C接口工作的器件,并在功能模块上配置了LED灯以照亮检测目标。
在显示方面,则仍使用0.96寸的彩色LCD显示屏,它与开发板的连接关系为:
CLK---PB5
DIN---PB3
RES--PB4
DC ---PB6
CS ---PA8
BLK--- PB7

色彩传感器与开发板的连接关系为:
SDA ----PA0
SCL ----PA1

所用引脚输出高低电平的定义为:
#defineTCS_SCL_H       GPIO_SetPinLevel(GPIOA,GPIO_PIN1, GPIO_LEVEL_HIGH)
#defineTCS_SCL_L       GPIO_SetPinLevel(GPIOA,GPIO_PIN1, GPIO_LEVEL_LOW)
#defineTCS_SDA_H       GPIO_SetPinLevel(GPIOA,GPIO_PIN0, GPIO_LEVEL_HIGH)
#defineTCS_SDA_L       GPIO_SetPinLevel(GPIOA,GPIO_PIN0, GPIO_LEVEL_LOW)

为读取数据所作的相应定义为:
#defineTCS_SDA_READ    GPIO_GetPinLevel(GPIOA,GPIO_PIN0)

实现输入、输出模式设置的语句定义为:
#defineTCS_SDA_IN()     GPIO_SetDir(GPIOA, GPIO_PIN0, GPIO_IN)
#defineTCS_SDA_OUT()   GPIO_SetDir(GPIOA,GPIO_PIN0, GPIO_OUT)

色彩传感器的引脚配置函数为:
void TCS34725_I2C_Init()
{
          GPIO_SetFunc(GPIOA, GPIO_PIN0,GPIO_FUN0);
          GPIO_SetDir(GPIOA, GPIO_PIN0,GPIO_OUT);
          GPIO_SetFunc(GPIOA, GPIO_PIN1,GPIO_FUN0);
          GPIO_SetDir(GPIOA, GPIO_PIN1,GPIO_OUT);
}

实现I2C发送起始和停止信号的函数为:
void TCS34725_I2C_Start()
{
        TCS_SDA_OUT();
        TCS_SDA_H;
        TCS_SCL_H;
        delay_us(4);
        TCS_SDA_L;
        delay_us(4);
        TCS_SCL_L;
}

void TCS34725_I2C_Stop()
{
        TCS_SDA_OUT();
        TCS_SCL_L;
        TCS_SDA_L;
        delay_us(4);
        TCS_SCL_H;
        TCS_SDA_H;
        delay_us(4);
}

进行字节数据发送与接收的函数为:
void TCS34725_I2C_Send_Byte(u8 byte)
{
        u8 i;
        TCS_SDA_OUT();
        TCS_SCL_L;
        for(i = 0; i < 8; i++)
        {
                if(((byte&0x80)>>7)==1)TCS_SDA_H;
                else
                        TCS_SDA_L;
                byte <<= 1;
                delay_us(2);
                TCS_SCL_H;
                delay_us(2);
                TCS_SCL_L;
                delay_us(2);
        }
}

u8 TCS34725_I2C_Read_Byte(u8 ack)
{
        u8 i,receive = 0;
        TCS_SDA_IN();
        for(i = 0; i < 8; i++)
        {
                TCS_SCL_L;
                delay_us(2);
                TCS_SCL_H;
                receive <<= 1;
                if(TCS_SDA_READ) receive++;
                delay_us(1);
        }
        if (!ack) TCS34725_I2C_NACK();
        else TCS34725_I2C_ACK();
        return receive;
}

进行传感器初始化的函数为:
u8 TCS34725_Init(void)
{
        u8 id=0;
        TCS34725_I2C_Init();
        TCS34725_Read(TCS34725_ID, &id, 1);
        if(id==0x4D | id==0x44)
        {
                        TCS34725_SetIntegrationTime(TCS34725_INTEGRATIONTIME_50MS);
                        TCS34725_SetGain(TCS34725_GAIN_1X);
                        TCS34725_Enable();
                        return 1;
                }
        return 0;
}

读取色彩检测值的函数为:
u8 TCS34725_GetRawData(COLOR_RGBC *rgbc)
{
        u8 status = TCS34725_STATUS_AVALID;
       
        TCS34725_Read(TCS34725_STATUS, &status, 1);
       
        if(status & TCS34725_STATUS_AVALID)
        {
                rgbc->c = TCS34725_GetChannelData(TCS34725_CDATAL);       
                rgbc->r = TCS34725_GetChannelData(TCS34725_RDATAL);       
                rgbc->g = TCS34725_GetChannelData(TCS34725_GDATAL);       
                rgbc->b = TCS34725_GetChannelData(TCS34725_BDATAL);
                return 1;
        }
        return 0;
}

为了满足显示的需要,所配置的矩形框绘制函数为:
void LCD_DrawRectangle(unsigned int x1, unsigned int y1, unsigned int x2, unsigned int y2)
{
        LCD_DrawLine(x1,y1,x2,y1);
        LCD_DrawLine(x1,y1,x1,y2);
        LCD_DrawLine(x1,y2,x2,y2);
        LCD_DrawLine(x2,y1,x2,y2);
}

所配置的色彩填充函数为:
void LCD_ShowBOX(u16 x1,u16 y1,u16 x2,u16 y2,u16 c)
{
      int i;
      LCD_Address_Set(x1,y1,x2,y2);
      for(i=0;i<N;i++)
      {
            LCD_WR_DATA8(c>>8);
            LCD_WR_DATA8(c&0xff);
      }
}

进行色彩识别检测的主程序为:
int main(void)
{
        u8 R,G,B;
        u16 g;
        InitDelay();
    InitDebug();
    GPIO_LedInit();
    GPIO_KeyInit();
    TIMER_PrdInit();
        mdelay(200);
        LCD_GPIO();
        Lcd_Init();
    BACK_COLOR=BLACK;
        LCD_Clear(BLACK);
    LCD_ShowString(30,5,"TCS34725",YELLOW);
        LCD_ShowString(20,25,"R:",RED);
        LCD_ShowString(52,25,"G:",GREEN);
        LCD_ShowString(84,25,"B:",BLUE);
        LCD_DrawRectangle(119, 23, 140, 45);
        TCS34725_Init();
        while (1)
    {
                  TCS34725_GetRawData(&rgb);
                  RGBtoHSL(&rgb,&hsl);
                  R=255*rgb.r/rgb.c;
                  G=255*rgb.g/rgb.c;
                  B=255*rgb.b/rgb.c;
                  LCD_ShowNum(20,45,R,3,YELLOW);
                  LCD_ShowNum(52,45,G,3,YELLOW);
                  LCD_ShowNum(84,45,B,3,YELLOW);
                  g=(R>>3)<<11;
                  g=g+((G>>2)<<5)+(B>>3);  
                  LCD_ShowBOX(120,24,139,44,g);
                  mdelay(500);
          GPIO_ToggleLedPrd();
    }
}

经程序的编译与下载,其测试效果图2和图3所示,说明该传感器能完成色彩识别的功能。
2 测试绿色

图3测试红色

通过这次对AC7802x开发板测评,证明该开发板是一款非常易于上手的开发板,并在功能移植方面也较为顺利,它是一款值得推荐的开发工具。在此再次对活动的组织者及提供产品的厂家表示衷心地感谢!

使用特权

评论回复

相关帖子

沙发
kkzz| | 2023-8-3 22:09 | 只看该作者
TCS34725的测量距离取决于环境光照条件和所采用的物体表面

使用特权

评论回复
板凳
mmbs| | 2023-8-3 22:15 | 只看该作者
测量距离应保持在几毫米到几厘米的范围内,以获得准确的测量结果。

使用特权

评论回复
地板
tabmone| | 2023-8-3 22:23 | 只看该作者
在使用之前,确保正确连接传感器的SCL和SDA引脚,并按照规定的通信协议进行初始化和配置。

使用特权

评论回复
5
eefas| | 2023-8-3 22:32 | 只看该作者
避免直射强光以及防止传感器表面有反光或遮挡物。

使用特权

评论回复
6
burgessmaggie| | 2023-8-3 22:41 | 只看该作者
可以通过使用已知色温的颜色标准来完成,根据测量值和标准值之间的差异进行校准。

使用特权

评论回复
7
xiaoyaodz| | 2023-8-3 22:49 | 只看该作者
TCS34725对环境光非常敏感,因此在使用传感器时要注意环境光的影响。

使用特权

评论回复
8
macpherson| | 2023-8-3 22:58 | 只看该作者
可以使用传感器提供的滤光片来减少环境光的影响。

使用特权

评论回复
9
chenci2013| | 2023-8-4 14:22 | 只看该作者
为了获得准确的颜色测量结果,可以对TCS34725进行色温校准。

使用特权

评论回复
10
usysm| | 2023-8-4 14:29 | 只看该作者
TCS34725可以检测的光照强度范围为0到10000Lux,需要根据实际应用场景调整光照强度范围。

使用特权

评论回复
11
belindagraham| | 2023-8-4 14:43 | 只看该作者
TCS34725输出RGB原始数据,需要进行适当的解析和校准才能获得具体的颜色数值。

使用特权

评论回复
12
earlmax| | 2023-8-4 14:51 | 只看该作者
TCS34725的测量结果可能会受到周围环境光的影响。在进行颜色测量时,尽量避免直接照射强光源,或者采取适当的环境光抑制措施。

使用特权

评论回复
13
eefas| | 2023-8-4 15:00 | 只看该作者
TCS34725在不同温度下会出现温度漂移现象,需要在代码中对温度漂移进行补偿,以保证光照强度的准确性。

使用特权

评论回复
14
tifmill| | 2023-8-4 15:10 | 只看该作者
在使用TCS34725时,还需要注意防止光照干扰、避免光照强度过高等问题,以保证传感器的正常工作。

使用特权

评论回复
15
phoenixwhite| | 2023-8-4 15:19 | 只看该作者
TCS34725测量的颜色数据以原始的红、绿、蓝和透明度值(可选)形式返回。根据应用需求,可能需要对这些原始数据进行解析和转换,以获取实际的颜色值。

使用特权

评论回复
16
jinglixixi|  楼主 | 2023-8-4 15:22 | 只看该作者
哈哈,大家都积累了许多的使用经验,说明这个传感器还是不错的。

使用特权

评论回复
17
kkzz| | 2023-8-4 15:27 | 只看该作者
可能需要对TCS34725的测量结果进行进一步的数据处理、滤波、校正或应用特定的算法。

使用特权

评论回复
18
earlmax| | 2023-8-4 15:37 | 只看该作者
为了减小温度的影响,可以通过使用传感器提供的温度传感功能进行温度补偿。

使用特权

评论回复
19
mattlincoln| | 2023-8-4 15:45 | 只看该作者
TCS34725是一种数字颜色传感器,用于检测环境中的颜色和光线。

使用特权

评论回复
20
pangb| | 2023-8-27 10:34 | 只看该作者
可以使用传感器提供的滤光片来减少环境光的影响。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

451

主题

2747

帖子

38

粉丝