คำอธิบาย
ตรวจจับ นับชิ้นงาน และคัดแยก โลหะบนสายพานลำเลียง 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 x สายพานลำเลียง CONV-30×06-DC24
- 1pcs x BDMC04 บอร์ดอาดุยโน่ Arduino Uno R3 Compatible DIP IC CH340+USB Cable
- 1pcs x SP8001 เซนเซอร์ตรวจจับวัตถุโฟโตอิเล็กทริกแบบอินฟราเรด Infrared Photoelectric Sensor M18 NPN-NO
- 1pcs x SI0809 เซนเซอร์ตรวจจับโลหะ Inductive Proximity Sensor Detection 08mm NPN NO M18 Tube LJ18A3-8-Z/BX BLUE/YELLOW
- 2pcs x BKBP08 อุปกรณ์ติดตั้งฐานยึด ขายึด ที่ยึด Sensor Bracket Mounting Proximity
- 1pcs x RJ0001 ชุดผลักชิ้นงานไฟฟ้าสเตปมอเตอร์ Electric Pusher Rejector 12VDC
- 1pcs x RY0504 บอร์ดรีเลย์ 4CH Active H/L Contact AC250V/10A
- 1set x ชิ้นงานทรงสี่เหลี่ยมลูกบาศก์ขนาด 3 เซนติเมตร โลหะสำหรับทดสอบ 1 เซต
- 1pcs x สกรูเทอร์มินอล Screw Terminal สำหรับ Wiring สายไฟ
- 1pcs x สวิตชิ่งพาวเวอร์ซัพพลาย 12V/10A + สายไฟ AC Power Cord
- 1pcs x CTPD04 เครื่องนับจำนวน ดิจิตอลเคาท์เตอร์ Preset Digital Counter 6DGT9C1PRS485
- อุปกรณ์ติดตั้งฐาน Plastwood
- กล่องกระบะพลาสติก ฉากยึด + สายไฟ
หลักการทำงาน
ชุดทดลองคัดแยกโลหะบนสายพานลำเลียง เพื่อแยกชิ้นงานที่ เป็นโลหะ ออกจาก ชิ้นงานที่ไม่ใช่โลหะ โดยผู้เล่นจะเข้าใจถึงการทำงาน การควบคุมแบบ Manual และการควบคุมแบบ Automation เพื่อเป็นพื้นฐานไปสู่การเข้าใจ ระบบควบคุมอุตสาหกรรม Industrial Control System อีกทั้งยังก่อให้เกิดทักษะ กระตุ้นความคิด การคิดอย่างมีระบบ (System Thinking) ช่วยในการออกแบบและประยุกต์ใช้ วัสดุ, โครงสร้าง, เครื่องจักร, เครื่องมือ, ระบบ และ กระบวนการ
เงื่อนไข
- กำหนดค่าที่ต้องการนับ เพื่อให้สายพานหยุด
- เมื่อ พร็อกซิมิตี้เซนเซอร์แบบ Inductive ตรวจจับชิ้นงานที่เป็นโลหะ
- Arduino จะสั่งให้อุปกรณ์ผลักชิ้นงาน Rejector ผลักชิ้นงานออก เพื่อการคัดแยก
- หากตรวจจับชิ้นงานได้ แต่ไม่ใช่โลหะ ชิ้นงาน จะไหลผ่านไปยังปลายสายพาน
- Arduino จะสั่งให้ชุดเคาเตอร์ Counter นับชิ้นงาน นับขึ้น
- เมื่อนับถึงค่าทึ่ตั้งไว้ในโปรแกรม ในที่นี้คือ 10 โปรแกรมจะหยุดรอ จนกว่าจะกดรีเซตบนบอร์ดอาดูโน่ สายพานจะกลับมาทำงานอีกครั้ง
อินพุทจาก เซนเซอร์
- ในชุดสำเร็จได้ติดตั้งพร็อกซิมิตี้เซนเซอร์แบบ Inductive อาศัยหลักการเปลี่ยนแปลงค่าความเหนี่ยวนำ ใช้เพื่อตรวจจับวัตถุที่เป็นโลหะ
- ผู้ใช้สามารถเลือกเปลี่ยนเป็นโฟโต้เซนเซอร์ด้วยการเปิดคอมเม้นในโค้ด โดยจะทำให้เซนเซอร์นับชิ้นงานทุกอย่างที่เคลื่อนผ่าน
เอาท์พุทเพื่อการนับการคัดแยกและการแสดงผล
- อุปกรณ์ผลักชิ้นงาน Rejector
- ชุด Counter แสดงผลนับ 7-Segment 6 หลัก
Wiring Diagram

Arduino Source Code
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;
}
}
}
วิดีโอการทำงาน





รีวิว
ยังไม่มีบทวิจารณ์