顧名思義,顏色分類就是簡單地根據(jù)事物的顏色對事物進行分類。它可以通過看到它來輕松完成,但是當要分類的東西太多并且這是一項重復(fù)性任務(wù)時,自動色選機非常有用。這些機器有顏色傳感器來感知任何物體的顏色,并在檢測到顏色伺服電機后抓住物體并將其放入相應(yīng)的盒子中。它們可用于顏色識別、顏色區(qū)分和顏色分類很重要的不同應(yīng)用領(lǐng)域。一些應(yīng)用領(lǐng)域包括農(nóng)業(yè)(基于顏色的谷物分選)、食品工業(yè)、鉆石和采礦業(yè)、回收等。應(yīng)用不僅限于此,還可以進一步應(yīng)用于不同的行業(yè)。
在本教程中,我們將使用顏色傳感器 TCS3200、一些伺服電機和 Arduino 板制作顏色分選機。本教程將包括彩球的分類并將它們保存在相關(guān)的彩盒中。盒子將處于固定位置,伺服電機將用于移動分揀手以將球保持在相關(guān)盒子中。
所需組件
Arduino UNO
TCS3200 顏色傳感器
伺服電機
跳線
面包板
色選機械臂底盤的制作方法
為了制作包括底盤、臂、滾輪、墊子在內(nèi)的完整設(shè)置,我們使用了 2 毫米厚的白色Sunboard。它在固定商店很容易買到。我們使用切紙機切割 Sunboard Sheet 和 FlexKwik 或 FeviKwik 來連接不同的部分。以下是構(gòu)建顏色分類臂
的一些步驟:
1)拿取防曬板。
2) 如圖所示,用刻度尺和記號筆測量好所有邊后,將陽光板切成小塊。
3)現(xiàn)在將兩塊陽光板放在一起,然后在上面倒一滴 FeviKwik 將它們粘在一起。按照圖繼續(xù)連接。
4) 將所有部件連接在一起后,這臺色選機將如下所示:
TCS3200 顏色傳感器
TCS3200 是一種顏色傳感器,可以通過正確的編程檢測任意數(shù)量的顏色。TCS3200 包含 RGB(紅綠藍)陣列。如圖所示,在顯微鏡下可以看到傳感器眼睛內(nèi)部的方框。這些方塊是 RGB 矩陣的數(shù)組。這些盒子中的每一個都包含三個傳感器,一個用于感測紅光強度,一個用于感測綠光強度,最后一個用于感測藍光強度。
這三個陣列中的每個傳感器陣列都是根據(jù)需要單獨選擇的。因此它被稱為可編程傳感器。該模塊可以用來感知特定顏色并離開其他顏色。它包含用于該選擇目的的過濾器。第四種模式稱為“無濾鏡模式”,其中傳感器檢測白光。
Arduino色選機電路圖
這個Arduino 顏色分類器的電路圖很容易制作,不需要太多連接。示意圖如下。
這是色選機設(shè)置背后的電路:
對 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(傳感器輸出,輸入); 數(shù)字寫入(S0,低); 數(shù)字寫入(S1,高);
伺服電機連接在 Arduino 的引腳 9 和 10。將拾取彩球的拾取伺服器連接在引腳 9 上,將根據(jù)顏色掉落彩球的下落伺服器連接在引腳 10 上。
pickServo.attach(9); dropServo.attach(10);
最初,拾取伺服電機設(shè)置在初始位置,在這種情況下為 115 度。它可能會有所不同,并且可以相應(yīng)地進行定制。電機在延遲一段時間后移動到檢測器區(qū)域并等待檢測。
pickServo.write(115); 延遲(600); for(int i = 115; i > 65; i--) { pickServo.write(i); 延遲(2); } 延遲(500);
TCS 3200從Out Pin 讀取顏色并給出頻率。
顏色 = 檢測顏色(); 延遲(1000);
根據(jù)檢測到的顏色,下落伺服電機以特定角度移動,并將彩球落入相應(yīng)的盒子中。
開關(guān)(顏色){ 案例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); }
函數(shù)detectColor()用于測量頻率并比較顏色頻率以得出顏色結(jié)論。結(jié)果打印在串行監(jiān)視器上。然后它返回用于移動下降伺服電機角度的案例的顏色值。
詮釋檢測顏色(){
寫入 S2 和 S3 (LOW,LOW) 會激活紅色光電二極管以獲取紅色密度讀數(shù)。
數(shù)字寫入(S2,低); 數(shù)字寫入(S3,低); 頻率 = 脈沖輸入(傳感器輸出,低); int R = 頻率; Serial.print("紅色 = "); Serial.print(frequency);//打印紅色頻率 Serial.print(" "); 延遲(50);
寫入 S2 和 S3(低、高)會激活藍色光電二極管以獲取藍色密度讀數(shù)。
數(shù)字寫入(S2,低); 數(shù)字寫入(S3,高); 頻率 = 脈沖輸入(傳感器輸出,低); int B = 頻率; Serial.print("藍色 = "); Serial.print(頻率); 序列號.println(" ");
寫入 S2 和 S3 (HIGH,HIGH) 會激活綠色光電二極管以獲取綠色密度讀數(shù)。
數(shù)字寫入(S2,高); 數(shù)字寫入(S3,高); // 讀取輸出頻率 頻率 = pulseIn(sensorOut, LOW); int G = 頻率; Serial.print("綠色 = "); Serial.print(頻率); 序列號.print(""); 延遲(50);
然后比較這些值以做出顏色決定。不同實驗設(shè)置的讀數(shù)不同,因為在進行設(shè)置時每個人的檢測距離都不同。
如果(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);
數(shù)字寫入(S3,低);
頻率 = 脈沖輸入(傳感器輸出,低);
int R = 頻率;
Serial.print("紅色 = ");
Serial.print(frequency);//打印紅色頻率
Serial.print(" ");
延遲(50);
// 激活藍色光電二極管以讀取
digitalWrite(S2, LOW);
數(shù)字寫入(S3,高);
頻率 = 脈沖輸入(傳感器輸出,低);
int B = 頻率;
Serial.print("藍色 = ");
Serial.print(頻率);
序列號.println(" ");
// 激活綠色光電二極管以讀取
digitalWrite(S2, HIGH);
數(shù)字寫入(S3,高);
// 讀取輸出頻率
頻率 = pulseIn(sensorOut, LOW);
int G = 頻率;
Serial.print("綠色 = ");
Serial.print(頻率);
序列號.print("");
延遲(50);
延遲(50);
//不同設(shè)置
的讀數(shù)不同 //根據(jù)您的項目和檢測到的讀數(shù)更改讀數(shù)
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("藍色");
}
返回顏色;
}
無效設(shè)置(){
pinMode(S0,輸出);
pinMode(S1,輸出);
pinMode(S2,輸出);
pinMode(S3,輸出);
pinMode(傳感器輸出,輸入);
//頻率縮放到 20% 選定
的 digitalWrite(S0, LOW);
數(shù)字寫入(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);
//通過調(diào)用函數(shù)讀取顏色值。將結(jié)論值保存在變量
color = detectColor();
延遲(1000);
開關(guān)(顏色){
案例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;
}
-
伺服電機
+關(guān)注
關(guān)注
85文章
2057瀏覽量
58200 -
Arduino
+關(guān)注
關(guān)注
188文章
6477瀏覽量
187838 -
分選機
+關(guān)注
關(guān)注
0文章
25瀏覽量
6813 -
TCS3200
+關(guān)注
關(guān)注
0文章
23瀏覽量
15602
發(fā)布評論請先 登錄
相關(guān)推薦
TCS230/TCS3200的脈沖問題
請問顏色傳感器GY-33 TCS34725和TCS3200有什么區(qū)別?
基于STM32F103的TCS3200顏色傳感器使用
介紹單片機如何使用TCS3200顏色識別傳感器
TCS3200顏色傳感器的使用說明詳細資料免費下載
![<b class='flag-5'>TCS3200</b><b class='flag-5'>顏色</b>傳感器的使用說明詳細資料免費下載](https://file.elecfans.com/web1/M00/8E/E0/o4YBAFy5NM6AJ-MaAASvwE02D4M841.png)
基于STM32F103的TCS3200顏色傳感器的使用
![基于STM32F103的<b class='flag-5'>TCS3200</b><b class='flag-5'>顏色</b>傳感器的使用](https://file.elecfans.com/web1/M00/D9/4E/pIYBAF_1ac2Ac0EEAABDkS1IP1s689.png)
使用TCS3200和Arduino Uno制作Arduino Chameleon
![使用<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](https://file.elecfans.com/web1/M00/D9/4E/pIYBAF_1ac2Ac0EEAABDkS1IP1s689.png)
使用TCS230 TCS3200顏色傳感器制作顏色檢測器
![使用<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>檢測器](https://file.elecfans.com/web1/M00/D9/4E/pIYBAF_1ac2Ac0EEAABDkS1IP1s689.png)
評論