- ส่วนประกอบที่จำเป็น
- วิธีการสร้างแชสซีสำหรับแขนหุ่นยนต์เรียงสี
- TCS3200 เซ็นเซอร์สี
- แผนภาพวงจรเรียงลำดับสี Arduino
- การเขียนโปรแกรม Arduino Uno สำหรับเรียงลูกบอลหลากสี
ตามชื่อที่แนะนำการเรียงสีเป็นเพียงการจัดเรียงสิ่งต่างๆตามสีของมัน สามารถทำได้อย่างง่ายดายโดยการมองเห็น แต่เมื่อมีการจัดเรียงสิ่งต่างๆมากเกินไปและเป็นงานที่ซ้ำซากเครื่องคัดแยกสีอัตโนมัติจะมีประโยชน์มาก เครื่องเหล่านี้มีเซ็นเซอร์สีเพื่อตรวจจับสีของวัตถุใด ๆ และหลังจากตรวจพบเซอร์โวมอเตอร์สีแล้วให้จับสิ่งของและใส่ลงในกล่องตามลำดับ สามารถใช้ในพื้นที่การใช้งานที่แตกต่างกันซึ่งการระบุสีความแตกต่างของสีและการเรียงลำดับสีเป็นสิ่งสำคัญ พื้นที่การใช้งานบางส่วน ได้แก่ อุตสาหกรรมการเกษตร (การคัดแยกเมล็ดพืชตามสี) อุตสาหกรรมอาหารอุตสาหกรรมเพชรและเหมืองแร่การรีไซเคิลเป็นต้นการใช้งานไม่ จำกัด เพียงแค่นี้และสามารถนำไปประยุกต์ใช้กับอุตสาหกรรมต่างๆได้
เซ็นเซอร์ที่นิยมมากที่สุดสำหรับการตรวจสอบสีคือเซ็นเซอร์สี TCS3200 ก่อนหน้านี้เราใช้เซ็นเซอร์ TCS3200 กับ Arduino เพื่อรับส่วนประกอบ RGB (แดงเขียวน้ำเงิน) ของสีใดก็ได้และยังเชื่อมต่อกับ Raspberry Pi เพื่อตรวจจับสีของวัตถุใด ๆ
ที่นี่ในการกวดวิชานี้เราจะทำให้สีเครื่องคัดแยกโดยใช้สีเซ็นเซอร์ TCS3200 บางเซอร์โวมอเตอร์และคณะกรรมการ กวดวิชานี้จะมีการเรียงลำดับของลูกบอลสีและการเก็บรักษาไว้ในกล่องสีที่เกี่ยวข้องกล่องจะอยู่ในตำแหน่งคงที่และเซอร์โวมอเตอร์จะถูกใช้เพื่อเลื่อนมือคัดแยกเพื่อให้ลูกบอลอยู่ในกล่องที่เกี่ยวข้อง
ส่วนประกอบที่จำเป็น
- Arduino UNO
- TCS3200 เซ็นเซอร์สี
- เซอร์โวมอเตอร์
- จัมเปอร์
- เขียงหั่นขนม
วิธีการสร้างแชสซีสำหรับแขนหุ่นยนต์เรียงสี
สำหรับการตั้งค่าที่สมบูรณ์รวมถึงแชสซีแขนลูกกลิ้งแผ่นเราได้ใช้Sunboardสีขาวที่มีความหนา 2 มม. หาซื้อได้ง่ายตามร้านเครื่องเขียน เราใช้เครื่องตัดกระดาษเพื่อตัด Sunboard Sheet และ FlexKwik หรือ FeviKwik สำหรับเชื่อมต่อส่วนต่างๆ
ด้านล่างนี้เป็นขั้นตอนบางประการในการสร้างแขนเรียงสี:
1) ใช้ Sunboard Sheet
2) ตัดแผ่นกันแดดออกเป็นชิ้น ๆ หลังจากวัดทุกด้านด้วยมาตราส่วนและเครื่องหมายดังแสดงในรูป
3) ตอนนี้จับกระดานอาบแดดทั้งสองชิ้นเข้าด้วยกันแล้วเท FeviKwik หยดหนึ่งลงไปเพื่อให้ชิ้นส่วนติดกัน เชื่อมต่อชิ้นส่วนต่อไปตามรูป
4) หลังจากรวมชิ้นส่วนทั้งหมดเข้าด้วยกันแล้วเครื่องคัดแยกสีจะมีลักษณะดังนี้:
TCS3200 เซ็นเซอร์สี
TCS3200 เป็นเซ็นเซอร์สีที่สามารถตรวจจับสีจำนวนเท่าใดก็ได้ด้วยการตั้งโปรแกรมที่เหมาะสมTCS3200 มี RGB (สีแดงสีเขียวสีฟ้า) อาร์เรย์ดังที่แสดงในภาพระดับกล้องจุลทรรศน์เราสามารถมองเห็นกล่องสี่เหลี่ยมที่อยู่ในเซนเซอร์ได้ กล่องสี่เหลี่ยมเหล่านี้คืออาร์เรย์ของเมทริกซ์ RGB กล่องเหล่านี้แต่ละกล่องมีเซ็นเซอร์สามตัวหนึ่งตัวใช้สำหรับตรวจจับความเข้มของแสงสีแดงหนึ่งกล่องใช้สำหรับตรวจจับความเข้มของแสงสีเขียวและสุดท้ายสำหรับการตรวจจับความเข้มของแสงสีน้ำเงิน
อาร์เรย์เซ็นเซอร์แต่ละตัวในอาร์เรย์ทั้งสามนี้จะถูกเลือกแยกกันขึ้นอยู่กับความต้องการ ดังนั้นจึงเรียกว่าเซ็นเซอร์ที่ตั้งโปรแกรมได้ โมดูลนี้สามารถแสดงให้เห็นถึงสีที่เฉพาะเจาะจงและปล่อยให้สีอื่น ๆ ประกอบด้วยตัวกรองสำหรับวัตถุประสงค์การเลือกนั้น มีโหมดที่สี่เรียกว่า 'โหมดไม่มีฟิลเตอร์'ซึ่งเซ็นเซอร์จะตรวจจับแสงสีขาว
แผนภาพวงจรเรียงลำดับสี Arduino
แผนภาพวงจรสำหรับArduino Color Sorterนี้ค่อนข้างง่ายที่จะทำและไม่ต้องใช้การเชื่อมต่อมากนัก แผนผังได้รับด้านล่าง
นี่คือวงจรเบื้องหลังการตั้งค่าเครื่องคัดแยกสี:
การเขียนโปรแกรม Arduino Uno สำหรับเรียงลูกบอลหลากสี
การเขียนโปรแกรม Arduino UNO นั้นค่อนข้างง่ายและต้องใช้ตรรกะง่ายๆเพื่อลดความซับซ้อนของขั้นตอนที่เกี่ยวข้องกับการเรียงลำดับสี โปรแกรมที่สมบูรณ์พร้อมวิดีโอสาธิตจะได้รับในตอนท้าย
เนื่องจากมีการใช้เซอร์โวมอเตอร์ดังนั้นไลบรารีเซอร์โวจึงเป็นส่วนสำคัญของโปรแกรม ที่นี่เราใช้เซอร์โวมอเตอร์สองตัว เซอร์โวแรกจะย้ายลูกบอลสีจากตำแหน่งเริ่มต้นไปยังตำแหน่งที่ตรวจจับ TCS3200 และจากนั้นย้ายไปยังตำแหน่งการเรียงลำดับที่ลูกจะลดลง หลังจากย้ายไปยังตำแหน่งการเรียงลำดับเซอร์โวตัวที่สองจะวางลูกบอลโดยใช้แขนไปยังถังสีที่ต้องการ ดูการทำงานทั้งหมดในวิดีโอที่ให้ไว้ในตอนท้าย
ขั้นตอนแรกคือการรวมไลบรารีทั้งหมดและกำหนดตัวแปรเซอร์โว
# รวม
เซ็นเซอร์สี TCS3200 สามารถทำงานได้โดยไม่ต้องใช้ไลบรารีเนื่องจากจำเป็นต้องใช้ความถี่ในการอ่านจากขาเซ็นเซอร์เพื่อตัดสินใจสีเท่านั้น ดังนั้นเพียงแค่กำหนดหมายเลข PIN ของ TCS3200
#define S0 4 #define S1 5 #define S2 7 #define S3 6 #define sensorOut 8 int ความถี่ = 0; สี int = 0;
ให้เลือกหมุดเป็นผลผลิตเช่นนี้จะทำให้สูงโฟโตไดโอดสีหรือต่ำและใช้ขาออกจาก TCS3200 เป็น input ขา OUT จะให้ความถี่ เลือกการปรับความถี่เป็น 20% ในขั้นต้น
pinMode (S0, เอาท์พุท); pinMode (S1, เอาท์พุท); PinMode (S2, เอาท์พุท); pinMode (S3, เอาท์พุท); pinMode (sensorOut, INPUT); digitalWrite (S0, LOW); digitalWrite (S1, สูง);
เซอร์โวมอเตอร์เชื่อมต่อที่ Pin 9 และ 10 ของ Arduino เซอร์โวรถกระบะซึ่งจะมีรถรับส่งลูกบอลสีมีการเชื่อมต่อที่ขา 9 และเซอร์โวลดลงซึ่งจะวางลูกสีตามสีมีการเชื่อมต่อที่ Pin10
pickServo.attach (9); dropServo.attach (10);
เริ่มแรกเซอร์โวมอเตอร์รับจะถูกตั้งไว้ในตำแหน่งเริ่มต้นซึ่งในกรณีนี้คือ 115 องศา อาจแตกต่างกันและสามารถปรับแต่งตามความเหมาะสมได้ มอเตอร์จะเคลื่อนที่หลังจากล่าช้าไปยังพื้นที่ตรวจจับและรอการตรวจจับ
pickServo.write (115); ล่าช้า (600); สำหรับ (int i = 115; i> 65; i-- ) { pickServo.write (i); ล่าช้า (2); } ล่าช้า (500);
TCS 3200 อ่านสีและให้ความถี่จากขาออก
color = detectColor (); ล่าช้า (1,000);
ขึ้นอยู่กับสีที่ตรวจพบเซอร์โวมอเตอร์แบบหล่นจะเคลื่อนที่ไปตามมุมที่กำหนดและปล่อยลูกบอลสีลงในกล่องตามลำดับ
สวิตช์ (สี) { กรณีที่ 1: dropServo.write (50); หยุดพัก; กรณีที่ 2: dropServo.write (80); หยุดพัก; กรณีที่ 3: dropServo.write (110); หยุดพัก; กรณีที่ 4: dropServo.write (140); หยุดพัก; กรณีที่ 5: dropServo.write (170); หยุดพัก; กรณีที่ 0: ทำลาย; } ล่าช้า (500);
เซอร์โวมอเตอร์จะกลับไปที่ตำแหน่งเริ่มต้นเพื่อให้ลูกต่อไปเลือก
สำหรับ (int i = 65; i> 29; i-- ) { pickServo.write (i); ล่าช้า (2); } ล่าช้า (300); สำหรับ (int i = 29; i <115; i ++) { pickServo.write (i); ล่าช้า (2); }
ฟังก์ชัน detectColor () ใช้ในการวัดความถี่และเปรียบเทียบความถี่ของสีเพื่อสรุปสี ผลลัพธ์จะถูกพิมพ์บนมอนิเตอร์แบบอนุกรม จากนั้นจะส่งกลับค่าสีสำหรับกรณีที่จะย้ายมุมเซอร์โวมอเตอร์แบบหล่น
int detectColor () {
การเขียนไปที่ S2 และ S3 (LOW, LOW) จะเปิดใช้งานโฟโตไดโอดสีแดงเพื่ออ่านค่าความหนาแน่นของสีแดง
digitalWrite (S2, LOW); digitalWrite (S3, LOW); ความถี่ = pulseIn (sensorOut, LOW); int R = ความถี่; Serial.print ("Red ="); Serial.print (ความถี่); // การพิมพ์ความถี่สีแดง Serial.print (""); ล่าช้า (50);
การเขียนถึง S2 และ S3 (ต่ำ, สูง) จะเปิดใช้งานโฟโตไดโอดสีน้ำเงินเพื่ออ่านค่าความหนาแน่นของสีฟ้า
digitalWrite (S2, LOW); digitalWrite (S3, สูง); ความถี่ = pulseIn (sensorOut, LOW); int B = ความถี่; Serial.print ("สีน้ำเงิน ="); Serial.print (ความถี่); Serial.println ("");
การเขียนไปยัง S2 และ S3 (สูง, สูง) จะเปิดใช้งานโฟโตไดโอดสีเขียวเพื่ออ่านค่าความหนาแน่นของสีเขียว
digitalWrite (S2, สูง); digitalWrite (S3, สูง); // การอ่านความถี่เอาท์พุทความถี่ = pulseIn (sensorOut, LOW); int G = ความถี่; Serial.print ("สีเขียว ="); Serial.print (ความถี่); Serial.print (""); ล่าช้า (50);
จากนั้นจึงนำค่าต่างๆมาเปรียบเทียบเพื่อตัดสินใจเลือกสี การอ่านค่าจะแตกต่างกันสำหรับการตั้งค่าการทดลองที่แตกต่างกันเนื่องจากระยะการตรวจจับจะแตกต่างกันไปสำหรับทุกคนเมื่อทำการตั้งค่า
ถ้า (R <22 & R> 20 & G <29 & G> 27) { color = 1; // Red Serial.print ("สีที่ตรวจพบคือ ="); Serial.println ("RED"); } ถ้า (G <25 & G> 22 & B <22 & B> 19) { color = 2; // Orange Serial.println ("สีส้ม"); } ถ้า (R <21 & R> 20 & G <28 & G> 25) { color = 3; // Green Serial.print ("สีที่ตรวจพบคือ ="); Serial.println ("สีเขียว"); } ถ้า (R <38 & R> 24 & G <44 & G> 30) { color = 4; // Yellow Serial.print ("สีที่ตรวจพบคือ ="); Serial.println ("สีเหลือง"); } ถ้า (G <29 & G> 27 & B <22 & B> 19) { color = 5; // Blue Serial.print ("สีที่ตรวจพบคือ ="); Serial.println ("BLUE"); } กลับสี; }
นี้เสร็จสิ้นเครื่องสีเรียงลำดับโดยใช้ TCS3200 และ Arduino UNO คุณยังสามารถตั้งโปรแกรมให้ตรวจจับสีเพิ่มเติมได้หากจำเป็น หากคุณมีข้อสงสัยหรือมีข้อเสนอแนะใด ๆ โปรดเขียนลงในฟอรัมหรือแสดงความคิดเห็นด้านล่าง ตรวจสอบวิดีโอด้านล่างด้วย