2024年寒假练 - 基于12指神探传感器扩展板完成颜色识别
该项目使用了12指神探传感器扩展板,实现了传感器扩展板的设计,它的主要功能为:识别五种颜色,在LCD上显示当前识别颜色和信息,并在LCD上用色块显示识别的颜色并大致接近。
标签
嵌入式系统
显示
开发板
meiyao
更新2024-04-02
67

一、项目概述

本项目通过结合带屏12指神探与传感器扩展板,成功实现了颜色识别功能。项目中,传感器扩展板负责捕捉环境中的颜色信息,并将数据传输至带屏12指神探进行处理。带屏12指神探内置高性能处理器,通过运行专门设计的软件判断,对接收到的颜色数据进行分析,识别出具体的颜色。

在设计上,我们采用了基于颜色空间的识别判断,通过对比传感器数据与预设的颜色阈值,精确判断颜色种类。一旦颜色被识别,带屏12指神探便会在其自带的屏幕上绘制一个圆形色块,以直观展示识别结果。同时,屏幕上还会显示颜色的名称,方便用户了解识别到的具体颜色,再通过PC端软件的终端打印出相关的值,其中这个值就包括颜色名,包含颜色的阀值。


二、设计思路

设计思路主要围绕颜色识别的核心任务展开。首先,通过传感器扩展板上的颜色传感器捕获环境中的颜色信息,将颜色信息通过IIC传递给12指神探的RP2040。然后,通过LTR-381RGB-01传感器识别出具体的颜色。最后,将识别结果通过扩展板传递到12指神探上的显示屏展示出来。

在设计时,我采用了基于颜色的识别方法。通过比较传感器捕获的颜色信息与预设的颜色阈值,确定最接近的颜色。这种方法简单有效,能够在较短的时间内完成颜色识别任务。

三、硬件IIC介绍

介绍一下IIC功能:

I2C总线物理连接:

I2C总线引脚定义

SDA (I2C数据引脚)

CLK (I2C数据引脚)

I2C总线物理连接如图所示,SDA和CLK连接线上连有两个上拉电阻,当总线空闲时,两根线均为高电平。连到总线上的任一器件输出的低电平,都将使总线的信号变低。

当然,在这个12指神探与扩展板上,通过查看图纸,并没有看到IIC上有上拉电阻,都NC掉了。

下面的图是颜色传感器连接示意图。



四、软件设计思路

12指神探主控通过扩展板的传感器,识别颜色任务的整个处理流程。首先,初始化传感器和显示屏,设置相关参数。然后,进入颜色识别循环,不断读取传感器数据。接着,对读取到的数据进行处理,识别出颜色。最后,将识别结果通过显示屏展示出来,并等待下一次循环。

五、硬件介绍

硬件框图主要包括传感器扩展板、带屏12指神探和连接两者的通信接口。传感器扩展板上集成了颜色传感器和其它传感器,通过通信接口与带屏12指神探连接。带屏12指神探负责提供数据处理和显示功能。

在硬件搭建过程中,我选择了高灵敏度的颜色传感器,以确保能够准确捕获环境颜色信息。同时,保证数据传输的稳定性和实时性。


六、实现的功能及图片展示

通过本项目的实施,我们成功实现了颜色识别的功能。在实际测试中,系统能够准确识别出白、绿、蓝、黄、红、紫色等颜色,并在显示屏上实时显示识别结果。

从图片中可以看出,系统对不同颜色的识别结果准确无误,显示界面清晰易读。


白色:


蓝色:

绿色:

红色:

1710172896723.jpg

黄色:

1710172938369.jpg

紫色:


七:核心代码展示:

  light.getColorData(RED, red);
  light.getColorData(GREEN, green);
  light.getColorData(BLUE, blue);
  light.getLux(gain, integrationTime, green, lux);
  inclos = ColorCount(red, green, blue);
  colod = changeColorRGB(inclos);
  tft.fillCircle(120, 120, 100, colod);
  via=inclos;
  if(via ==0)
  {
      Serial.print(" color: ");
      Serial.print(" White ");
      Serial.println(colod);
      ShowColors(via);
      via=0;
  }
    if(via ==1)
  {
      Serial.print(" color: ");
      Serial.print(" Red ");
      Serial.println(colod);
      Serial.print(" color: ");
      ShowColors(via);
      via=0;
  }
    if(via ==2)
  {
    Serial.print(" color: ");
      Serial.print(" Green ");
      Serial.println(colod);
      Serial.print(" color: ");
      ShowColors(via);
      via=0;
  }
    if(via ==3)
  {
    Serial.print(" color: ");
      Serial.print(" Blue ");
      Serial.println(colod);
      Serial.print(" color: ");
      ShowColors(via);
      via=0;
  }
    if(via ==4)
  {
    Serial.print(" color: ");
      Serial.print(" Yellow ");
      Serial.println(colod);
      Serial.print(" color: ");
      ShowColors(via);
      via=0;
  }
    if(via ==5)
  {
    Serial.print(" color: ");
      Serial.print(" Pink ");
      Serial.println(colod);
      Serial.print(" color: ");
      ShowColors(via);
      via=0;
  }
    if(via ==6)
  {
    Serial.print(" color: ");
      Serial.print(" Cyan ");
      Serial.println(colod);
      Serial.print(" color: ");
      ShowColors(via);
      via=0;
  }


//从识别到的颜色转换成颜色的数值
int changeColorRGB(int color)  
{  
    if (color == 0)  
    {  
        return tft.color565(255, 255, 255); // White  
    }  
    else if (color == 1)  
    {  
        return tft.color565(255, 0, 0); // Red  
    }  
    else if (color == 2)  
    {  
        return tft.color565(0, 255, 0); // Green  
    }  
    else if (color == 3)  
    {  
        return tft.color565(0, 0, 255); // Blue  
    }  
    else if (color == 4)  
    {  
        return tft.color565(255, 255, 0); // Yellow  
    }  
    else if (color == 5)  
    {  
        return tft.color565(255, 0, 255); // Pink  
    }  
    else if (color == 6)  
    {  
        return tft.color565(0, 255, 255); // Cyan  
    }  
    else  
    {  
        // 如果color不是0到6之间的值,返回一个表示错误的颜色值或0  
        return 0;  
    }  
}


void ShowColors(int colour)  
{  
    String strcolor;  
 
    if (colour == 0)  
    {  
        strcolor = "White";  
    }  
    else if (colour == 1)  
    {  
        strcolor = "  Red ";  
    }  
    else if (colour == 2)  
    {  
        strcolor = "Green";  
    }  
    else if (colour == 3)  
    {  
        strcolor = "Blue";  
    }  
    else if (colour == 4)  
    {  
        strcolor = "Yellow";  
    }  
    else if (colour == 5)  
    {  
        strcolor = "Pink";  
    }  
    else if (colour == 6)  
    {  
        strcolor = "Cyan";  
    }  
    else  
    {  
        // 如果colour不是0到6之间的值,可以设置strcolor为默认值或空字符串  
        strcolor = "Unknown";  
    }  
附件下载
main.zip
pico2024_color.zip
颜色识别全部程序代码,开发平台Visual Studio Code
团队介绍
个人
评论
0 / 100
查看更多
硬禾服务号
关注最新动态
0512-67862536
info@eetree.cn
江苏省苏州市苏州工业园区新平街388号腾飞创新园A2幢815室
苏州硬禾信息科技有限公司
Copyright © 2024 苏州硬禾信息科技有限公司 All Rights Reserved 苏ICP备19040198号