กลับไปหน้ารวมไฟล์
the-urb-unit-making-arduinos-network-77551e.md

ระบบที่ใช้ Arduino หลายตัวเชื่อมต่อกันผ่าน I2C bus นั้นไม่ใช่เรื่องใหม่ แต่หลายคนอาจยังไม่รู้ว่ามันทำได้ และข้อดีของการเชื่อมต่อแบบนี้คืออะไร รวมถึงการเข้าใจการทำงานของสเก็ตช์บนหลายๆ อุปกรณ์ก็อาจจะดูยากไปหน่อย

เวอร์ชันของผมที่ใช้เชื่อมต่อกัน – โครงการ URB (Universal Railway Bus) ออกแบบมาสำหรับนักสร้างโมเดลรถไฟโดยเฉพาะ แต่ความสามารถของมันเอาไปใช้ที่ไหนก็ได้ เริ่มแรกผมจะยกตัวอย่างง่ายๆ ให้ดูก่อน จะได้เห็นข้อดีหลักของระบบแบบนี้ชัดๆ

Concept Diagram

ภาพสองภาพนี้ที่แสดงประตู เป็นแค่แนวคิดนะ เมื่อกดปุ่มที่ตรงกัน มอเตอร์ DC จะหมุนคนละทิศ และตามคำสั่งจากเซนเซอร์ จะค่อยๆ ลดความเร็วลง แล้วหยุด

ในภาพบน สเก็ตช์ต้องประมวลผลคำสั่งจากปุ่มและส่งสัญญาณควบคุมไปยังไดรเวอร์มอเตอร์ พอได้รับสัญญาณจากเซนเซอร์ สเก็ตช์ต้องเปลี่ยนความเร็วการหมุนจากสูงสุดเป็นศูนย์ในช่วงเวลาหนึ่ง เพื่อให้ประตูปิดอย่างนุ่มนวล นอกจากนี้ สเก็ตช์ต้องล็อคการหมุนของมอเตอร์ในทิศทางที่ผิดด้วย เช่น ถ้ากดปุ่มปิดประตูตอนที่ประตูปิดอยู่แล้ว หลังจากนั้นก็ต้องเพิ่มอัลกอริทึมแบบเดียวกันสำหรับประตูบานที่สอง แน่นอนว่าโค้ดสเก็ตช์นี้จะยาวเป็นพรืด

แต่ถ้าใช้ Arduino แบบโลคอล (#2 และ #3) มาควบคุมมอเตอร์ของมันเองและรับคำสั่งจากเซนเซอร์ของมันเอง สเก็ตช์ของ Arduino #1 จะเหลือแค่ไม่กี่บรรทัด จัดไปวัยรุ่น! ตอนนี้เราต้องใช้สามสเก็ตช์ สเก็ตช์ของ Arduino #2 และ #3 นั้นเหมือนกัน และยังง่ายกว่าสเก็ตช์ในภาพแรกอีกด้วย แถมจำนวนสายไฟก็ลดลงอย่างเห็นได้ชัด

บอกอีกที นี่เป็นแค่ตัวอย่างสมมตินะ มันทำงานได้จริง แต่ถ้าระยะทางไกลมากๆ อาจต้องใช้ I2C bus อีกเวอร์ชันนั่นคือ RS485 อย่างไรก็ตาม คุณสามารถดูวิดีโอตัวอย่างการทำงานของ I2C bus กับที่กั้นทางรถไฟได้

สรุป: การรวม Arduino หลายตัวเข้าด้วยกันทำให้การเขียนโปรแกรมง่ายขึ้นและลดจำนวนสายไฟลง มันยังช่วยให้คุณตั้งค่าอุปกรณ์แบบโลคอลและหาจุดเสียหายได้เร็วขึ้น ด้วยการแบ่งระบบออกเป็นบล็อกตามหน้าที่และทดสอบแยกกัน นอกจากนี้ ปัญหาพอร์ต I/O ไม่พอก็หายไปเลย – แค่เพิ่ม Arduino อีกตัว! บอร์ด Arduino NANO นี่ราคาถูกมากเลยนะตัวนี้!

สำหรับนักสร้างโมเดลรถไฟ

นักสร้างโมเดลทุกคนคงเคยเจอความยากเวลาใส่อิเล็กทรอนิกส์ลงในเลย์เอาต์รถไฟ ไม่ว่าจะเป็นสายไฟเยอะแยะ, การเชื่อมต่ออุปกรณ์ที่ซับซ้อนและต้องเข้ากันได้, และที่สำคัญคือการเพิ่มหรือเปลี่ยนอะไรในเลย์เอาต์ที่เสร็จแล้วโดยไม่ต้องแก้สายไฟใหม่หมด ซึ่งข้อด้อยเหล่านี้ไม่มีในคอนเซปต์ URB สายไฟทั้งหมดระหว่างบล็อกทำจากสายเพียงสี่เส้นเท่านั้น ตัวอย่างเช่น ถ้าคุณต้องการเพิ่ม turnout, สัญญาณไฟ, เซนเซอร์, หรือไฟถนนใหม่ๆ ในเลย์เอาต์ คุณแค่ตัดบัสสี่สายที่จุดที่ใกล้ที่สุดแล้วต่อ URB อีกหน่วยเข้าไป แค่อัปโหลดสเก็ตช์ แล้วชิ้นส่วนที่ติดตั้งใหม่ก็จะถูกบูรณาการเข้าเลย์เอาต์ทันที คุณสามารถรีโปรแกรม URB ที่ติดตั้งแล้วได้ตลอดเวลา โดยตรงบนเลย์เอาต์เลย แค่ต้องมีช่องให้เสียบสาย mini-USB ถึงมัน ด้วยวิธีนี้คุณสามารถเปลี่ยนการควบคุมหรือการตั้งค่าอุปกรณ์ใดๆ ในเลย์เอาต์ และเปลี่ยนมันได้ถ้าจำเป็น ข้อดีอีกอย่างคือสามารถทดลองกับแต่ละ URB แยกจากกันได้ และแก้ปัญหา หาจุดผิดพลาดในส่วนไฟฟ้าบนเลย์เอาต์ได้ง่ายขึ้น รวมถึงสามารถประกอบ URB กับโมดูล peripheral แยกบนโต๊ะทำงานได้เลย ทดสอบต้นแบบให้เรียบร้อยแล้วค่อยย้ายไปติดตั้งบนเลย์เอาต์ วิธีนี้ทำให้คุณทำไอเดียของคุณออกมาได้เร็วขึ้นมาก สู้งานนะน้อง!

ตัวอย่างการจัดวางรางรถไฟ

ตัวอย่างการจัดวางรางรถไฟ

ระบบ URB เนี่ยประกอบด้วยสองส่วนหลักคือซอฟต์แวร์กับฮาร์ดแวร์จ้า

  • ซอฟต์แวร์ เราใช้ Protocol 2 ซึ่งเป็นมาตรฐานที่เราออกแบบมาให้เขียนโค้ดควบคุมง่ายๆ ตามสไตล์ Arduino IDE ตัวเต็มๆ ไปหาอ่านเพิ่มเติมได้ในเว็บของพี่เลย
  • ฮาร์ดแวร์ คือบอร์ด Universal connectors board ที่เราเรียกกันว่า URB unit นั่นเอง

จะเขียนโค้ดเองใหม่ทั้งหมด หรือจะหยิบตัวอย่างจากในเว็บพี่ไปดัดแปลงก็ได้ สบายๆ เพราะ Protocol 2 มันเป็นมาตรฐาน ทำให้เวลาเราต่อ Arduino หลายๆ ตัวเข้าด้วยกันเป็นระบบ มันจะจัดการง่ายขึ้น ไม่ปวดหัว แถมโค้ดตัวอย่างของพี่ก็ไม่ได้เขียนอะไรซับซ้อน ใช้พื้นฐานจาก Arduino IDE เนี่ยแหละ

URB unit

จริงๆ แล้วในโปรเจค URB เราไม่จำเป็นต้องใช้ฮาร์ดแวร์เฉพาะก็ได้ น้องจะใช้เบรดบอร์ดกับสายไฟจั้มๆ หรือใช้ชิลด์อื่นๆ ก็พอไหว แต่มัน... ไม่ค่อยสะดวกเลยว่ะ! เลยเป็นที่มาของบอร์ด URB (Universal Railway controller Block) unit ไงล่ะ

บอร์ด URB 2.7 URB 2.7

บอร์ดรุ่นนี้ใช้ Arduino NANO เป็นหัวใจหลัก ขนาดเลยกะทัดรัดแค่ 65x75 mm เท่านั้น ออกแบบมาเพื่อป้องกันการต่อบลูทูธหรือ Arduino ผิดขั้วโดยเฉพาะ ซึ่งความสามารถพิเศษที่บอร์ด URB unit นี้เพิ่มให้มีดังนี้ จัดไปวัยรุ่น:

  • พอร์ตสำหรับบลูทูธโมดูล HC-05/HC-06 ถึง 2 ตัว
  • ต่อเซอร์โว (Servo) หรือเซนเซอร์ของ Arduino ได้ตรงๆ 3 ตัว
  • ต่อรีเลย์บล็อกได้ตรงๆ
  • ต่อมอเตอร์ไดรเวอร์แบบ L298 หรือคล้ายๆ กันได้ตรงๆ
  • มีเทอร์มินัลบล็อกสำหรับขันสาย สะดวกดี
  • เอาต์พุตกระแสสูง 6 (หรือ 7) ช่อง (รองรับได้ช่องละสูงสุด 0.5A)
  • เอาต์พุตแรงดันสูง สูงสุด 50V
  • แลกเปลี่ยนข้อมูลกับ MCU ตัวอื่น (เช่น Raspberry Pi) ที่ใช้ลอจิก 3.3V ได้อย่างน่าเชื่อถือ
  • มีบัส I2C ในตัว
  • ตัวเลือกเสริม: สามารถเพิ่มตัวต้านทานดึงขึ้น (Pull-up Resistor) สำหรับ I2C และตัวเก็บประจุกรองไฟ (Smoothing Capacitor) ได้

ที่สำคัญ บอร์ดนี้มันเป็นแค่ตัวต่อ พังยากมาก! ถ้าน้องเผลอทำชิพไหม้ ก็แค่เปลี่ยนชิพตัวใหม่ลงบนบอร์ดเดิมได้เลย :)

ข้อเสียอย่างเดียวคือ น้องต้องบัดกรีขาตัวต่อลงบน PCB นี้ด้วยตัวเองนะ

ตัวอย่างระบบเครือข่ายง่ายๆ

มาลองดูตัวอย่างการทำงานร่วมกันของ URB unit 2 ตัวแบบง่ายสุดๆ กันดีกว่า โค้ดของสเก็ตช์ทั้งสองตัวนี้เรียบง่ายมาก แถมยังแสดงให้เห็นการใช้งานขา I/O ที่ต่างกันบนบอร์ด URB เดียวกันได้ด้วย

ตัวอย่างนี้จะทดสอบสองอย่างพร้อมกัน:

  1. การสื่อสารผ่านพอร์ตอนุกรม (Serial Port) แบบจุดต่อจุด (Point-to-point) โดยไม่ต้องกำหนดเส้นทาง
  2. การสื่อสารผ่านบัส I2C ที่มีการกำหนดเส้นทาง (Routing)

และที่น่าสนใจคือการผสมผสานสองวิธีนี้เข้าด้วยกัน ระบบแบบนี้แหละที่ทำให้เราควบคุมอุปกรณ์เป็นร้อยชิ้นบนลานรถไฟ (หรืออะไรก็ตาม) จากคอนโซลอิสระสองตัวได้พร้อมกัน!

ระบบทำงานยังไง: พอน้องเชื่อมต่อแอปกับบอร์ด URB #1 ผ่านบลูทูธแล้ว เวลากดปุ่มลูกศร เซอร์โวจะขยับตำแหน่ง และถ้าเซนเซอร์อินฟราเรดทำงาน มันก็จะสั่งการให้เซอร์โวขยับเช่นกัน

น้องสามารถเพิ่มอุปกรณ์ใหม่ๆ เข้าไปในระบบนี้ได้เรื่อยๆ และปรับเปลี่ยนโค้ดได้ตามใจ เพียงแต่อาจต้องเตรียม แหล่งจ่ายไฟที่แรงขึ้น มารองรับนะ สู้งานนะน้อง!

ชุดคิทมหัศจรรย์ของตัวคุณเอง

กลับมาที่ตัวอย่างประตูกันอีกที ถ้าน้องใช้ URB Unit สองตัวคู่กับมอเตอร์สเตปเปอร์แรงๆ 12 โวลต์ ก็จะได้ดีไซน์ประมาณนี้แหละ สำหรับการควบคุม ก็ใช้แอป Android ได้เลย ถ้าสนใจ พี่จะเขียนแอปฟรีสำหรับควบคุมประตูให้เอง (ไม่ต้องห่วงเรื่องงบ) และแน่นอน แทนที่จะเป็นประตู น้องจะเอาไปใช้กับอะไรก็ได้ตามใจชอบ :)

Door Control Diagram 1

Door Control Diagram 2

Door Control Diagram 3

เหมือนต่อเลโก้เลยว่ะ! จาก URB Unit ไม่กี่ตัว น้องสามารถสร้างระบบอะไรก็ได้ด้วยสายไฟน้อยสุด โค้ดโปรแกรมก็ง่ายๆ การต่อก็ไม่ซับซ้อน

พี่ใช้เจ้าหน่วยนี้ในทุกโปรเจกต์หรือตัวอย่างของพี่ และที่สำคัญที่สุดคือในลานรถไฟจำลองที่บ้านพี่นี่แหละ

ถ้าน้องมีหุ่นยนต์ตัวเบิ้ม

อีกตัวอย่างนึง ถ้าหุ่นยนต์ของน้องยาวมากๆ เช่น ปั้นจั่น การติดตั้ง URB Unit หลายตัวแล้วเชื่อมต่อกับระบบควบคุมปั้นจั่น จะง่ายกว่าการใช้สายไฟเป็นพวงและเขียนโค้ดควบคุมแพลตฟอร์มขับเคลื่อน, วินช์ และสายเคเบิลอีกเยอะแยะ

URB units for crane control URB units for crane control

รายละเอียดทางเทคนิคแบบจัดเต็ม

Local Area Networking (LAN)

URB (Universal Routing Bus) Unit ออกแบบมาเพื่อทำให้การสร้างเครือข่ายระหว่างบอร์ด Arduino หลายๆ ตัวเป็นเรื่องง่ายดาย

  • Bus Topology: ใช้ช่องทางการสื่อสารทางกายภาพร่วมกัน (มักเป็น RS-485 หรือ I2C) เพื่อให้ Arduino เป็นสิบๆ ตัวคุยกับ Master Unit กลางได้
  • Addressing Logic: แต่ละ "Node" มี ID เป็นของตัวเอง Master Unit จะจัดการเรื่องการกำหนดเส้นทางและตรวจจับการชนกันของข้อมูล ทำให้ข้อมูลจาก Arduino ที่เต็มไปด้วยเซนเซอร์ ไปถึงฐานข้อมูลกลางหรือ Node ตัวกระทำได้อย่างน่าเชื่อถือ

การตั้งค่าเพื่อสาธิต

ใน "Arduino Train DEMO" URB Unit ดูแลสถานะที่ซับซ้อนของรางรถไฟจำลอง:

  1. เซนเซอร์: ตรวจจับตำแหน่งของรถไฟ
  2. ตัวกระทำ: ควบคุมรางแยกและสัญญาณไฟ
  3. การประสานเวลา: ทำให้ระบบหลาย Node ทั้งหมดทำงานเป็นเครือข่ายเดียวที่เชื่อมโยงกัน แสดงให้เห็นพลังของเครือข่ายแบบฝังตัวที่เป็นโมดูลาร์

ข้อมูล Frontmatter ดั้งเดิม

title: "The URB Unit – งานง่ายแต่หล่อ ต่อ Arduino เป็นเครือข่ายได้ชิลๆ"
description: "ชุดอิเล็กทรอนิกส์สุดเทพของน้องๆเอง! เพิ่มพิน I/O เยอะขึ้น ต่อเซนเซอร์กับมอเตอร์ได้เพียบ ส่งสัญญาณไกลแบบไร้สาย ควบคุมจากที่ไหนก็ได้ ไม่มีสายระโยงระยางให้วุ่นวาย จัดไป!"
author: "Steve_Massikker"
category: "Lab Stuff"
tags:
  - "kit"
  - "robots"
  - "home automation"
  - "remote control"
  - "robots"
views: 13340
likes: 20
price: 1499
difficulty: "Intermediate"
components:
  - "2x Infrared Module (Generic)"
  - "1x Servo Module (Generic)"
  - "1x Level Shifter Board (3.3V  5V)"
  - "2x URB 2.7 unit"
  - "1x HC-05 Bluetooth Module"
  - "2x Resistor 10k ohm"
  - "2x Arduino Nano R3"
tools: []
apps:
  - "1x Arduino Train DEMO"
  - "1x Arduino IDE"
downloadableFiles: []
documentationLinks: []
passwordHash: "bae632711664c24d66cb0289508ff204d555d0e5b877182caab70e861466bbe1"
encryptedPayload: "U2FsdGVkX1802f1X1imwEhN8c/iv2SuYqDw8e0I8vE7/92/0GISnUYXie2hWYH9pvm+m7W/RPNuwt+wnWV2MZMcNO/PxM0KrreEa0CgsTggN3dQVQ8H5bSWikrxoN7Km"
seoDescription: "Explore The URB Unit: An Arduino electronics kit for more I/O pins and long-range wireless control without the messy wires."
videoLinks:
  - "https://www.youtube.com/embed/7vQsPhqznwA"
heroImage: "https://cdn.jsdelivr.net/gh/bigboxthailand/arduino-assets@main/images/projects/the-urb-unit-making-arduinos-network-77551e_cover.jpg"
lang: "en"