คำอธิบาย
ชุดทดลองตรวจจับสี คัดแยกสี บนสายพานลำเลียง Automation Color Sensor Counter Arduino
มีอะไรเตรียมไว้ให้ในชุด
- 1set x สายพานลำเลียง Mini Conveyor + อะแดปเตอร์จ่ายไฟ
- 1set x ชุดผลักชิ้นงาน Rejector แบบใช้ Step motor
- 1pcs x บอร์ด L298 Motor Driver Module 1 บอร์ด
- 1pcs x บอร์ด Arduino Uno Compatible 1 บอร์ด
- 1set x ชุดสายไฟแบบหัวเสียบ DC Jack สำหรับต่อมอเตอร์
- 1set x เซนเซอร์สีแบบดิจิตอล ใช้สำหรับการตรวจจับวัตถุสี ติดตั้งบนแผ่นเพลท
- 1set x ชุด Counter แสดงผลการนับ 7-Segment
- 1set x ชิ้นงานสำหรับทดสอบสี 1pcs x จุดเชื่อมต่อสายไฟแบบสกรูเทอร์มินอล Screw Terminal
ใบงาน การใช้ Color sensors เพื่อการคัดแยกชิ้นงานตามสีที่กำหนด
เซ็นเซอร์สี DIGITAL COLOR MARK SENSOR LX-101 Digital Color Sensor เซ็นเซอร์สีแบบดิจิตอล ใช้สำหรับการตรวจจับวัตถุสี มีแหล่งกำเนิดแสง สีแดง สีเขียว สีฟ้า
ระยะการรับสัญญาณ 10 มม
- สายสีน้ำตาล 12-24V
- สายสีน้ำเงิน GND
- สายสีดำ DIGITAL OUTPUT / NPN normally open (Active Low) ต่อ DIGITAL OUTPUT เข้ากับขา Analog ของ Arduino Uno
การโปรแกรมให้เซนเซอร์สีจำค่าสีที่เราต้องการ
LX 101 Color Mode Setup การโปรแกรม TECH ให้เซนเซอร์สีจำค่าสีที่ต้องการ
-
- วางชิ้นงานสี ไว้ใต้เซนเซอร์
- กด Mode ไปเรื่อยๆ ให้ไฟสีส้มตำแหน่ง COLOR ติด
- กด ปุ่มลูกศร ขึ้น (หรือปุ่ม ON/SELECT) หรือปุ่มลูกศร ลง (หรือปุ่ม OFF/ENTER) จนหน้าจอแสดงคำว่า CLor
- กด Mode กลับมาที่ RUN หน้าจอจะแสดงคำว่า c 0
- กด Mode ไปที่ TECH ให้ไฟ สีส้มตำแหน่ง TECH ติด หน้าจอจะแสดงคำว่า 1.5t
- วางชิ้นงานไว้ใต้เซนเซอร์ ขยับเซนเซอร์ขั้นลงเพื่อส่องลำแสง LED ที่เซนเซอร์ไปยังชิ้นงาน
- จากนั้น ปุ่มลูกศร ขึ้น (หรือปุ่ม ON/SELECT) คำว่า 1.5t จะกระพริบ และเปลี่ยนเป็นคำว่า good
- เมื่อจอขึ้นคำว่า good แล้ว เซนเซอร์ จะเข้าสู่โหมด RUN ให้เองโดยอัตโนมัติ เป็นอันเสร็จการตั้งการจำค่าสีที่ต้องการ
- เซนเซอร์พร้อมใช้งาน เมื่อเซนเซอร์พบสีที่เรา TECH ไว้ ไฟ OPE สีส้มจะติด พร้อมกับ DIGITAL OUTPUT / NPN จะ Active Low
Wiring Automation Color Sensor
โค้ด Arduino
ตัวอย่างโปรแกรมด้านล่างแสดง การตรวจจับชิ้นงานที่มีสีต่างกัน และตรวจสอบว่าใช่สีที่เราต้องการหรือไม่ เมื่อเซนเซอร์เจอสีที่เราโปรแกรมไว้ ระบบจะรอเวลาที่เราตั้งค่าเพื่อรอให้ชิ้นงานวิ่งไปใกล้ Rejector และผลักออก
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 |
#define in3 6 //ขาควบคุม L298 #define in4 7 //ขาควบคุม L298 #define enB 8 //ขาควบคุม L298 int Sensor_1 = 9; //Digital input Collor Sensor int Rejector = 10; //Uno Digital for Rejector int CounterUp = 11; //Pin for Counter Up int SensorValue_A = 0; int Output_Value = 0; int Count_Value = 0; int Flag_count = 0; int rotDirection = 0; //ตัวแปรกำหนดทิศทางการหมุนสายพาน int flag_count = 0; int delay_injector= 2500; //หน่วงเวลาหลังจากเจอชิ้นงาน ค่อยผลัก void setup() { pinMode(enB, OUTPUT); pinMode(in3, OUTPUT); pinMode(in4, OUTPUT); pinMode(Sensor_1, INPUT_PULLUP);//Collor SensorCollor Sensor //configure Sensor_1 (pin 9) as an input and enable the internal pull-up resistor pinMode(Rejector, OUTPUT);//Rejector digitalWrite(Rejector, HIGH); pinMode(CounterUp, OUTPUT);//RCounterUp Active High digitalWrite(CounterUp, LOW); // Set initial rotation direction digitalWrite(in3, LOW); digitalWrite(in4, HIGH); Serial.begin(9600); } void loop() { //*************************************************************************************************** int pwmOutput = 255; //set speed conveyor analogWrite(enB, pwmOutput); // ส่งสัญญาณ PWM 0-255 = 0-100% เพื่อควบคุมความเร็วสายพาน rotDirection = 1; // 0 = สายพานเคลื่อนไปทางซ้าย 1=สายพานเคลื่อนไปทางขวา if (rotDirection == 0) // สายพานเคลื่อนไปทางซ้าย { digitalWrite(in3, HIGH); digitalWrite(in4, LOW); } if (rotDirection == 1) // สายพานเคลื่อนไปทางขวา { digitalWrite(in3, LOW); digitalWrite(in4, HIGH); } //************************************************************************************************** SensorValue_A = digitalRead(Sensor_1); // map it to the range of the analog out: //SensorValue_A = map(SensorValue_A, 0, 1023, 0, 255); //Serial.println(SensorValue_A); // delay(100); if(SensorValue_A == HIGH) // sensor_A ไม่เจอชิ้นงาน { flag_count=0; } else // sensor_A เจอชิ้นงานแล้ว { delay(delay_injector); // รอเวลาให้ชิ้นงานวิ่งไปใกล้ Rejector สามารถเปลี่ยนแปลงค่าให้เหมาะสมกับความเร็วสายพาน digitalWrite(Rejector, LOW);// ส่ง Logic 0 เพื่อให้ Rejector ทำงาน เปรียบเสมือน การ กดสวิตช์ digitalWrite(CounterUp, HIGH);// ส่งสัญญาณไปยังวงจรเคาท์เตอร์ active high delay(100); //หน่วงเวลาขาลง นาน 100 มิลลิเซค digitalWrite(Rejector, HIGH); digitalWrite(CounterUp, LOW); } } |
รีวิว
ยังไม่มีบทวิจารณ์