คำอธิบาย
AT420X ชุดเรียนรู้+ชุดทดลองตรวจจับคัดแยกโลหะและวัตถุสี Automation Metal+Color Red Green Sensor+Rejector+Relay+CodeReader
ระบบอัตโนมัติ หรือ Automation ประกอบด้วย Hardware และ Software ที่ทำงานร่วมกัน ให้สามารถควบคุมการทำงาน ของระบบเป็นไปแบบอัตโนมัติ ระบบอัตโนมัติ นั้นจะเกี่ยวข้องกับ ระบบควบคุม Control System รวมถึงวิศวกรรมแมคคาทรอนิกส์และหุ่นยนต์ เข้าใจถึงการทำงาน การควบคุมแบบ Manual และการควบคุมแบบ Automation เพื่อเป็นพื้นฐานไปสู่การเข้าใจ ระบบควบคุมอุตสาหกรรม Industrial Control System อีกทั้งยังก่อให้เกิดทักษะ กระตุ้นความคิด การคิดอย่างมีระบบ (System Thinking) ช่วยในการออกแบบและประยุกต์ใช้ วัสดุ, โครงสร้าง, เครื่องจักร, เครื่องมือ, ระบบ และ กระบวนการ
มีอะไรเตรียมไว้ให้ในชุด
- 1pcs x สายพานลำเลียง Conveyor DC12V
- 1pcs x บอร์ด Arduino Uno R3 Compatible CH340
- 3pcs x ชุดผลักชิ้นงานไฟฟ้าสเตปมอเตอร์ Electric Pusher Rejector DC12V
- 1pcs x เซนเซอร์ พร็อกซิมิตี้แบบ Inductive Proximity Sensor สำหรับตรวจจับโลหะ NPN
- 1pcs x เซ็นเซอร์ ตรวจจับสีแบบสีแดง สีเขียว Color Sensor NPN
- 1pcs x โมดูลอ่านโค้ด Scanner Code Reader Module SH4TTL
- 1pcs x บอร์ดรีเลย์ 5V-4CH
- 1pcs x Switching Power Supply DC12V
- 1pcs x สกรูเทอร์มินอล Screw Terminal สำหรับ Wiring สายไฟ
- 1pcs x ไฟแสดงผล LED Tower Light
- 1pcs x อุปกรณ์ติดตั้งฐาน Plastwood
การทดลอง
- ตรวจจับโลหะ + คัดแยกโลหะบนสายพานลำเลียง ด้วย Inductive Proximity Sensor
- ตรวจจับวัตถุสี สีแดง และ สีเขียว + คัดแยกวัตถุสีแดงและสีเขียวบนสายพานลำเลียง ด้วย Color Sensor
- Code Reader คัดแยก Code ที่ไม่เหมือนต้นแบบ (เปลี่ยน Code ที่ Arduino Source Code )
- การควบคุมมอเตอร์ สายพานลำเลียง ด้วยรีเลย์
- การควบคุมไฟแสดง LED Tower Light ด้วย รีเลย์
เงื่อนไข
- เมื่อ เซนเซอร์ พร็อกซิมิตี้แบบ Inductive Proximity Sensor ตรวจจับโลหะได้ Arduino จะสั่งให้อุปกรณ์ผลักชิ้นงาน Rejector 1 ผลักชิ้นงานออก เพื่อการคัดแยก พร้อมสั่งไฟแสดงผล LED Tower Lamp Red สีแดง
- หากชิ้นงานไม่ใช่โลหะ ชิ้นงานจะไหลผ่านไปยังปลายสายพาน
- เมื่อ เซนเซอร์ ตรวจจับสี Color Senor แบบสี ตรวจพบ วัตถุ สีเขียว Arduino จะสั่งให้อุปกรณ์ผลักชิ้นงาน Rejector 2 ผลักชิ้นงานออก เพื่อการคัดแยก พร้อมสั่งไฟแสดงผล LED Tower Lamp Green สีเขียว
- หากชิ้นงานเป็นสีอื่น ชิ้นงานจะไหลผ่านไปยังปลายสายพาน
- โมดูลอ่านโค้ด Scanner Code Reader Module SH4TTL
- เมื่อ ตรวจพบ ชิ้นงานที่งานที่มี Code 4444 จะสั่งให้อุปกรณ์ผลักชิ้นงาน Rejector ผลักชิ้นงานออก เพื่อการคัดแยก พร้อมสั่งไฟแสดงผล LED Tower Lamp Orange สีส้ม
- หากชิ้นงานที่ไม่มี Code 4444 ชิ้นงานจะไหลผ่านไปยังปลายสายพาน
เงื่อนไข 1 ชุดทดลองตรวจจับคัดแยก AT420X Proximity
เงื่อนไข 2 ชุดทดลองตรวจจับคัดแยก AT420X Color Senor
เงื่อนไข 3 ชุดทดลองตรวจจับคัดแยก AT420X Scanner CodeReader
อินพุท
- Digital Input D2, D3 เครื่องอ่านบาร์โค้ด โมดูลสแกนบาร์โค้ด Scanner Code Reader 1D-2D-QRCode Module SH4TTL
- เซนเซอร์
- Analog Input A0 เซนเซอร์ พร็อกซิมิตี้แบบ Inductive Proximity Sensor สำหรับตรวจจับโลหะ
- Analog Input A1 เซ็นเซอร์ ตรวจจับสีแบบสีแดง สีเขียว Color Sensor
เอาท์พุท
- Arduino Digital Output D9 ควบคุมอุปกรณ์ผลักชิ้นงาน Rejector 1
- Arduino Digital Output D8 ควบคุมอุปกรณ์ผลักชิ้นงาน Rejector 2
- Arduino Digital Output D7 ควบคุมอุปกรณ์ผลักชิ้นงาน Rejector 3
- บอร์ดรีเลย์ 5V-4CH
- Arduino Digital Output D10 ควบคุมมอเตอร์ สายพานลำเลียง ด้วย Relay
- Arduino Digital Output D11 ควบคุม ไฟแสดงผล LED สีแดง Tower Light ด้วย Relay
- Arduino Digital Output D12 ควบคุม ไฟแสดงผล LED สีเขียว Tower Light ด้วย Relay
- Arduino Digital Output D13 ควบคุม ไฟแสดงผล LED สีส้ม Tower Light ด้วย Relay
Wiring Diagram
โค้ด Arduino Source 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 |
// โปรแกรมนี้การทำงานคือ // เซนเซอร์ตรวจจับโลหะ เจอโลหะ ไฟสีแดงติด(11) ตัวผลักที่1 ทำงาน // เซนเซอร์ตรวจจับสี เจอสีแดง ไฟเหลืองติด(12) ตัวผลักที่2 ทำงาน // บาร์โค้ด เจอ รหัส 999 ไฟเขียวติด(13) ตัวผลักที่3 ทำงาน #include <SoftwareSerial.h> SoftwareSerial mySerial(2, 3); // RX, TX #define Rejector3 7 // ตัวผลักที่3 #define Rejector2 8 // ตัวผลักที่2 #define Rejector1 9 // ตัวผลักที่1 #define Conveyor 10 // ควบคุมสายพาน #define Lamp_Red 11 // ไฟสีแดง #define Lamp_Yellow 12 // ไฟสีแดง #define Lamp_Green 13 // ไฟสีแดง const int Sensor_Metal = A0; // ต่อเซนเซอร์เข้าที่ขา A0 const int Sensor_Color = A1; // ต่อเซนเซอร์เข้าที่ขา A1 int sensorValue1 = 0; int sensorValue2 = 0; int sensorValue3 = 0; int delay_Rejector1 = 3400; int delay_Rejector2 = 3700; int delay_Rejector3 = 4300; String inputString = ""; // ตัวแปรสำหรับเก็บค่าจากตัวแสกนเนอร์ String DataScanner = ""; //ตัวแปรสำหรับเก็บค่าในการประมวลผล bool stringComplete = false; // ตัวแปรเช็คว่ารับข้อมูลครบแล้วหรือยัง void setup() { // put your setup code here, to run once: pinMode(Sensor_Metal, INPUT_PULLUP); pinMode(Sensor_Color, INPUT_PULLUP); pinMode(Rejector1, OUTPUT); //กำหนด D11 เป็นเอาต์พุต pinMode(Rejector2, OUTPUT); //กำหนด D12 เป็นเอาต์พุต pinMode(Rejector3, OUTPUT); //กำหนด D13 เป็นเอาต์พุต pinMode(Conveyor, OUTPUT); //กำหนด D10 เป็นเอาต์พุต digitalWrite(Conveyor, HIGH); // สั่งลอจิก HIGH สายพานหยุด delay(500); pinMode(Lamp_Red, OUTPUT); //กำหนด D11 เป็นเอาต์พุต pinMode(Lamp_Yellow, OUTPUT); //กำหนด D12 เป็นเอาต์พุต pinMode(Lamp_Green, OUTPUT); //กำหนด D13 เป็นเอาต์พุต // ทดสอบ เอาต์พุต digitalWrite(Rejector1, HIGH); digitalWrite(Rejector2, HIGH); digitalWrite(Rejector3, HIGH); digitalWrite(Lamp_Red, HIGH); digitalWrite(Lamp_Yellow, HIGH); digitalWrite(Lamp_Green, HIGH); Serial.begin(9600); while (!Serial) { ; // wait for serial port to connect. Needed for native USB port only } // set the data rate for the SoftwareSerial port mySerial.begin(9600); } void loop() { // put your main code here, to run repeatedly: digitalWrite(Conveyor, LOW); // สั่งลอจิก Low สายพานหมุน //Serial.println(sensorValue); //delay(200); //************************************************************************************************************************************* sensorValue1 = digitalRead(Sensor_Metal); if(sensorValue1 == LOW) // ถ้าอ่านได้ลอจิก Low คือ Sensor 1 เจอชิ้นงานแล้ว { digitalWrite(Lamp_Red, LOW); // ไฟแดงติด delay(delay_Rejector1); // รอเวลาให้ชิ้นงานวิ่งไปใกล้ Rejector สามารถเปลี่ยนแปลงค่า delay_Rejector1 ให้เหมาะสมกับความเร็วสายพาน digitalWrite(Rejector1, LOW); // ส่ง Logic 0 เพื่อให้ Rejector ทำงาน เปรียบเสมือนการกดสวิตช์ delay(100); // หน่วงเวลาขาลง นาน 100ms digitalWrite(Rejector1, HIGH); // เซตสัญญาณกลับมาเป็น high เหมือนเดิม digitalWrite(Lamp_Red, HIGH); // ไฟแดงดับ } //************************************************************************************************************************************* sensorValue2 = digitalRead(Sensor_Color); if(sensorValue2 == LOW) // ถ้าอ่านได้ลอจิก Low คือ Sensor 1 เจอชิ้นงานแล้ว { digitalWrite(Lamp_Yellow, LOW); delay(delay_Rejector2); // รอเวลาให้ชิ้นงานวิ่งไปใกล้ Rejector สามารถเปลี่ยนแปลงค่า delay_Rejector1 ให้เหมาะสมกับความเร็วสายพาน digitalWrite(Rejector2, LOW); // ส่ง Logic 0 เพื่อให้ Rejector ทำงาน เปรียบเสมือนการกดสวิตช์ delay(100); // หน่วงเวลาขาลง นาน 100ms digitalWrite(Rejector2, HIGH); // เซตสัญญาณกลับมาเป็น high เหมือนเดิม digitalWrite(Lamp_Yellow, HIGH); } //************************************************************************************************************************************* //รอรับข้อมูลจากโมดูลแสกนบาร์โค้ด ที่ขา 2 if (mySerial.available()) { // get the new byte: char inChar = (char)mySerial.read(); // add it to the inputString: inputString += inChar; // if the incoming character is a newline, set a flag so the main loop can // do something about it: if (inChar == '\n') { //เมื่อรับตัวอักษร ขึ้นบรรทัดใหม่ แสดงว่าข้อมูลครบแล้ว stringComplete = true; //เซตแฟลก ว่าข้อมูลครับแล้ว DataScanner = String(inputString);//นำข้อมูลในอะเรย์มาใส่ในตัวแปร DataScanner แบบตัวอักษร } } // เริ่มเช็คว่ามีข้อมูลจากตัวแสกนเนอร์เข้ามาครบหรือยัง if (stringComplete) { if (DataScanner == "4444\r\n") // ข้อมูลตรงกับที่ตั้งไว้ ให้แสดงข้อความ OK { Serial.print("Data is "); Serial.print(DataScanner); Serial.println("OK"); digitalWrite(Lamp_Green, LOW); delay(delay_Rejector3); // รอเวลาให้ชิ้นงานวิ่งไปใกล้ Rejector สามารถเปลี่ยนแปลงค่า delay_Rejector1 ให้เหมาะสมกับความเร็วสายพาน digitalWrite(Rejector3, LOW); // ส่ง Logic 0 เพื่อให้ Rejector ทำงาน เปรียบเสมือนการกดสวิตช์ delay(100); // หน่วงเวลาขาลง นาน 100ms digitalWrite(Rejector3, HIGH); // เซตสัญญาณกลับมาเป็น high เหมือนเดิม digitalWrite(Lamp_Green, HIGH); } else if (DataScanner == "8888\r\n")// ข้อมูลไม่ตรงกับที่ตั้งไว้ { Serial.print("Data is "); Serial.print(DataScanner); Serial.println("NG"); } // เคลียร์ค่า เพื่อรอข้อมูลใหม่ inputString = ""; DataScanner = ""; stringComplete = false; } } |
1 |
รีวิว
ยังไม่มีบทวิจารณ์