顾名思义,颜色排序就是根据事物的颜色对其进行排序。看到它很容易完成,但是当要分类的东西太多时,这是一个重复的任务,那么自动颜色分类机就非常有用。这些机器具有颜色传感器,可感应任何物体的颜色,并在检测到颜色伺服电机后将物体抓起并放入相应的盒子中。它们可用于对颜色识别,颜色区分和颜色分类很重要的不同应用领域。一些应用领域包括农业工业(基于颜色的谷物分类),食品工业,钻石和采矿业,回收利用等。应用不仅限于此,还可以进一步应用于不同的行业。
用于检测颜色的最流行的传感器是TCS3200颜色传感器。我们以前将TCS3200传感器与Arduino一起使用,可以获取任何颜色的RGB组件(红色,绿色,蓝色),并且还将其与Raspberry Pi进行接口以检测任何对象的颜色。
在本教程的此处,我们将使用颜色传感器TCS3200,一些伺服电动机和Arduino板制造一台颜色分类机。本教程将包括对彩色球的排序,并将其保留在相关的颜色框中。盒子将处于固定位置,伺服电机将用于移动分拣机手以将球保持在相应的盒子中。
所需组件
- Arduino UNO
- TCS3200颜色传感器
- 伺服马达
- 跳线
- 面包板
如何制造用于颜色分选机械臂的机箱
为了进行包括底盘,臂,辊,垫的完整设置,我们使用了2mm厚度的白色Sunboard。在固定商店中很容易获得。我们使用切纸机切割了Sunboard Sheet和FlexKwik或FeviKwik,以连接不同的零件。
以下是构建颜色分拣臂的一些步骤:
1)取下防晒板。
2)如图所示,用刻度和标记物测量所有侧面后,将日光板切成片。
3)现在将两块日光板放在一起,然后在其上倒一滴FeviKwik,将两块日光板粘在一起。按照图继续连接各个部分。
4)将所有零件连接在一起后,此颜色分选机将如下所示:
TCS3200颜色传感器
TCS3200是一种颜色传感器,可以通过正确的编程检测任何数量的颜色。TCS3200包含RGB(红绿蓝)阵列。如微观图所示,可以在传感器上看到眼睛内部的方框。这些方形框是RGB矩阵的数组。每个盒子包含三个传感器,一个用于感测红色光强度,一个用于感测绿色光强度,最后一个用于感测蓝色光强度。
根据需要,分别选择这三个阵列中的每个传感器阵列。因此,它被称为可编程传感器。该模块可以具有检测特定颜色并保留其他颜色的功能。它包含用于该选择目的的过滤器。有一种称为“无滤镜模式”的第四模式,其中传感器检测白光。
Arduino颜色分类器电路图
此Arduino颜色分选器的电路图非常易于制作,不需要太多的连接。原理图如下。
这是色选机设置背后的电路:
编程Arduino Uno对彩色球进行排序
编程Arduino UNO非常简单,并且需要简单的逻辑来简化颜色分类所涉及的步骤。最后提供了带有演示视频的完整程序。
由于使用了伺服电机,因此伺服库是程序的必要部分。在这里,我们使用两个伺服电机。第一个伺服器会将有色球从初始位置移到TCS3200检测器位置,然后移到将球落下的分类位置。移动到分拣位置后,第二个伺服器将使用其手臂将球放到所需的色桶中。请参阅最后提供的视频中的完整操作。
第一步将包括所有库并定义伺服变量。
#包括
TCS3200颜色传感器无需库即可工作,因为只需要从传感器引脚读取频率即可确定颜色。因此,只需定义TCS3200的引脚号即可。
#define S0 4 #define S1 5 #define S2 7 #define S3 6 #define sensorOut 8 int frequency = 0; int color = 0;
将选择引脚设为输出,因为这将使彩色光电二极管变高或变低,并将TCS3200的Out引脚用作输入。OUT引脚将提供频率。最初将频率的缩放比例选择为20%。
pinMode(S0,OUTPUT); pinMode(S1,OUTPUT); pinMode(S2,OUTPUT); pinMode(S3,OUTPUT); pinMode(sensorOut,INPUT); digitalWrite(S0,LOW); digitalWrite(S1,HIGH);
伺服电机连接在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); delay(2); } delay(500);
的TCS 3200读取的颜色,并给出从输出引脚的频率。
颜色= detectColor(); 延迟(1000);
根据检测到的颜色,下降伺服电机以特定角度移动,并将色球下降到其各自的盒子中。
开关(颜色){ 情况1: dropServo.write(50); 打破; 情况2: dropServo.write(80); 打破; 情况3: dropServo.write(110); 打破; 情况4: dropServo.write(140); 打破; 情况5: dropServo.write(170); 打破; 案例0: 休息; } delay(500);
伺服电机返回到初始位置,以拾取下一个球。
for(int i = 65; i> 29; i--){ pickServo.write(i); delay(2); } delay(300); for(int i = 29; i <115; i ++){ pickServo.write(i); delay(2); }
函数 detectColor() 用于测量频率并比较颜色频率以得出颜色结论。结果打印在串行监视器上。然后返回用于移动下降伺服电机角度的情况下的颜色值。
int detectColor(){
写入S2和S3(低,低)会激活红色光电二极管,以获取红色密度的读数。
digitalWrite(S2,LOW); digitalWrite(S3,LOW); 频率= pulseIn(sensorOut,LOW); int R =频率; Serial.print(“ Red =”); Serial.print(frequency); //打印红色颜色的频率 Serial.print(“”); 延迟(50);
写入S2和S3(低,高)会激活蓝色光电二极管,以获取蓝色密度的读数。
digitalWrite(S2,LOW); digitalWrite(S3,HIGH); 频率= pulseIn(sensorOut,LOW); int B =频率;Serial.print(“ Blue =”); Serial.print(频率); Serial.println(“”);
写入S2和S3(高,高)会激活绿色光电二极管,以获取绿色密度的读数。
digitalWrite(S2,HIGH); digitalWrite(S3,HIGH); //读取输出频率 频率= pulseIn(sensorOut,LOW); int G =频率; Serial.print(“ Green =”); Serial.print(频率); Serial.print(“”); 延迟(50);
然后将这些值进行比较以决定颜色。不同实验设置的读数不同,因为进行设置时每个人的检测距离都不同。
if(R <22&R> 20&G <29&G> 27){ color = 1; //红色 Serial.print(“ Detected Color is =”); Serial.println(“ RED”); } if(G <25&G> 22&B <22&B> 19){ color = 2; //橙色 Serial.println(“ Orange”); } if(R <21&R> 20&G <28&G> 25){ color = 3; //绿色 Serial.print(“ Detected Color is =”); Serial.println(“ GREEN”); } if(R <38&R> 24&G <44&G> 30){ color = 4; //黄色 Serial.print(“ Detected Color is =”); Serial.println(“ YELLOW”); } 如果(G <29&G> 27&B <22&B> 19){ color = 5; //蓝色 Serial.print(“ Detected Color is =”); Serial.println(“ BLUE”); } 返回颜色; }
这将完成使用TCS3200和Arduino UNO的颜色分选机。如果需要,还可以对其进行编程以检测更多颜色。如果您有任何疑问或建议,请写信给我们的论坛或在下面发表评论。还要检查下面给出的视频。