คำอธิบาย
ตรวจจับ นับชิ้นงาน และคัดแยก โลหะบนสายพานลำเลียง Automation Metal Detector + Counter + Rejector + LED Towler Light
ระบบอัตโนมัติ หรือ 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 RY0518 บอร์ดรีเลย์ 8CH Active H/L Contact AC250V/10A
- 1set x ชิ้นงานทรงสี่เหลี่ยมลูกบาศก์ขนาด 3 เซนติเมตร โลหะสำหรับทดสอบ 1 เซต
- 1pcs x สกรูเทอร์มินอล Screw Terminal สำหรับ Wiring สายไฟ
- 1pcs x สวิตชิ่งพาวเวอร์ซัพพลาย + สายไฟ AC Power Cord
- 1pcs x CTPD04 เครื่องนับจำนวน ดิจิตอลเคาท์เตอร์ Preset Digital Counter 6DGT9C1PRS485
- 1pcs x LTDU01 ไฟสัญญาณเตือนแสดงสถานะทาวเวอร์ไลท์ LED Tower Light Lamp BEM-X-50-3T-D DC12-24V LED Red, Yellow, Green
- อุปกรณ์ติดตั้งฐาน Plastwood
- กล่องกระบะพลาสติก ฉากยึด + สายไฟ
หลักการทำงาน
- ชุดทดลองคัดแยกโลหะบนสายพานลำเลียง เพื่อแยกชิ้นงานที่ เป็นโลหะ ออกจาก ชิ้นงานที่ไม่ใช่โลหะ โดยผู้เล่นจะเข้าใจถึงการทำงาน การควบคุมแบบ Manual และการควบคุมแบบ Automation เพื่อเป็นพื้นฐานไปสู่การเข้าใจ ระบบควบคุมอุตสาหกรรม Industrial Control System อีกทั้งยังก่อให้เกิดทักษะ กระตุ้นความคิด การคิดอย่างมีระบบ (System Thinking) ช่วยในการออกแบบและประยุกต์ใช้ วัสดุ, โครงสร้าง, เครื่องจักร, เครื่องมือ, ระบบ และ กระบวนการ
เงื่อนไข
- กำหนดค่าที่ต้องการนับ เพื่อให้สายพานหยุด
- เมื่อ พร็อกซิมิตี้เซนเซอร์แบบ Inductive ตรวจจับชิ้นงานที่เป็นโลหะ (สามารถเลือกเปลี่ยนเป็นโฟโต้เซนเซอร์ด้วยการเปิดคอมเม้นในโค้ด)
- Arduino จะสั่งให้ชุดเคาเตอร์ Counter นับชิ้นงาน นับขึ้น
- Arduino จะสั่งให้อุปกรณ์ผลักชิ้นงาน Rejector ผลักชิ้นงานออก เพื่อการคัดแยก
- หากตรวจจับชิ้นงานได้ แต่ไม่ใช่โลหะ ชิ้นงาน จะไหลผ่านไปยังปลายสายพาน โดยจะไม่นับ
- เมื่อนับถึงค่าทึ่ตั้งไว้ในโปรแกรม ในที่นี้คือ 10 โปรแกรมจะหยุดรอ จนกว่าจะกดรีเซตบนบอร์ดอาดูโน่ สายพานจะกลับมาทำงานอีกครั้ง
อินพุทจากเซนเซอร์
- ในชุดสำเร็จได้ติดตั้งพร็อกซิมิตี้เซนเซอร์แบบ Inductive อาศัยหลักการเปลี่ยนแปลงค่าความเหนี่ยวนำ ใช้เพื่อตรวจจับวัตถุที่เป็นโลหะ
- ผู้ใช้สามารถเลือกเปลี่ยนเป็นโฟโต้เซนเซอร์ด้วยการเปิดคอมเม้นในโค้ด โดยจะทำให้เซนเซอร์นับชิ้นงานทุกอย่างที่เคลื่อนผ่าน
เอาท์พุทเพื่อการนับการคัดแยกและการแสดงผล
- อุปกรณ์ผลักชิ้นงาน Rejector
- ชุด Counter แสดงผลนับ 7-Segment
- เสาไฟทาวเวอร์แลมป์
Wiring Diagram

- Wiring Diagram V2013 https://oshwlab.com/s2insupply/480automationconveyor50-tower
- Wiring Diagram V2014 https://oshwlab.com/s2insupply/at480-automationconveyor50-towerlight2024
Arduino Source Code
const int Sensor1 = 2; // ต่อเซนเซอร์ตัวที่ 1 ตรวจจับโลหะ
const int Sensor2 = 3; // ต่อเซนเซอร์ตัวที่ 2 โฟโต้เซนเซอร์
const int Reject = 8; // สั่งตัวผลักชิ้นงาน
const int Counter = 9; // สั่งเคาท์เตอร์นับ
const int LEDY = 10; // สั่งไฟสี เหลือง
const int LEDG = 11; // สั่งไฟสี เขียว
const int LEDR = 12; // สั่งไฟสี แดง
const int Conveyor = 13; // สั่งสายพาน
//เมื่อเซนเซอร์เจอชิ้นงาน จะหน่วงเวลาให้ชิ้นงานเคลื่อนที่ถึงตัวผลัก แล้วสั่งให้ตัวผลักทำงาน
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);
pinMode(LEDR, OUTPUT);
pinMode(LEDG, OUTPUT);
pinMode(LEDY, OUTPUT);
// set initial state
digitalWrite(Reject, HIGH); // High คือไม่ผลัก
digitalWrite(Conveyor, HIGH);// High คือสายพานหยุด
digitalWrite(Counter, HIGH);// High คือไม่นับ
digitalWrite(LEDR, HIGH); // เสาไฟ หลอดสีแดง ดับ
digitalWrite(LEDG, HIGH);// เสาไฟ หลอดสีเขียว ดับ
digitalWrite(LEDY, HIGH);// เสาไฟ หลอดสีเหลือง ดับ
Serial.begin(9600);
digitalWrite(Conveyor, LOW); // ส่ง Low สั่งให้รีเลย์ทำงานจ่ายไฟให้สายไฟหมุน
}
void loop() {
// *****************************************************************************************************************************************************************
digitalWrite(LEDG, 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;
digitalWrite(LEDR, LOW); // เสาไฟ หลอดสีแดง ติดสว่าง
}
}
}
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); // กลับมาสถานะเดิม
}
}
}
lastButton_State2 = reading2;
//*****************************************************************************************************************************************************************
if(State_Reject == 1)
{
delay(10);
count_delay++;
if(count_delay>250)
{
count_delay=0;
State_Reject = 2;
digitalWrite(LEDR, HIGH); // เสาไฟ หลอดสีแดง ดับ
}
}
else if(State_Reject == 2)
{
delay(10);
digitalWrite(Reject, LOW); // สั่งให้ตัวผลักชิ้นงานทำงาน
digitalWrite(LEDY, 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;
digitalWrite(LEDY, HIGH);// เสาไฟ หลอดสีเหลือง ดับ
}
}
//*******************************************************************************************
if (Number >= Target_Number)
{
digitalWrite(Conveyor, HIGH);// High คือสายพานหยุด
}
// else
// {
// digitalWrite(Conveyor, LOW); // ส่ง Low สั่งให้รีเลย์ทำงานจ่ายไฟให้สายไฟหมุน
// }
//************************************************************************************************
}





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