สารบัญ:
- ขั้นตอนที่ 1: หลักการดำเนินการ
- ขั้นตอนที่ 2: การแลกเปลี่ยนข้อมูล MQTT และการกำหนดค่า
- ขั้นตอนที่ 3: Train Controller
- ขั้นตอนที่ 4: LEGO Train Control
- ขั้นตอนที่ 5: รีโมทคอนโทรล
- ขั้นตอนที่ 6: ตัวควบคุมเซนเซอร์
- ขั้นตอนที่ 7: ตัวควบคุมเอาต์พุต
- ขั้นตอนที่ 8: Raspberry Pi และ WiFi Router
- ขั้นตอนที่ 9: ตัวควบคุมสำเร็จรูป
2025 ผู้เขียน: John Day | [email protected]. แก้ไขล่าสุด: 2025-01-13 06:58
มีระบบโมเดลรถไฟมาตราส่วน TT แบบเก่า ฉันมีแนวคิดว่าจะควบคุมโลคอสเป็นรายบุคคลได้อย่างไร
เมื่อคำนึงถึงสิ่งนี้ ฉันจึงก้าวไปอีกขั้นและค้นหาสิ่งที่จำเป็นไม่เพียงแต่เพื่อควบคุมรถไฟเท่านั้น แต่ยังต้องมีข้อมูลเพิ่มเติมเกี่ยวกับแผนผังทั้งหมดและควบคุมอย่างอื่นด้วย (โคมไฟ สวิตช์ราง…)
นี่คือที่มาของระบบรถไฟจำลองที่ควบคุมด้วย WiFi
ขั้นตอนที่ 1: หลักการดำเนินการ
หลักการสำคัญคือการควบคุมแต่ละองค์ประกอบแยกจากกัน ไม่ว่าจะจากตัวควบคุมเดียวหรือจากแหล่งการควบคุมหลายแหล่ง โดยเนื้อแท้นี้ต้องการฟิสิคัลเลเยอร์ทั่วไป - WiFi ที่ชัดเจนที่สุด - และโปรโตคอลการสื่อสารทั่วไป MQTT
องค์ประกอบหลักคือโบรกเกอร์ MQTT อุปกรณ์ที่เชื่อมต่อทุกเครื่อง (รถไฟ เซ็นเซอร์ เอาท์พุต…) ได้รับอนุญาตให้สื่อสารผ่านโบรคเกอร์เท่านั้น และสามารถรับข้อมูลจากโบรคเกอร์เท่านั้น
หัวใจของอุปกรณ์คือตัวควบคุม WiFi ที่ใช้ ESP8266 ในขณะที่นายหน้า MQTT ทำงานบน Raspberry pi
ในตอนแรกความครอบคลุมของ Wifi นั้นมาจากเราเตอร์ WiFi และทุกอย่างเชื่อมต่อผ่านระบบไร้สาย
อุปกรณ์มี 4 ประเภท:
- ตัวควบคุมรถไฟ: มีอินพุตดิจิตอล 2 ช่อง, เอาต์พุตดิจิตอล 1 ช่อง, เอาต์พุต PWM 2 ช่อง (สำหรับควบคุมมอเตอร์ DC 2 ตัว)
- ตัวควบคุมเซนเซอร์: มีอินพุตดิจิตอล 7 ช่อง (สำหรับสวิตช์อินพุต ออปโตเซนเซอร์…)
- ตัวควบคุมเอาต์พุต: มีเอาต์พุตดิจิตอล 8 ช่อง (สำหรับสวิตช์ราง…)
- รีโมท WiFi: มีอินพุตตัวเข้ารหัสที่เพิ่มขึ้น 1 ตัว, อินพุตดิจิตอล 1 ตัว (เพื่อควบคุมรถไฟจากระยะไกล)
ระบบยังสามารถทำงานได้จาก Node-Red (จากแท็บเล็ต พีซี หรือสมาร์ทโฟน…)
ขั้นตอนที่ 2: การแลกเปลี่ยนข้อมูล MQTT และการกำหนดค่า
ตามโปรโตคอล MQTT ในตอนแรก อุปกรณ์ทุกเครื่องจะสมัครรับข้อมูลจากหัวข้อที่กำหนด และสามารถเผยแพร่ไปยังหัวข้ออื่นได้ นี่เป็นพื้นฐานของการสื่อสารของเครือข่ายควบคุมรถไฟ
เรื่องราวการสื่อสารนี้นำเสนอผ่านข้อความในรูปแบบ JSON เพื่อให้สั้นและมนุษย์สามารถอ่านได้
มองจากมุมมองที่ไกลกว่า: เครือข่ายมีเราเตอร์ WiFi ที่มี SSID (ชื่อเครือข่าย) และรหัสผ่านของตัวเอง อุปกรณ์ทุกชิ้นต้องรู้จัก 2 สิ่งนี้เพื่อเข้าถึงเครือข่าย WiFi โบรกเกอร์ MQTT ก็เป็นส่วนหนึ่งของเครือข่ายนี้เช่นกัน ดังนั้นเพื่อใช้โปรโตคอล MQTT อุปกรณ์ทุกเครื่องต้องทราบที่อยู่ IP ของโบรกเกอร์ และสุดท้าย อุปกรณ์ทุกเครื่องมีหัวข้อสำหรับสมัครรับข้อมูลและเผยแพร่ข้อความเป็นของตัวเอง
ในทางปฏิบัติ รีโมตคอนโทรลที่กำหนดจะใช้หัวข้อเดียวกันเพื่อเผยแพร่ข้อความที่สมัครรับข้อมูลรถไฟที่กำหนด
ขั้นตอนที่ 3: Train Controller
ในการควบคุมรถไฟของเล่น โดยพื้นฐานแล้ว เราต้องการ 3 สิ่ง: แหล่งจ่ายไฟ ตัวควบคุมที่เปิดใช้งาน WiFi และอุปกรณ์อิเล็กทรอนิกส์สำหรับขับมอเตอร์
แหล่งจ่ายไฟขึ้นอยู่กับแผนการใช้งานจริง: ในกรณีของ LEGO นี่คือกล่องแบตเตอรี่ Power Functions ในกรณีของชุดรถไฟสเกล "oldschool" TT หรือ H0 มันคือแหล่งจ่ายไฟ 12V ของแทร็ก
คอนโทรลเลอร์ที่เปิดใช้งาน WiFi คือคอนโทรลเลอร์ Wemos D1 mini (ตาม ESP8266)
อุปกรณ์อิเล็กทรอนิกส์สำหรับไดรเวอร์มอเตอร์เป็นโมดูลที่ใช้ TB6612
ตัวควบคุมรถไฟมีเอาต์พุต PWM ที่ควบคุมแยกกัน 2 ตัว อันหนึ่งใช้สำหรับควบคุมมอเตอร์และอีกอันหนึ่งใช้สำหรับส่งสัญญาณแสง มี 2 inpus สำหรับการตรวจจับตามการสัมผัสกกและเอาต์พุตดิจิตอลหนึ่งตัว
ตัวควบคุมยอมรับข้อความ JSON ผ่านโปรโตคอล WiFi และ MQTT
SPD1 ควบคุมมอเตอร์ เช่น ข้อความ {"SPD1": -204} ใช้เพื่อเคลื่อนมอเตอร์ถอยหลังด้วยกำลัง 80% (ค่าความเร็วสูงสุดคือ -255)
SPD2 ควบคุมความเข้มของไฟ LED ที่ "ไวต่อทิศทาง": ข้อความ {"SPD2": -255} ทำให้ไฟ LED (ถอยหลัง) ส่องแสงเต็มกำลัง
OUT1 ควบคุมสถานะของเอาต์พุตดิจิทัล: {"OUT1": 1} เปิดเอาต์พุต
หากสถานะของอินพุตเปลี่ยนแปลง ตัวควบคุมจะส่งข้อความตามนั้น: {"IN1": 1}
หากผู้ควบคุมได้รับข้อความที่ถูกต้อง ผู้ควบคุมจะดำเนินการและให้ข้อเสนอแนะแก่นายหน้า คำติชมเป็นคำสั่งที่ดำเนินการจริง ตัวอย่างเช่น หากนายหน้าส่ง {"SPD1": 280} มอเตอร์ทำงานเต็มกำลัง แต่ข้อความตอบกลับจะเป็น: {"SPD1": 255}
ขั้นตอนที่ 4: LEGO Train Control
ในกรณีของรถไฟ LEGO แผนผังจะแตกต่างกันเล็กน้อย
พลังงานมาจากกล่องแบตเตอรี่โดยตรง
จำเป็นต้องมีตัวแปลงแบบสเต็ปดาวน์ขนาดเล็กเพื่อจ่ายไฟ 3.5V สำหรับบอร์ด Lolin ที่ใช้ ESP8266
การเชื่อมต่อทำด้วยลวดต่อขยายของ LEGO 8886 ผ่าครึ่ง
ขั้นตอนที่ 5: รีโมทคอนโทรล
ผู้ควบคุมจะเผยแพร่ข้อความไปยังรถไฟเท่านั้น (กำหนดโดยสวิตช์ BCD)
เมื่อหมุนตัวเข้ารหัส รีโมทจะส่งข้อความ {"SPD1": "+"} หรือ {"SPD1": "-"}
เมื่อรถไฟได้รับข้อความ "ประเภทที่เพิ่มขึ้น" จะเปลี่ยนค่าเอาต์พุต PWM เป็น 51 หรือ -51
วิธีนี้ทำให้รีโมทเปลี่ยนความเร็วรถไฟได้ 5 ขั้นตอน (แต่ละทิศทาง)
การกดตัวเข้ารหัสที่เพิ่มขึ้นจะส่ง {"SPD1": 0}
ขั้นตอนที่ 6: ตัวควบคุมเซนเซอร์
ตัวควบคุมเซ็นเซอร์ที่เรียกว่าจะวัดสถานะของอินพุตและหากมีการเปลี่ยนแปลงใด ๆ ให้เผยแพร่ค่านั้น
ตัวอย่างเช่น: {"IN1": 0, "IN6": 1} ในตัวอย่างนี้ 2 อินพุตเปลี่ยนสถานะพร้อมกัน
ขั้นตอนที่ 7: ตัวควบคุมเอาต์พุต
ตัวควบคุมเอาต์พุตมีเอาต์พุตดิจิตอล 8 ช่อง ซึ่งเชื่อมต่อกับโมดูลที่ใช้ ULN2803
ได้รับข้อความผ่านหัวข้อที่สมัครรับข้อมูล
ตัวอย่างเช่น ข้อความ {"OUT4": 1, "OUT7": 1} เปิดเอาต์พุตดิจิทัล 4. และ 7.
ขั้นตอนที่ 8: Raspberry Pi และ WiFi Router
ฉันมีเราเตอร์ TP-Link WiFI ที่ใช้แล้ว ดังนั้นฉันจึงใช้สิ่งนี้เป็นจุดเข้าใช้งาน
โบรกเกอร์ MQTT คือ Raspberry Pi ที่ติดตั้ง Mosquitto
ฉันใช้ Raspbian OS มาตรฐานกับ MQTT ที่ติดตั้งด้วย:
sudo apt-get ติดตั้ง mosquitto mosquitto-clients python-mosquitto
ต้องกำหนดค่าเราเตอร์ TP-Link ให้จองที่อยู่สำหรับ Raspberry ดังนั้นหลังจากรีสตาร์ททุกครั้ง Pi จะมีที่อยู่ IP เดียวกันและอุปกรณ์ทุกเครื่องสามารถเชื่อมต่อได้
และนั่นแหล่ะ!
ขั้นตอนที่ 9: ตัวควบคุมสำเร็จรูป
นี่คือตัวควบคุมที่เสร็จแล้ว
โลโคมาตราส่วน TT มีขนาดเล็กมากจนต้องทำให้กระดานโลลินแคบ (ตัด) ให้เล็กพอที่จะใส่ลงในรถไฟได้
ไบนารีที่คอมไพล์แล้วสามารถดาวน์โหลดได้ ด้วยเหตุผลด้านความปลอดภัย การขยาย bin ถูกแทนที่เป็น txt