คำอธิบาย
ตรวจจับ นับชิ้นงาน และคัดแยก โลหะบนสายพานลำเลียง 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 และอื่นๆ
- เอาท์พุท – เช่นวาล์ว, มอเตอร์, หลอดไฟ, ลำโพง และอื่นๆ
มีอะไรเตรียมไว้ให้ในชุด (อุปกรณ์ในชุดติดตั้งบนแผ่นพลาสวูด)
- 1pcs สายพานลำเลียง CONV-DC12V
- บอร์ดควบคุม Arduino
- เคาเตอร์ Counter นับชิ้นงาน
- พร็อกซิมิตี้เซนเซอร์ แบบ Inductive
- พร็อกซิมิตี้เซนเซอร์ แบบ Photoelectric
- ชิ้นงานสำหรับทดสอบ 1 เซต
- ไฟแสดงผล Tower Lamp LED พร้อมบัซเซอร์
- บอร์ด ขับมอเตอร์ DC L298
- บอร์ด รีเลย์โมดูล 4ช่อง H
- อะแดปเตอร์จ่ายไฟ 12VDC
- สกรูเทอร์มินอล Screw Terminal สำหรับ Wiring สายไฟ
- ชุดผลักชิ้นงานไฟฟ้า Rejector 12VDC
หลักการทำงาน
ชุดทดลองคัดแยกโลหะบนสายพานลำเลียง เพื่อแยกชิ้นงานที่ เป็นโลหะ ออกจาก ชิ้นงานที่ไม่ใช่โลหะ โดยผู้เล่นจะเข้าใจถึงการทำงาน การควบคุมแบบ Manual และการควบคุมแบบ Automation เพื่อเป็นพื้นฐานไปสู่การเข้าใจ ระบบควบคุมอุตสาหกรรม Industrial Control System อีกทั้งยังก่อให้เกิดทักษะ กระตุ้นความคิด การคิดอย่างมีระบบ (System Thinking) ช่วยในการออกแบบและประยุกต์ใช้ วัสดุ, โครงสร้าง, เครื่องจักร, เครื่องมือ, ระบบ และ กระบวนการ
เงื่อนไข
- กำหนดค่าที่ต้องการนับ เพื่อให้สายพานหยุดในบรรทัดที่
- เมื่อ พร็อกซิมิตี้เซนเซอร์แบบ Inductive ตรวจจับชิ้นงานที่เป็นโลหะ (สามารถเลือกเปลี่ยนเป็นโฟโต้เซนเซอร์ด้วยการเปิดคอมเม้นในโค้ด)
- Arduino จะสั่งให้ชุดเคาเตอร์ Counter นับชิ้นงาน นับขึ้น
- Arduino จะสั่งให้อุปกรณ์ผลักชิ้นงาน Rejector ผลักชิ้นงานออก เพื่อการคัดแยก
- หากตรวจจับชิ้นงานได้ แต่ไม่ใช่โลหะ ชิ้นงาน จะไหลผ่านไปยังปลายสายพาน โดยจะไม่นับ
- เมื่อนับถึงค่าทึ่ตั้งไว้ในโปรแกรม ในที่นี้คือ 10 โปรแกรมจะหยุดรอ จนกว่าจะกดรีเซตบนบอร์ดอาดูโน่ สายพานจะกลับมาทำงานอีกครั้ง
อินพุทจาก เซนเซอร์
- ในชุดสำเร็จได้ติดตั้งพร็อกซิมิตี้เซนเซอร์แบบ Inductive อาศัยหลักการเปลี่ยนแปลงค่าความเหนี่ยวนำ ใช้เพื่อตรวจจับวัตถุที่เป็นโลหะ
- ผู้ใช้สามารถเลือกเปลี่ยนเป็นโฟโต้เซนเซอร์ด้วยการเปิดคอมเม้นในโค้ด โดยจะทำให้เซนเซอร์นับชิ้นงานทุกอย่างที่เคลื่อนผ่าน
เอาท์พุทเพื่อการนับการคัดแยกและการแสดงผล
- อุปกรณ์ผลักชิ้นงาน Rejector
- ชุด Counter แสดงผลนับ 7-Segment 4 หลัก
- เสาไฟทาวเวอร์แลมป์
โค้ด Arduino
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 |
#define enA 8 //ขาควบคุม L298 #define in1 6 //ขาควบคุม L298 #define in2 7 //ขาควบคุม L298 #define Lamp_R 10 //หลอดไฟสีแดง #define Lamp_Y 11 //หลอดไฟสีเหลือง #define Lamp_G 12 //หลอดไฟสีเขียว const int Injector_R1 = 5; //ต่อเข้ากับตัวผลักชิ้นงานหมายเลข1 int Sensor_Photo = 2; //Proximity Sensor int Sensor_Inductive = 3; // Metal Sensor int CounterUp = 4; //Analog Pin for Counter Up //int Reset_Counter = 9; //Digital Pin 9 for Reset Counter int SensorValue_1 = 0; int Output_Value = 0; int Count_Value = 0; int Flag_count = 1; int rotDirection = 0; //ตัวแปรกำหนดทิศทางการหมุนสายพาน int Counter_Target = 10; // ตั้งค่าที่จะนับชิ้นงาน เมื่อครบแล้วสั่งให้สายพานหยุด จนกว่าจะกดรีเซตที่บอร์ดอาดูโน่ void setup() { pinMode(enA, OUTPUT); pinMode(in1, OUTPUT); pinMode(in2, OUTPUT); pinMode(Lamp_R, OUTPUT); pinMode(Lamp_G, OUTPUT); pinMode(Lamp_Y, OUTPUT); pinMode(Injector_R1, OUTPUT); pinMode(CounterUp, OUTPUT); pinMode(Sensor_Photo, INPUT); pinMode(Sensor_Inductive, INPUT); //digitalWrite(Reset_Counter, HIGH); digitalWrite(CounterUp, HIGH); // Set initial rotation direction digitalWrite(in1, LOW); digitalWrite(in2, HIGH); Serial.begin(9600); delay(100); digitalWrite(Injector_R1, HIGH);// digitalWrite(Lamp_R, HIGH); // สั่งให้ไฟแดงดับ digitalWrite(Lamp_G, HIGH); //ไฟเขียวดับ digitalWrite(Lamp_Y, HIGH);// สั่งให้ไฟเหลืองดับ relay active low ON } void loop() { //*************************************************************************************************** int pwmOutput = 255; //set speed conveyor analogWrite(enA, pwmOutput); // ส่งสัญญาณ PWM 0-255 = 0-100% เพื่อควบคุมความเร็วสายพาน rotDirection = 1; // 0 = สายพานเคลื่อนไปทางซ้าย 1=สายพานเคลื่อนไปทางขวา if (rotDirection == 0) // สายพานเคลื่อนไปทางซ้าย { digitalWrite(in1, HIGH); digitalWrite(in2, LOW); } if (rotDirection == 1) // สายพานเคลื่อนไปทางขวา { digitalWrite(in1, LOW); digitalWrite(in2, HIGH); } //************************************************************************************************** //SensorValue_1 = digitalRead(Sensor_Photo);//โฟโต้เซนเซอร์ ถ้าใช้ให้เอาเครื่องหมาย // หน้าบรรทัดนี้ออก SensorValue_1 = digitalRead(Sensor_Inductive);//เซนเซอร์ตรวจจับโลหะ ถ้าใช้ให้เอาเครื่องหมาย // หน้าบรรทัดนี้ออก ถ้าไม่ใช้ให้ใส่// กลับเข้าไป if (SensorValue_1 == LOW) // sensor_1 เจอชิ้นงาน { if(Flag_count==0) { digitalWrite(Lamp_Y, LOW);//ไฟเหลืองติด digitalWrite(CounterUp, LOW);// ส่ง Logic 0 ไปยัง เคาท์เตอร์ เพื่อให้นับ delay(10); //หน่วงเวลาขาลง 100 Millisec digitalWrite(CounterUp, HIGH); delay(100); //หน่วงเวลา Count_Value++; Flag_count=1; resetcounter(); //วิธีการสั่งให้ตัวผลักทำงาน { digitalWrite(Lamp_Y, LOW); ////สั่งให้หลอดไฟเหลืองติดกะพริบ delay(1500); //หน่วงเวลาให้ชิ้นงานเคลื่อนไปถึงตัวผลัก 1000 = 1 วินาที digitalWrite(Injector_R1, LOW); //สั่งให้ตัวผลักชิ้นงานทำงาน delay(50); //หน่วงเวลาสักครู่ digitalWrite(Injector_R1, HIGH);//กลับมาสถานะเดิม digitalWrite(Lamp_Y , HIGH); ////สั่งให้หลอดไฟดับ } } } else //ไม่เจอชิ้นงาน { if(Flag_count==1) { Flag_count=0; digitalWrite(Lamp_Y, HIGH);// สั่งให้ไฟเหลืองดับ Serial.print("Count_Value = "); Serial.println(Count_Value); //Serial.print("nr"); delay(100); } } } void resetcounter() { if (Count_Value >= Counter_Target ) // แก้ไขจำนวนนับได้ที่จะให้ Reset { digitalWrite(Lamp_R, LOW);//นับครบจำนวนแล้วสั่งให้ไฟแดงติด digitalWrite(Lamp_Y, HIGH); //ไฟเหลืองดับ digitalWrite(Lamp_G, HIGH); //ไฟเขียวดับ analogWrite(enA, 0); // หยุดสายพาน while(1){} //หยุดรอจนกว่าจะกดรีเซต } } |
รีวิว
ยังไม่มีบทวิจารณ์