การทำเลย์เอาต์รถไฟโมเดลเป็นงานอดิเรกที่เจ๋งมาก แต่ถ้าได้ทำให้มันอัตโนมัติล่ะก็...มันจะเจ๋งกว่าเดิมอีกหลายเท่า! มาดูกันดีกว่าว่ามันมีข้อดีอะไรบ้าง:
- ต้นทุนต่ำเวอร์: ระบบทั้งหมดควบคุมด้วยบอร์ดไมโครคอนโทรลเลอร์ Arduino ใช้ไดรเวอร์มอเตอร์ L298N ราคาเมื่อเทียบกับชุดควบคุมรถไฟแบบดั้งเดิมแล้วถือว่า "ถูกเกิ๊น"
- เหมาะสำหรับจัดแสดง: เพราะระบบมันอัตโนมัติ ไม่ต้องมีคนมานั่งกดปุ่มควบคุมตลอดเวลา เหมาะมากสำหรับการตั้งโชว์ในงานที่เราไม่สามารถอยู่เฝ้าได้ตลอด
- โปรเจกต์ปังสำหรับนักเล่นไมโครคอนโทรลเลอร์: ถ้าน้องเป็นหรืออยากเริ่มเล่น Arduino กับเขียนโปรแกรม นี่คือโปรเจกต์ที่เหมาะจะเอามาฝึกสกิลสุดๆ
ถ้าสนใจ น้องลองไปดูเวอร์ชั่นก่อนหน้าของโปรเจกต์นี้ก็ได้นะ มันจะง่ายกว่านี้อีกนิดนึง (เป็นเวอร์ชั่น 1.0)
เอาล่ะ พูดเยอะแล้ว มาเริ่มกันเลยดีกว่า!
ขั้นตอนที่ 1: ดูคลิปโปรเจกต์พี่ทำงานก่อน
ขั้นตอนที่ 2: เตรียมอุปกรณ์ทั้งหมดให้ครบ
เริ่มต้นด้วยการเช็คให้ชัวร์ว่ามีของเหล่านี้ครบ:
- บอร์ดไมโครคอนโทรลเลอร์ Arduino (แนะนำเป็น UNO)
- บอร์ดไดรเวอร์มอเตอร์ L298N แบบ Dual H-Bridge
- จัมเปอร์ไวร์ แบบผู้-ผู้ 6 เส้น
- จัมเปอร์ไวร์ แบบผู้-เมีย 7 เส้น
- ไขควง
- อแดปเตอร์ไฟเลี้ยง 12V DC
- รางรถไฟที่มีเซนเซอร์วัดระยะอินฟราเรด (IR Proximity Sensor) ติดอยู่ด้านล่าง (พี่ใช้ราง Kato S62)
ขั้นตอนที่ 3: อัพโหลดโปรแกรมลงบอร์ด Arduino
ดาวน์โหลด Arduino IDE มาไว้ในคอมถ้ายังไม่มี จากนั้นก็ดาวน์โหลดและเปิดไฟล์โปรแกรมที่ให้ไว้
ขั้นตอนที่ 4: วางรางและจัดเลย์เอาต์
ทำรางเป็นวงรีที่มีทางหลบ (Passing Siding) ประมาณตามรูปด้านบน ให้แน่ใจว่าระยะห่างระหว่างรางเซนเซอร์กับทางแยกแรกที่รถไฟจะผ่านหลังจากออกจากเซนเซอร์นั้น "ยาวกว่ารถไฟขบวนหนึ่ง" เพื่อให้ไม่มีส่วนไหนของขบวนรถไฟทับอยู่บนรางเซนเซอร์ตอนที่มันกำลังผ่านทางแยก
ขั้นตอนที่ 5: ดูแผนผังวงจรช่วยชีวิต

ห้ามข้าม! ดูแผนผังวงจรและรายละเอียดทั้งหมดให้เข้าใจก่อนลงมือต่อสาย
ขั้นตอนที่ 6: ต่อทางแยก (Turnout) เข้ากับขาออกของบอร์ด L298N
นำสายสีแดงและสีดำของทางแยกทั้งสอง ต่อเข้าด้วยกันตามสี (แดงต่อกับแดง, ดำต่อกับดำ) แบบขนาน จากนั้นนำปลายสายสีแดงที่รวมกันแล้วไปต่อกับขา OUT4 และสายสีดำไปต่อกับขา OUT3 ของบอร์ดไดรเวอร์มอเตอร์
ขั้นตอนที่ 7: ต่อรางจ่ายไฟ (Power Feeder Track) เข้ากับขาออกที่เหลือของบอร์ดขับมอเตอร์ L298N
ต่อสายสีขาวของรางจ่ายไฟเข้ากับขา out1 และสายสีน้ำเงินเข้ากับขา out2 ของบอร์ดขับมอเตอร์เลยจ้า
ขั้นตอนที่ 8: ต่อบอร์ดขับมอเตอร์ L298N เข้ากับขาจ่ายไฟของบอร์ด Arduino
ต่อขา 12V ของบอร์ดขับมอเตอร์เข้ากับขา VIN ของ Arduino, ขา GND ต่อกับ GND ของ Arduino และแนะนำให้ต่อขา 5V ของบอร์ดขับมอเตอร์เข้ากับขา 5V ของ Arduino ด้วยนะ
ขั้นตอนที่ 9: ต่อเซ็นเซอร์เข้ากับบอร์ด Arduino
ต่อขา VCC ของเซ็นเซอร์เข้ากับขา 5V ของ Arduino, ขา GND ต่อกับ GND ของ Arduino และขา OUT ต่อเข้ากับขา A0 ของ Arduino
ขั้นตอนที่ 10: ต่อขาอินพุตของบอร์ดขับมอเตอร์เข้ากับบอร์ด Arduino
ต่อขาดิจิตอลของ Arduino เข้ากับขาอินพุตของบอร์ดขับมอเตอร์ตามนี้เลย:
- D9 ต่อกับ IN1
- D10 ต่อกับ IN2
- D11 ต่อกับ IN3
- D12 ต่อกับ IN4
ขั้นตอนที่ 11: วางรถไฟลงบนราง
หลังจากตรวจสอบการต่อสายทั้งหมดแล้ว ก็วางรถไฟลงบนรางสับ (siding) ได้เลย
ขั้นตอนที่ 12: เปิดไฟเลี้ยงระบบ
เปิดไฟเลี้ยงระบบแล้วเช็คให้แน่ใจว่ารางสับเปลี่ยนทิศทางไปที่ทางหลบ ถ้าไม่เปลี่ยนก็แค่สลับสายของรางสับที่ต่อกับบอร์ดขับมอเตอร์ก็พอ แล้วก็ดูด้วยว่ารถไฟเริ่มเคลื่อนที่ไปข้างหน้าหรือเปล่า ถ้ามันวิ่งผิดทางก็ให้สลับสายของรางจ่ายไฟที่ต่อกับบอร์ดขับมอเตอร์นะ อย่าเพิ่งช็อตนะตัวนี้!
ขั้นตอนที่ 13: เสร็จแล้ววว!
โปรเจคนี้ก็เสร็จสมบูรณ์แล้วสำหรับตอนนี้ จัดไปวัยรุ่น! น้องสามารถไปแกะโค้ด Arduino เพื่อเปลี่ยนการทำงานของเลย์เอาท์, เพิ่มรางสับอีก ฯลฯ ได้ตามใจชอบเลย มันปรับแต่งได้หมด! สู้งานนะน้อง
รายละเอียดเทคนิคเพิ่มเติม
นอกเหนือจากเรื่องระยะห่างรางมาตรฐานแล้ว ระบบรางสับอัตโนมัติ (Automated Passing Siding) นี้แก้ปัญหาทางเรขาคณิตเฉพาะในวงการรถไฟโมเดล นั่นคือลูปรางเดี่ยวที่มีรถไฟสองขบวนวิ่งสวนทางกัน ระบบจะต้องตรวจจับการชนแบบหัวชนหัวที่อาจเกิดขึ้นได้อัตโนมัติ, สับรางให้ขบวนหนึ่งเข้าไปในรางข้าง, จอดรอ, แล้วปล่อยออกมาหลังจากที่ขบวนด่วนวิ่งผ่านไปแล้ว
ระบบลอจิกแบบหลายขั้นตอน (Multi-Stage Boolean Logic)
เจ้า Arduino เนี่ย มันทำหน้าที่เป็นเหมือนศูนย์ควบคุมหลักเลยแหละ ใช้ตัวแปรบูลีน (boolean) ในการจดจำสถานะต่างๆ ที่ซับซ้อนสุดๆ
- เซนเซอร์ตรวจจับขบวนรถเข้าใกล้: เราเอา Reed Switch หรือเซนเซอร์ Hall Effect ไปติดไว้ก่อนถึงรางแยกประมาณ 3 ฟุต
bool Train1_Approaching = true;(แม่เหล็กที่ติดใต้รถไฟจะมากระตุ้นเซนเซอร์)- ระบบลอจิกจะมาตรวจสอบสถานะของรางหลัก:
if (Main_Track_Occupied == true) { Route_To_Siding(); } - การสับราง: Micro Servo จะเป็นตัวดันกลไกรางแยกให้เลี้ยวซ้าย จากนั้น Arduino จะสั่งให้รีเลย์ตัดไฟ 12V DCC ที่จ่ายให้รางสาขาพอดี สุดยอด! ขบวนที่ 1 ติดแหง็ก!
การปลดล็อครางหลัก
ขบวนที่ 2 (ที่อยู่บนรางหลัก) ก็วิ่งผ่านรางสาขาไปเฉยเลย
- เซนเซอร์ทางออกตรวจจับว่าขบวนที่ 2 ได้ผ่านจุดคอขวดไปแล้ว
Main_Track_Occupied = false; - Arduino สั่งให้รีเลย์ 12V จ่ายไฟกลับไปที่รางสาขา
- ขบวนที่ 1 ก็กลับมาวิ่งได้อีกครั้ง! ฮูเร่!
- Arduino รอ 5 วินาที จากนั้นสั่งให้ Micro Servo ดันรางกลับไปที่ตำแหน่ง "ตรง/รางหลัก" เหมือนเดิม
สถาปัตยกรรมที่ต้องมีสำหรับการขยายระบบขั้นสูง
- Arduino Mega: สำคัญมากถ้าจะติดตามตัวแปรบูลีนจำนวนมหาศาล และจัดการอินเตอร์รัพต์จากพอร์ต I/O เป็นสิบๆ ตัวพร้อมกันในเลย์เอาท์ใหญ่ๆ
- เซนเซอร์ Hall Effect หรือ Reed Switch (6 ตัวขึ้นไป)
- Micro Servos (SG90) ติดตั้งไว้ใต้รางโมเดล
- บอร์ดรีเลย์หลายช่อง 5V (เพื่อใช้ตัดไฟ 12V เฉพาะในบล็อครางที่ต้องการ)
- แหล่งจ่ายไฟ 12V, 2-3 แอมป์ ที่เสถียร สำหรับหัวรถจักร
จัดไปวัยรุ่น! จำไว้ ห้ามช็อตนะตัวนี้ ไม่งั้นไฟไหม้บ้านเอาได้ สู้งานนะน้อง!