ผู้เขียนบทความ : นางสาวพนาวัน มุสิเกตุ CoE#15
คณะวิศวกรรมศาสตร์ : สาขาวิศวกรรมคอมพิวเตอร์
วิชา : 04-513-201 การโปรแกรมคอมพิวเตอร์ขั้นสูง1/2566
1.ความเป็นมา
ในการเกิดอุบัติเหตุบริเวณทางเสมอระดับทางรถไฟ-รถยนต์ทุกครั้งทําให้การรถไฟฯ และผู้ขับขี่ยานพาหนะได้รับความเสียหายทั้งชีวิตและทรัพย์สินเป็นอย่างมาก และการเกิดอุบัติเหตุ ในแต่ละครั้งจะต้องปิดการเดินรถ ซึ่งส่งผลให้ขบวนรถต้องเสียเวลาและเป็นเหตุให้ผู้โดยสารและประชาชนทั่วไปได้รับความเดือดร้อนในการเดินทางเป็นอย่างมาก สาเหตุเกิดจากผู้ขับขี่ ยานพาหนะเกิดความประมาทและไม่ปฏิบัติตาม พรบ.จราจรทางบก พ.ศ.2522 มาตรา 57, 62, 63 และกฏหมายที่เกี่ยวข้องกล่าวคือ การสร้างถนนตัดผ่านทางรถไฟเสมอระดับ ผู้ขับขี่ยานพาหนะจะ ต้องหยุดห่างจากทางรถไฟไม่น้อยกว่า 5 เมตร และหยุดรถให้สนิทมองซ้าย-ขวาก่อนจะข้ามทางรถไฟไม่ว่าจะมีเครื่องกั้นถนนหรือไม่ เมื่อเห็นว่าไม่มีรถไฟจึงขับรถผ่านไปได้เพื่อความปลอดภัยในชีวิตและทรัพย์สินของท่านและของการรถไฟฯ ดังนั้นทางคณะผู้จัดทําจึงได้ตระหนัก และเล็งเห็นความจําเป็นที่จะต้องหาหนทางในการแก้ไขโดยใช้อุปกรณ์ตรวจการเคลื่อนไหวในการตรวจจับความเคลื่อนไหวของรถไฟที่วิ่งเข้ามาใกล้บริเวณถนนข้ามทางรถไฟ ซึ่งอุปกรณ์ตรวจจับความเคลื่อนไหวจะส่งสัญญาณไปยังไมโครคอนโทรเลอร์เพื่อประมวลผลของ การเคลื่อนไหว ไมโครคอนโทรเลอร์ก็จะส่งสัญญาณไปที่ตัวรับสัญญาณ ซึ่งจะติดตั้งไว้ที่บริเวณ ถนนข้ามทางรถไฟ เพื่อเตือนให้ผู้ขับขี่ยานพาหนะได้ทราบ
2.วัตถุประสงค์
1. เพื่อศึกษาระบบการทํางานของไมโครคอนโทรลเลอร์
2. เพื่อศึกษาการทํางานของอุปกรณ์ตรวจจับความเคลื่อนไหว
3.เพื่อศึกษาการเขียนโปรแกรมควบคุมระบบการทํางานของเครื่องเตือนรถไฟในบริเวณทางข้ามรถไฟโดยใช้ไมโครคอนโทรลเลอร์
3.ขอบเขตการทำงาน
- เก็บรวมรวมข้อมูลการเกิดอุบัติเหตุบริเวณถนนข้ามทางรถไฟตั้งแต่พ.ศ. 2536-2548
- ออกแบบระบบการทํางานของชุดตรวจจับรถไฟและตําแหน่งการวางของตัว อุปกรณ์
ตรวจจับความเคลื่อนไหว - ออกแบบระบบแจ้งเตือนผู้ใช้ถนนโดยใช้สัญญาณเสียงแจ้งเตือนและระบบไม้กั้น
- เขียนโปรแกรมควบคุมการทํางานอุปกรณ์ตรวจจับความเคลื่อนไหว และอุปกรณ์แจ้ง
เตือนผู้ใช้ถนน โดยให้การทํางานทั้งหมดเป็นแบบอัตโนมัติ - ออกแบบวงจรเชื่อมต่อระหว่างตัวอุปกรณ์ตรวจจับความเคลื่อนไหว,ระบบ
ไม้กั้นรถไฟและสัญญาณแจ้งเตือน - สร้างอุปกรณ์ต้นแบบทั้งหมดและทดสอบเพื่อให้ได้ตามวัตถุประสงค์
4.ประโยชน์ที่คาดว่าจะได้รับ
- ทราบถึงหลักการทํางานของไมโครคอนโทลเลอร์
- ทราบถึงหลักการทํางานของการรับส่งข้อมูลแบบไร้สาย
- สามารถนําไปใช้เตือนบริเวณทางข้ามรถไฟ
5.ความรู้ที่เกี่ยวข้อง
1. ระบบรถไฟ : ความเข้าใจเกี่ยวกับโครงสร้างและการทำงานของระบบรถไฟ เช่น รางรถไฟ รถไฟ สถานี และสัญญาณแสง
2. ความปลอดภัยและความเสี่ยง : การทราบเรื่องความปลอดภัยในระบบรถไฟและความเสี่ยงที่อาจเกิดขึ้น เช่น อุบัติเหตุ ความรุนแรง และวิธีการป้องกัน
3. การควบคุมการจราจร : ความเข้าใจถึงระบบควบคุมการจราจรทางรถไฟ เช่น การใช้สัญญาณแสง การควบคุมทางรถไฟและระบบไม้กั้น
4. เทคโนโลยี : ความรู้เกี่ยวกับเทคโนโลยีที่ใช้ในระบบรถไฟ เช่น เทคโนโลยีการสื่อสาร ระบบควบคุมอัตโนมัติ และเซนเซอร์
5. การบำรุงรักษาและการดูแล : การเรียนรู้เกี่ยวกับการบำรุงรักษาและการดูแลรักษาระบบรถไฟ เพื่อให้ระบบทำงานอย่างมีประสิทธิภาพและปลอดภัย
6. กฎหมายและข้อกำหนด : การทราบกฎหมายและข้อกำหนดที่เกี่ยวข้องกับระบบรถไฟ เช่น ข้อกำหนดเกี่ยวกับความปลอดภัยและการรับรองมาตรฐาน
7. การพัฒนาระบบ : ความเข้าใจเกี่ยวกับกระบวนการการพัฒนาระบบรถไฟและการปรับปรุงระบบให้มีประสิทธิภาพและความปลอดภัย
8. การสื่อสาร : การสื่อสารระหว่างผู้ควบคุมระบบรถไฟและคนขับรถไฟผ่านระบบการสื่อสารเพื่อประสานงานและควบคุมการจราจร
9. การบริหารจัดการโครงการ : การบริหารจัดการโครงการระบบรถไฟ เช่น การวางแผน การจัดทำงบประมาณ และการควบคุมคุณภาพโครงการ
10. การอนุรักษ์สิ่งแวดล้อม : การพิจารณาและการดำเนินการเพื่อลดผลกระทบต่อสิ่งแวดล้อมจากการทำงานของระบบรถไฟ
6.หลักการทำงาน

6.1 Sensor IR
เซ็นเซอร์แสงอินฟราเรดใช้ในการตรวจจับวัตถุโดยใช้การส่งและรับความเข้มของแสงอินฟราเรด แบ่งเป็น IR Reflective Sensor (เซ็นเซอร์ที่ต้องการสิ่งที่จะสะท้อนแสงกลับมา) และ IR Proximity Sensor (เซ็นเซอร์ที่ตรวจจับระยะห่างจากวัตถุตามการเปลี่ยนแปลงความเข้มของแสง)
6.2 ESP32
ESP32 คือบอร์ดพัฒนาที่มีความสามารถในการเชื่อมต่อ Wi-Fi และ Bluetooth ทำให้เหมาะสำหรับโปรเจกต์ IoT มีไมโครคอนโทรลเลอร์ 32 บิต, GPIO สามารถกำหนดให้ทำงานต่าง ๆ ได้, มี Analog-to-Digital Converter (ADC) สามารถแปลงสัญญาณแอนะล็อกเป็นดิจิทัลได้. รองรับโหมด Low Power สำหรับการประหยัดพลังงาน, สามารถทำงานกับ Arduino IDE, PlatformIO หรือ ESP-IDF ในการพัฒนาโปรแกรม, รองรับการอัปเดตผ่านทางอินเทอร์เน็ต (OTA), มี Real-Time Operating System (RTOS) สามารถจัดการงานพร้อมกัน, มีตัวควบคุมพลังงานในตัว, รองรับการเชื่อมต่อ USB, I2C, SPI, UART ทำให้เป็นเครื่องมือที่มีความหลากหลายสำหรับโปรเจกต์ IoT และอื่น ๆ ที่ต้องการความยืดหยุ่นและประสิทธิภาพสูง
6.3 Buzzer
บอร์ด Buzzer เป็นอุปกรณ์เสริมที่ใช้ในการสร้างเสียงหรือเสียงประทับในโปรเจกต์อิเล็กทรอนิกส์และการพัฒนา การทำงานของ Buzzer คือการส่งสัญญาณไฟฟ้าไปยังหน้าต่างของ Buzzer ซึ่งทำให้เกิดการสั่นของแผ่นที่ติดอยู่ภายใน Buzzer ผลให้เกิดเสียง
6.4 L298N
บอร์ด L298N เป็นตัวขับมอเตอร์ที่ใช้ควบคุมมอเตอร์ DC และมอเตอร์สเต็ปได้ มีความสามารถในการควบคุมทิศทางการหมุน สามารถใช้กับ Arduino หรือบอร์ดควบคุมอื่น ๆ ในโปรเจกต์อิเล็กทรอนิกส์
6.5 Motor gear DC
บอร์ด Motor Gear DC ทำหน้าที่ควบคุมการทำงานของมอเตอร์แบบ DC ในโปรเจกต์อิเล็กทรอนิกส์ โดยให้ความสามารถในการปรับแต่งประสิทธิภาพของมอเตอร์ เช่น ลดความเร็วหรือเพิ่มแรงบิด เพื่อให้เหมาะกับความต้องการของโปรเจกต์ บอร์ดนี้สามารถใช้กับมอเตอร์ที่มีการหมุนแบบต่าง ๆ และมักมีส่วนประกอบที่ช่วยในกระบวนการเพิ่มประสิทธิภาพ เช่น ล้อเฟืองหรือเกียร์. การใช้บอร์ด Motor Gear DC ช่วยให้การควบคุมมอเตอร์เป็นไปอย่างมีประสิทธิภาพและหลากหลายตามความต้องการของโปรเจกต์
7.Code
#include <Buzzer.h>
Buzzer buzzer(13); // Create a Buzzer instance on pin 13
const int irSensorPin = 21; // IR sensor pin
const int motorDirection1 = 14; // Replace with the appropriate GPIO pin
const int motorDirection2 = 12; // Replace with the appropriate GPIO pin
const int motorRunDuration = 200; // Motor run duration in milliseconds
const int buzzerDuration = 4000; // Buzzer duration in milliseconds
const int buzzerPin =13; // ให้เลือกหมายเลขขาที่ต่อกับบัซเซอร์
boolean gateOpen = false;
unsigned long gateOpenStartTime = 0;
unsigned long buzzerStartTime = 0;
boolean buzzerActive = false;
void setup() {
pinMode(irSensorPin, INPUT);
pinMode(motorDirection1, OUTPUT);
pinMode(motorDirection2, OUTPUT);
Serial.begin(115200); // Initialize serial communication
buzzer.begin(0); // Initialize the buzzer
}
void loop() {
static int irSensorState = LOW; // เก็บสถานะปัจจุบันของเซนเซอร์ IR
int currentIRState = digitalRead(irSensorPin); // อ่านสถานะปัจจุบันของเซนเซอร์ IR
if (currentIRState == LOW && irSensorState == HIGH) {
// IR ไม่เห็นวัตถุเมื่อเปลี่ยนจาก HIGH เป็น LOW
openGate();
buzzerStartTime = millis(); // เริ่มติดตามเวลาของบัซเซอร์
buzzerActive = true;
}
if (buzzerActive) {
playBuzzerTone();
if (currentIRState == HIGH) {
// หยุดร้องเมื่อมีวัตถุ
buzzerActive = false;
analogWrite(buzzerPin, 0); // ปิดบัซเซอร์
delay(250); // รอเพื่อความปลอดภัยเพื่อหยุดเสียงบัซเซอร์
closeGate(); // ปิดประตูหลังจากที่บัซเซอร์เสร็จแล้ว
}
}
irSensorState = currentIRState; // อัปเดตสถานะของเซนเซอร์ IR
Serial.println(gateOpen ? "Open" : "Closed");
}
void openGate() {
digitalWrite(motorDirection1, HIGH);
digitalWrite(motorDirection2, LOW);
gateOpen = true;
gateOpenStartTime = millis();
while (millis() - gateOpenStartTime < motorRunDuration) {
// Run the motor
}
digitalWrite(motorDirection1, LOW);
digitalWrite(motorDirection2, LOW);
Serial.println("Gate opened");
}
void closeGate() {
digitalWrite(motorDirection1, LOW);
digitalWrite(motorDirection2, HIGH);
gateOpen = false;
gateOpenStartTime = millis();
while (millis() - gateOpenStartTime < motorRunDuration) {
// Motor is active
}
digitalWrite(motorDirection1, LOW);
digitalWrite(motorDirection2, LOW);
Serial.println("Gate closed");
}
void playBuzzerTone() {
if (millis() - buzzerStartTime < 5000) { // Play the buzzer for 5 seconds
analogWrite(buzzerPin, 128); // ค่าความสว่าง 0-255
delay(250); // ปิดเสียงนาฬิกา
analogWrite(buzzerPin, 0); // ปิดบัซเซอร์
delay(250); // สร้างระยะเวลาเสียง
} else {
analogWrite(buzzerPin, 0); // ค่าความสว่าง 0 (ปิดบัซเซอร์)
buzzerActive = false;
}
}
8.สรุปผลการทำงาน

การทดลองการตรวจจับรถไฟทำงานได้อย่างมีประสิทธิภาพและแม่นยำตรงตามเงื่อนไขที่กำหนด ตามที่ทดลองได้แก่ 1.Sensor IR ตรวจจับวัตถุได้อย่างแม่นยำ
2.L298N รับค่าจาก ESP32 ได้ตามที่กำหนดไว้
3.Motor gear DC หมุนเปิด-ปิดได้ตามที่ต้องการ