0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

使用TCS3200和Arduino UNO制作颜色分选机

科技观察员 来源:circuitdigest 作者:Abhimanyu Pandit 2022-09-01 16:55 次阅读

顾名思义,颜色分类就是简单地根据事物的颜色对事物进行分类。它可以通过看到它来轻松完成,但是当要分类的东西太多并且这是一项重复性任务时,自动色选机非常有用。这些机器有颜色传感器来感知任何物体的颜色,并在检测到颜色伺服电机后抓住物体并将其放入相应的盒子中。它们可用于颜色识别、颜色区分和颜色分类很重要的不同应用领域。一些应用领域包括农业(基于颜色的谷物分选)、食品工业、钻石和采矿业、回收等。应用不仅限于此,还可以进一步应用于不同的行业。

在本教程中,我们将使用颜色传感器 TCS3200、一些伺服电机和 Arduino 板制作颜色分选机。本教程将包括彩球的分类并将它们保存在相关的彩盒中。盒子将处于固定位置,伺服电机将用于移动分拣手以将球保持在相关盒子中。

所需组件

Arduino UNO

TCS3200 颜色传感器

伺服电机

跳线

面包板

色选机械臂底盘的制作方法

为了制作包括底盘、臂、滚轮、垫子在内的完整设置,我们使用了 2 毫米厚的白色Sunboard。它在固定商店很容易买到。我们使用切纸机切割 Sunboard Sheet 和 FlexKwik 或 FeviKwik 来连接不同的部分。以下是构建颜色分类臂

的一些步骤:

1)拿取防晒板。

poYBAGMQckuATBUeAAHWP3lVEGU977.png

2) 如图所示,用刻度尺和记号笔测量好所有边后,将阳光板切成小块。

poYBAGMQckiAJo2uAAP45qHpkTo684.png

pYYBAGMQckSAHAGFAAJQ0lzPifQ899.png

pYYBAGMQckWAQ6zkAAKL4GWX2RY662.png

3)现在将两块阳光板放在一起,然后在上面倒一滴 FeviKwik 将它们粘在一起。按照图继续连接。

pYYBAGMQcjuAcOu0AAIcwKv3Rpg671.png

4) 将所有部件连接在一起后,这台色选机将如下所示:

poYBAGMQcjyARr0gAAQfIitSbJk495.png

TCS3200 颜色传感器

poYBAGMQcjOAWhuTAAR2KfpVTe0574.png

TCS3200 是一种颜色传感器,可以通过正确的编程检测任意数量的颜色。TCS3200 包含 RGB(红绿蓝)阵列。如图所示,在显微镜下可以看到传感器眼睛内部的方框。这些方块是 RGB 矩阵的数组。这些盒子中的每一个都包含三个传感器,一个用于感测红光强度,一个用于感测绿光强度,最后一个用于感测蓝光强度。

pYYBAGMQciuAcTIRAABOAmwuRN4263.png

这三个阵列中的每个传感器阵列都是根据需要单独选择的。因此它被称为可编程传感器。该模块可以用来感知特定颜色并离开其他颜色。它包含用于该选择目的的过滤器。第四种模式称为“无滤镜模式”,其中传感器检测白光。

Arduino色选机电路图

这个Arduino 颜色分类器的电路图很容易制作,不需要太多连接。示意图如下。

poYBAGMQciiAdIDVAACqTkuMOc0450.png

这是色选机设置背后的电路:

pYYBAGMQciSARENlAAPgdMe1fNI960.png

对 Arduino Uno 进行编程以对彩色球进行分类

对 Arduino UNO 进行编程非常简单,需要一个简单的逻辑来简化颜色分类所涉及的步骤。最后给出了带有演示视频的完整程序。

由于使用的是伺服电机,所以伺服库是程序的重要组成部分。这里我们使用两个伺服电机。第一个伺服将彩球从初始位置移动到 TCS3200 检测器位置,然后移动到将落下的分拣位置。移动到分拣位置后,第二个伺服将使用其手臂将球落到所需的颜色桶中。请参阅最后给出的视频中的完整工作。

第一步将包含所有库并定义伺服变量。

#include 
伺服拾取伺服;
伺服下降伺服;

TCS3200 颜色传感器可以在没有库的情况下工作,因为只需要从传感器引脚读取频率来决定颜色。所以只需定义 TCS3200 的引脚号。

#define S0 4 
#define S1 5 
#define S2 7 
#define S3 6 
#define sensorOut 8 
int 频率 = 0; 
诠释颜色=0;

使选择引脚作为输出,因为这将使彩色光电二极管高或低,并将TCS3200 的 Out 引脚作为输入。OUT 引脚将提供频率。最初选择频率缩放为 20%。

  pinMode(S0,输出);
  pinMode(S1,输出);
  pinMode(S2,输出);
  pinMode(S3,输出);
  pinMode(传感器输出,输入);
  数字写入(S0,低);
  数字写入(S1,高);

伺服电机连接在 Arduino 的引脚 9 和 10。将拾取彩球的拾取伺服器连接在引脚 9 上,将根据颜色掉落彩球的下落伺服器连接在引脚 10 上。

  pickServo.attach(9); 
  dropServo.attach(10);

最初,拾取伺服电机设置在初始位置,在这种情况下为 115 度。它可能会有所不同,并且可以相应地进行定制。电机在延迟一段时间后移动到检测器区域并等待检测。

  pickServo.write(115); 
  延迟(600);
  for(int i = 115; i > 65; i--) { 
    pickServo.write(i); 
    延迟(2);
  }
  延迟(500);

TCS 3200从Out Pin 读取颜色并给出频率。

  颜色 = 检测颜色();
  延迟(1000);

根据检测到的颜色,下落伺服电机以特定角度移动,并将彩球落入相应的盒子中。

  开关(颜色){
    案例1:
    dropServo.write(50);
    休息; 
    案例2:
    dropServo.write(80);
    休息; 
    案例3:
    dropServo.write(110);
    休息; 
    案例4:
    dropServo.write(140);
    休息; 
    案例5:
    dropServo.write(170);
    休息; 
    案例0:
    中断;
  }
  延迟(500);

伺服电机返回初始位置,等待下一个球被拾取。

  for(int i = 65; i > 29; i--) { 
    pickServo.write(i); 
    延迟(2);
  }
  延迟(300);
  for(int i = 29; i < 115; i++) { 
    pickServo.write(i); 
    延迟(2);
  }

函数detectColor()用于测量频率并比较颜色频率以得出颜色结论。结果打印在串行监视器上。然后它返回用于移动下降伺服电机角度的案例的颜色值。

诠释检测颜色(){

写入 S2 和 S3 (LOW,LOW) 会激活红色光电二极管以获取红色密度读数。

  数字写入(S2,低);
  数字写入(S3,低);
  频率 = 脉冲输入(传感器输出,低);
  int R = 频率;
  Serial.print("红色 = "); 
  Serial.print(frequency);//打印红色频率
  Serial.print(" "); 
  延迟(50);

写入 S2 和 S3(低、高)会激活蓝色光电二极管以获取蓝色密度读数。

  数字写入(S2,低);
  数字写入(S3,高);
  频率 = 脉冲输入(传感器输出,低);
  int B = 频率;
  Serial.print("蓝色 = ");
  Serial.print(频率);
  序列号.println(" ");

写入 S2 和 S3 (HIGH,HIGH) 会激活绿色光电二极管以获取绿色密度读数。

  数字写入(S2,高);
  数字写入(S3,高);

  // 读取输出频率
  频率 = pulseIn(sensorOut, LOW); 
  int G = 频率;
  Serial.print("绿色 = "); 
  Serial.print(频率);
  序列号.print(""); 
  延迟(50);

然后比较这些值以做出颜色决定。不同实验设置的读数不同,因为在进行设置时每个人的检测距离都不同。

 如果(R<22 & R>20 & G<29 & G>27){
    颜色 = 1; // Red 
    Serial.print("检测到的颜色是 = "); 
    Serial.println("RED"); 
  } 
  if(G<25 & G>22 & B<22 &B>19){
    颜色 = 2; // 橙色
      Serial.println("橙色"); 
  } 
  if(R<21 & R>20 & G<28 & G>25){
    颜色 = 3; // 绿色
      Serial.print("检测到的颜色是 = "); 
    Serial.println("绿色"); 
  } 
  if(R<38 & R>24 & G<44 & G>30){
    颜色 = 4; // 黄色
       Serial.print("检测到的颜色是 = "); 
    Serial.println("黄色"); 
  } 
  if (G<29 & G>27 & B<22 &B>19){
    颜色 = 5; // 蓝色
     Serial.print("检测到的颜色是 = ");
    Serial.println("蓝色"); 
  }
  返回颜色;
}

这样就完成了使用 TCS3200 和 Arduino UNO 的色选机。如果需要,您还可以对其进行编程以检测更多颜色。

#include

伺服拾取伺服;

伺服下降伺服;


#define S0 4

#define S1 5

#define S2 7

#define S3 6

#define sensorOut 8

int 频率 = 0;

诠释颜色=0;


int detectColor() {

// 激活红色光电二极管以读取

digitalWrite(S2, LOW);

数字写入(S3,低);

频率 = 脉冲输入(传感器输出,低);

int R = 频率;

Serial.print("红色 = ");

Serial.print(frequency);//打印红色频率

Serial.print(" ");

延迟(50);


// 激活蓝色光电二极管以读取

digitalWrite(S2, LOW);

数字写入(S3,高);

频率 = 脉冲输入(传感器输出,低);

int B = 频率;

Serial.print("蓝色 = ");

Serial.print(频率);

序列号.println(" ");



// 激活绿色光电二极管以读取

digitalWrite(S2, HIGH);

数字写入(S3,高);

// 读取输出频率

频率 = pulseIn(sensorOut, LOW);

int G = 频率;

Serial.print("绿色 = ");

Serial.print(频率);

序列号.print("");

延迟(50);


延迟(50);


//不同设置

的读数不同 //根据您的项目和检测到的读数更改读数

if(R<22 & R>20 & G<29 & G>27){

color = 1; // Red

Serial.print("检测到的颜色是 = ");

Serial.println("RED");

}

if(G<25 & G>22 & B<22 &B>19){

颜色 = 2; // 橙色

Serial.println("橙色");

}

if(R<21 & R>20 & G<28 & G>25){

颜色 = 3; // 绿色

Serial.print("检测到的颜色是 = ");

Serial.println("绿色");

}

if(R<38 & R>24 & G<44 & G>

30){颜色 = 4; // 黄色

Serial.print("检测到的颜色是 = ");

Serial.println("黄色");

}

if (G<29 & G>27 & B<22 &B>19){

颜色 = 5; // 蓝色

Serial.print("检测到的颜色是 = ");

Serial.println("蓝色");

}

返回颜色;

}


无效设置(){

pinMode(S0,输出);

pinMode(S1,输出);

pinMode(S2,输出);

pinMode(S3,输出);

pinMode(传感器输出,输入);


//频率缩放到 20% 选定

的 digitalWrite(S0, LOW);

数字写入(S1,高);


pickServo.attach(9);

dropServo.attach(10);


序列号.开始(9600);

}


void loop() {

//伺服电机的初始位置

pickServo.write(115);

延迟(600);



for(int i = 115; i > 65; i--) {

pickServo.write(i);

延迟(2);

}

延迟(500);

//通过调用函数读取颜色值。将结论值保存在变量

color = detectColor();

延迟(1000);


开关(颜色){

案例1:

dropServo.write(50);



休息;


案例2:

dropServo.write(80);

休息;


案例3:

dropServo.write(110);

休息;


案例4:

dropServo.write(140);

休息;


案例5:

dropServo.write(170);

休息;



案例0:

中断;

}

延迟(500);



for(int i = 65; i > 29; i--) {

pickServo.write(i);

延迟(2);

}

延迟(300);



for(int i = 29; i < 115; i++) {

pickServo.write(i);

延迟(2);

}

颜色=0;

}

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 伺服电机
    +关注

    关注

    85

    文章

    2021

    浏览量

    57659
  • Arduino
    +关注

    关注

    187

    文章

    6461

    浏览量

    186557
  • 分选机
    +关注

    关注

    0

    文章

    22

    浏览量

    6770
  • TCS3200
    +关注

    关注

    0

    文章

    23

    浏览量

    15541
收藏 人收藏

    评论

    相关推荐

    TCS230/TCS3200的脉冲问题

    最近正在做一个TCS3200颜色芯片设计,电路搭好之后,发现输出的脉冲幅值在0.14-0.06V,太小了。这是不能被单片机识别的。请问各位大哥原因可能是什么?
    发表于 11-15 11:56

    请问颜色传感器GY-33 TCS34725和TCS3200有什么区别?

    请教颜色传感器GY-33 TCS34725和TCS3200的具体区别?哪种用于检测透明瓶中液体颜色更好?有没有做过相关实验的朋友,希望大家给出点建议,非常感谢。
    发表于 03-26 07:17

    基于STM32F103的TCS3200颜色传感器使用

    基于STM32F103的TCS3200颜色传感器的使用团队布置的任务内容是2019年中国机器人大赛的题目,小车运行过程中需要对不同物料进行颜色上的识别。因此我最近就学了TCS3200
    发表于 08-10 07:15

    介绍单片机如何使用TCS3200颜色识别传感器

    应用场景与单片机连接arduino连接方式stm32连接方式3 实现效果5 相关代码6 最后1 简介Hi,大家好,这里是丹成学长,今天向大家介绍单片机如何使用颜色识别传感器,以arduino单片机为例
    发表于 01-07 08:23

    如何调试TCS3200颜色传感器模块?

    如何调试TCS3200颜色传感器模块?
    发表于 03-09 06:34

    TCS3200颜色传感器配套资料

    TCS3200颜色传感器是一个比较简单功能强大的颜色传感器,可以识别有红绿蓝三原色组成的各种颜色
    发表于 11-04 17:10 74次下载

    基于TCS3200颜色识别的自动分拣系统

    TCS3200相关的应用以及参数等等。方便学习
    发表于 11-19 14:08 90次下载

    基于TCS3200颜色传感器

    基于TCS3200颜色传感器实验画图辨别颜色等等
    发表于 02-25 10:50 71次下载

    TCS3200颜色传感器的使用说明详细资料免费下载

    TCS3200颜色传感器是一款全彩的颜色检测器,包括了一块TAOS TCS3200RGB感应芯片和4个白光LED灯,TCS3200能在一定的
    发表于 04-19 08:00 23次下载
    <b class='flag-5'>TCS3200</b><b class='flag-5'>颜色</b>传感器的使用说明详细资料免费下载

    基于STM32F103的TCS3200颜色传感器的使用

    ; 团队布置的任务内容是2019年中国机器人大赛的题目,小车运行过程中需要对不同物料进行颜色上的识别。因此我最近就学了TCS3200颜色传感器的基本原理和代码的具体实现。网上对该模块的使用基本是基于
    发表于 12-01 10:51 46次下载
    基于STM32F103的<b class='flag-5'>TCS3200</b><b class='flag-5'>颜色</b>传感器的使用

    使用TCS3200Arduino Uno制作Arduino Chameleon

    电子发烧友网站提供《使用TCS3200Arduino Uno制作Arduino Chameleon.zip》资料免费下载
    发表于 10-27 09:55 2次下载
    使用<b class='flag-5'>TCS3200</b>和<b class='flag-5'>Arduino</b> <b class='flag-5'>Uno</b><b class='flag-5'>制作</b><b class='flag-5'>Arduino</b> Chameleon

    使用TCS3200/230进行颜色检测

    电子发烧友网站提供《使用TCS3200/230进行颜色检测.zip》资料免费下载
    发表于 02-03 11:40 0次下载
    使用<b class='flag-5'>TCS3200</b>/230进行<b class='flag-5'>颜色</b>检测

    使用TCS230 TCS3200颜色传感器制作颜色检测器

    电子发烧友网站提供《使用TCS230 TCS3200颜色传感器制作颜色检测器.zip》资料免费下载
    发表于 02-13 16:48 7次下载
    使用<b class='flag-5'>TCS</b>230 <b class='flag-5'>TCS3200</b><b class='flag-5'>颜色</b>传感器<b class='flag-5'>制作</b><b class='flag-5'>颜色</b>检测器

    TCS3200颜色传感器模块原理图及参考代码

    TCS3200颜色传感器模块参考代码原理图文档资料
    发表于 05-25 15:51 2次下载

    使用TCS3200模块进行颜色识别

    该项目用于检测颜色并使用TCS3200颜色传感器模块和Arduino板在LCD上显示颜色名称。传感器使用彩色光电二极管输出红色,绿色和蓝色的
    的头像 发表于 10-15 16:11 1973次阅读
    使用<b class='flag-5'>TCS3200</b>模块进行<b class='flag-5'>颜色</b>识别