顾名思义,颜色分类只是根据颜色对事物进行排序。它可以通过查看来轻松完成,但是当有太多东西需要分类并且是重复性任务时,自动颜色分选机非常有用。这些机器使用颜色传感器来感应任何物体的颜色,并在检测到颜色伺服电机后抓住物体并将其放入相应的盒子中。它们可用于不同的应用领域,其中颜色识别、颜色区分和颜色分类很重要。一些应用领域包括农业(基于颜色的谷物分选)、食品工业、钻石和采矿业,回收利用等。应用不限于此,并且可以进一步应用于不同的行业。
最常用的检测颜色的传感器是TCS3200颜色传感器。我们以前使用过Arduino和TCS3200传感器来获取任何颜色的RGB分量(红色、绿色、蓝色)。
在本篇文章中,我们将使用颜色传感器TCS3200、伺服电机和Arduino开发板制作颜色分选机。本文将包括彩球的分类并将它们保存在相关的颜色框中。盒子将处于固定位置,伺服电机将用于移动分拣机的手以将球放到相关的盒子中。
需要的组件 ● Arduino UNO开发板 ● TCS3200色彩传感器 ● 伺服电机 ● 跳线 ● 面包板
如何制作颜色分选机手臂的底盘 为了完成包括底盘、手臂、滚轮、垫的完整设置,我们使用了2mm厚的白色阳光板。它在商店很容易买到。我们使用切纸机切割阳光板。 以下是制作颜色分选机手臂的一些步骤: 1)准备一些阳光板。
2)用标尺和标记测量所有侧面后,将太阳板片切成块,如图所示。
3)现在将两块阳光板固定在一起,在其上倒上胶水,将碎片粘在一起。按照图示继续加入各个部分。
4)将所有部件拼接在一起后,这台颜色分选机将如下所示:
TCS3200彩色传感器
TCS3200是一种颜色传感器,可以通过正确的编程检测任意数量的颜色。 TCS3200包含RGB(红绿蓝)阵列。如图所示,在微观层面上可以看到传感器眼睛内的方框。这些方框是RGB矩阵的阵列。每个盒子都包含三个传感器,一个用于感应红光强度,一个用于感应绿光强度,另一个用于感应蓝光强度。
根据需要分别选择这三个阵列中的每个传感器阵列。因此它被称为可编程传感器。该模块可以用于感知特定颜色。它包含用于该选择目的的过滤器。存在称为“无滤波器模式”的第四模式,其中传感器检测白光。
电路原理图 这款Arduino颜色分选机的电路图很容易制作,不需要太多连接。原理图如下。
以下是颜色分选机设置背后的电路:
编程Arduino Uno 编写Arduino UNO非常简单,需要一个简单的逻辑来简化颜色排序所涉及的步骤。
由于使用了伺服电机,因此伺服库是程序的重要组成部分。这里我们使用两个伺服电机。第一个伺服器将彩色球从初始位置移动到TCS3200探测器位置,然后移动到球将被丢弃的分拣位置。在移动到分拣位置后,第二个伺服器将使用其臂将球落到所需的颜色桶中。
第一步是包含所有库并定义伺服变量。 - #include <Servo.h>
- Servo pickServo;
- Servo dropServo;
复制代码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引脚将提供频率。最初选择频率比例为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上,并且在Pin10处连接将根据颜色丢弃彩球的下降伺服。 - pickServo.attach(9);
- dropServo.attach(10);
复制代码
刚开始,拾取伺服电机设置在初始位置,本例为115度。它可能不同,可以相应地进行定制。电机在一段延迟后移动到检测器区域并等待检测。 - pickServo.write(115);
- delay(600);
- for(int i = 115; i > 65; i--) {
- pickServo.write(i);
- delay(2);
- }
- delay(500);
复制代码TCS 3200读取颜色并从输出引脚中提供频率。 - color = detectColor();
- delay(1000);
复制代码根据检测到的颜色,下降伺服电机以特定角度移动并将彩色球落到各自的盒子上。 - switch (color) {
- case 1:
- dropServo.write(50);
- break;
- case 2:
- dropServo.write(80);
- break;
- case 3:
- dropServo.write(110);
- break;
- case 4:
- dropServo.write(140);
- break;
- case 5:
- dropServo.write(170);
- break;
- case 0:
- break;
- }
- 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()用于测量频率并比较颜色频率以得出颜色的结论。结果将打印在串行监视器上。然后它返回用于移动下降伺服电机角度的情况的颜色值。
向S2和S3写入(LOW,LOW)激活红色光电二极管以获取红色密度的读数。 - digitalWrite(S2, LOW);
- digitalWrite(S3, LOW);
- frequency = pulseIn(sensorOut, LOW);
- int R = frequency;
- Serial.print("Red = ");
- Serial.print(frequency);//printing RED color frequency
- Serial.print(" ");
- delay(50);
复制代码向S2和S3写入(LOW,HIGH)激活蓝色光电二极管以获取蓝色密度的读数。 - digitalWrite(S2, LOW);
- digitalWrite(S3, HIGH);
- frequency = pulseIn(sensorOut, LOW);
- int B = frequency;
- Serial.print("Blue = ");
- Serial.print(frequency);
- Serial.println(" ");
复制代码向S2和S3写入(HIGH,HIGH)激活绿色光电二极管以获取绿色密度的读数。 - digitalWrite(S2, HIGH);
- digitalWrite(S3, HIGH);
- // Reading the output frequency
- frequency = pulseIn(sensorOut, LOW);
- int G = frequency;
- Serial.print("Green = ");
- Serial.print(frequency);
- Serial.print(" ");
- delay(50);
复制代码
然后比较这些值以做出颜色决定。对于不同的实验设置,读数是不同的,因为在进行设置时每个人的检测距离都不同。 - if(R<22 & R>20 & G<29 & G>27){
- color = 1; // Red
- Serial.print("Detected Color is = ");
- Serial.println("RED");
- }
- if(G<25 & G>22 & B<22 &B>19){
- color = 2; // Orange
- Serial.println("Orange ");
- }
- if(R<21 & R>20 & G<28 & G>25){
- color = 3; // Green
- Serial.print("Detected Color is = ");
- Serial.println("GREEN");
- }
- if(R<38 & R>24 & G<44 & G>30){
- color = 4; // Yellow
- Serial.print("Detected Color is = ");
- Serial.println("YELLOW");
- }
- if (G<29 & G>27 & B<22 &B>19){
- color = 5; // Blue
- Serial.print("Detected Color is = ");
- Serial.println("BLUE");
- }
- return color;
- }
复制代码
以上就是使用TCS3200和Arduino UNO开发板制作颜色分选机的全部步骤。 如果需要,您还可以对其进行编程以检测更多颜色。 如果您有任何疑问或有任何建议,可以本帖下面进行回复。
代码 以下是本文使用的完整代码:
main.rar
(993 Bytes, 下载次数: 155)
|