คำอธิบาย
ตรวจจับ นับชิ้นงาน และคัดแยก โลหะบนสายพานลำเลียง Automation Metal Detector + Counter + Rejector
ระบบอัตโนมัติ หรือ Automation ประกอบด้วย Hardware และ Software ที่ทำงานร่วมกัน ให้สามารถควบคุมการทำงาน ของระบบเป็นไปแบบอัตโนมัติ ระบบอัตโนมัติ นั้นจะเกี่ยวข้องกับ ระบบควบคุม Control System รวมถึงวิศวกรรมแมคคาทรอนิกส์และหุ่นยนต์พื้นฐานของระบบอัตโนมัติประกอบด้วยส่วนหลักๆคือ
- อินพุทจากเซนเซอร์ต่างๆ เซ็นเซอร์วัดความดัน Pressure sensor, เซ็นเซอร์อุลตราโซนิค Ultrasonic sensor , เซ็นเซอร์ความชื้น Humidity sensor, เซ็นเซอร์วัดก๊าซ Gas sensor, เซ็นเซอร์ตรวจจับการเคลื่อนไหวแบบพีไออาร์ PIR motion sensor, เซ็นเซอร์วัดความเร่ง Acceleration sensor, เซ็นเซอร์วัดแรง Force sensor, เซ็นเซอร์สี color sensor, เซ็นเซอร์เซ็นเซอร์วัดมุมและการหมุน gyro sensor, เซ็นเซอร์อัลตราโซนิก ultrasonic sensor และอื่นๆเช่น เทอร์โมไพล์
- การสื่อสาร – สายเคเบิล USB, RS485, Wi-Fi และอื่นๆ
- ตัวควบคุม เช่น MCU และอื่นๆ
- เอาท์พุท – เช่นวาล์ว, มอเตอร์, หลอดไฟ, ลำโพง และอื่นๆ
มีอะไรเตรียมไว้ให้ในชุด
- สายพานลำเลียง CONV-DC12V
- ชุดบอร์ดควบคุม Arduino
- เซนเซอร์โฟโตอิเล็คทริคอินฟราเรด Infrared Photoelectric Sensors
- เซ็นเซอร์ตรวจจับโลหะ Inductive Proximity Sensor NPN
- ชุดผลักชิ้นงาน Rejector แบบใช้ Step motor
- บอร์ด Relay Module 4 CH
- ชิ้นงานสำหรับทดสอบ 1 เซต
- สกรูเทอร์มินอล Screw Terminal สำหรับ Wiring สายไฟ
- สวิตชิ่งพาวเวอร์ซัพพลาย + สายไฟ AC Power Cord
- ชุดติดตั้งบนแผ่นพลาสวูด
- เคาเตอร์ Counter นับชิ้นงาน
- ไฟ LED ทาวเวอร์
หลักการทำงาน
ชุดทดลองคัดแยกโลหะบนสายพานลำเลียง เพื่อแยกชิ้นงานที่ เป็นโลหะ ออกจาก ชิ้นงานที่ไม่ใช่โลหะ โดยผู้เล่นจะเข้าใจถึงการทำงาน การควบคุมแบบ Manual และการควบคุมแบบ Automation เพื่อเป็นพื้นฐานไปสู่การเข้าใจ ระบบควบคุมอุตสาหกรรม Industrial Control System อีกทั้งยังก่อให้เกิดทักษะ กระตุ้นความคิด การคิดอย่างมีระบบ (System Thinking) ช่วยในการออกแบบและประยุกต์ใช้ วัสดุ, โครงสร้าง, เครื่องจักร, เครื่องมือ, ระบบ และ กระบวนการ
เงื่อนไข
- กำหนดค่าที่ต้องการนับ เพื่อให้สายพานหยุด
- เมื่อ พร็อกซิมิตี้เซนเซอร์แบบ Inductive ตรวจจับชิ้นงานที่เป็นโลหะ (สามารถเลือกเปลี่ยนเป็นโฟโต้เซนเซอร์ด้วยการเปิดคอมเม้นในโค้ด)
- Arduino จะสั่งให้ชุดเคาเตอร์ Counter นับชิ้นงาน นับขึ้น
- Arduino จะสั่งให้อุปกรณ์ผลักชิ้นงาน Rejector ผลักชิ้นงานออก เพื่อการคัดแยก
- หากตรวจจับชิ้นงานได้ แต่ไม่ใช่โลหะ ชิ้นงาน จะไหลผ่านไปยังปลายสายพาน โดยจะไม่นับ
- เมื่อนับถึงค่าทึ่ตั้งไว้ในโปรแกรม ในที่นี้คือ 10 โปรแกรมจะหยุดรอ จนกว่าจะกดรีเซตบนบอร์ดอาดูโน่ สายพานจะกลับมาทำงานอีกครั้ง
อินพุทจาก เซนเซอร์
- ในชุดสำเร็จได้ติดตั้งพร็อกซิมิตี้เซนเซอร์แบบ Inductive อาศัยหลักการเปลี่ยนแปลงค่าความเหนี่ยวนำ ใช้เพื่อตรวจจับวัตถุที่เป็นโลหะ
- ผู้ใช้สามารถเลือกเปลี่ยนเป็นโฟโต้เซนเซอร์ด้วยการเปิดคอมเม้นในโค้ด โดยจะทำให้เซนเซอร์นับชิ้นงานทุกอย่างที่เคลื่อนผ่าน
เอาท์พุทเพื่อการนับการคัดแยกและการแสดงผล
- อุปกรณ์ผลักชิ้นงาน Rejector
- ชุด Counter แสดงผลนับ 7-Segment 4 หลัก
Wiring Diagram
https://oshwlab.com/s2insupply/mini-automation-conveyor-50-counter-lamp-active-lo
Arduino Code
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 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 |
const int Sensor1 = 2; // ต่อเซนเซอร์ตัวที่ 1 ตรวจจับโลหะ const int Sensor2 = 3; // ต่อเซนเซอร์ตัวที่ 2 โฟโต้เซนเซอร์ const int Reject = 8; // สั่งตัวผลักชิ้นงาน const int Conveyor = 9; // สั่งสายพาน const int Counter = 10; // สั่งเคาท์เตอร์นับ //เมื่อเซนเซอร์เจอชิ้นงาน จะหน่วงเวลาให้ชิ้นงานเคลื่อนที่ถึงตัวผลัก แล้วสั่งให้ตัวผลักทำงาน int Sensor1_State; // the current reading from the input pin int Sensor2_State; // the current reading from the input pin int lastButton_State = LOW; // the previous reading from the input pin int lastButton_State2 = LOW; // the previous reading from the input pin int State_Reject =0; int count_delay =0; unsigned long lastDebounceTime = 0; // the last time the output pin was toggled unsigned long lastDebounceTime2 = 0; unsigned long debounceDelay = 50; // the debounce time; increase if the output flickers int Number = 0; int Target_Number = 5; // ตั้งค่าจำนวนการนับชิ้นงาน void setup() { pinMode(Sensor1, INPUT_PULLUP); pinMode(Sensor2, INPUT_PULLUP); pinMode(Reject, OUTPUT); pinMode(Conveyor, OUTPUT); pinMode(Counter, OUTPUT); // set initial state digitalWrite(Reject, HIGH); // High คือไม่ผลัก digitalWrite(Conveyor, HIGH);// High คือสายพานหยุด digitalWrite(Counter, HIGH);// High คือไม่นับ Serial.begin(9600); digitalWrite(Conveyor, LOW); // ส่ง Low สั่งให้รีเลย์ทำงานจ่ายไฟให้สายไฟหมุน } void loop() { // read the state of the switch into a local variable: //******************************************************** 1 ********************************************************************************************************* //digitalWrite(Conveyor, LOW); // ส่ง Low สั่งให้รีเลย์ทำงานจ่ายไฟให้สายไฟหมุน //***************************************************************************************************************************************************************** //********************************************************* 2 ******************************************************************************************************** int reading1 = digitalRead(Sensor1); // อ่านค่าจากเซนเซอร์ตรวจจับโลหะ if (reading1 != lastButton_State) { // reset the debouncing timer lastDebounceTime = millis(); Serial.println(reading1); } if ((millis() - lastDebounceTime) > debounceDelay) //หน่วงเวลาป้องกันสัญญาณรบกวน คือต้องมีค่าเวลามากกว่าตัวแปร debounceDelay เพื่อให้แน่ใจว่ามีชิ้นงานจริงๆ ไม่ใช่สัญญาณรบกวน { if (reading1 != Sensor1_State) { Sensor1_State = reading1; if (Sensor1_State == LOW) // ยืนยันว่าเซนเซอร์ตรวจจับชิ้นงานได้จริงๆ เป็นคือสัญญาณเป็นลอจิก Low { State_Reject =1; } } } lastButton_State = reading1; //***************************************************************************************************************************************************************** //********************************************************** 3 ******************************************************************************************************* int reading2 = digitalRead(Sensor2); // อ่านค่าจากโฟโต้เซนเซอร์ ตรวจจับวัตถุ เพื่อนับชิ้นงาน if (reading2 != lastButton_State2) { // reset the debouncing timer lastDebounceTime2 = millis(); Serial.println(reading2); } if ((millis() - lastDebounceTime2) > debounceDelay) //หน่วงเวลาป้องกันสัญญาณรบกวน คือต้องมีค่าเวลามากกว่าตัวแปร debounceDelay เพื่อให้แน่ใจว่ามีชิ้นงานจริงๆ ไม่ใช่สัญญาณรบกวน { if (reading2 != Sensor2_State) { Sensor2_State = reading2; if (Sensor2_State == LOW) // ยืนยันว่าเซนเซอร์ตรวจจับชิ้นงานได้จริงๆ เป็นคือสัญญาณเป็นลอจิก Low { digitalWrite(Counter, LOW); // สั่งให้ตัวเคาท์เตอร์นับขึ้น 1 Number = Number +1; delay(120); // หน่วงเวลาสักครู่ digitalWrite(Counter, HIGH); // กลับมาสถานะเดิม if (Number >= Target_Number) { digitalWrite(Conveyor, HIGH);// High คือสายพานหยุด } else { digitalWrite(Conveyor, LOW); // ส่ง Low สั่งให้รีเลย์ทำงานจ่ายไฟให้สายไฟหมุน } } } } lastButton_State2 = reading2; //***************************************************************************************************************************************************************** if(State_Reject == 1) { delay(10); count_delay++; if(count_delay>250) { count_delay=0; State_Reject = 2; } } else if(State_Reject == 2) { delay(10); digitalWrite(Reject, LOW); // สั่งให้ตัวผลักชิ้นงานทำงาน count_delay++; if(count_delay>50) { count_delay=0; State_Reject = 3; } } else if(State_Reject == 3) { delay(10); digitalWrite(Reject, HIGH); // กลับมาสถานะเดิม count_delay++; if(count_delay>5) { count_delay=0; State_Reject = 0; } } } |
รีวิว
ยังไม่มีบทวิจารณ์