I/O Blocks – ระบบเครือข่าย I/O แบบกริด


งานชิ้นนี้ได้รับการสนับสนุนภายใต้โครงการ Stanford TLTL Fellow Program (2013)

I/O Blocks เป็นโครงงานที่เกิดขึ้นเพื่อตอบสนองกรณีที่นักออกแบบระบบต้องการเพิ่มขยายจำนวน Input หรือ output เพื่อให้สร้างต้นแบบของโครงงานที่ต้องการได้ในเวลาอันรวดเร็ว I/O Block ประกอบไปด้วยโหนดที่มี Input และ Output จำนวนหนึ่ง นักออกแบบสามารถเชื่อมต่อโหนดเหล่านี้เข้าด้วยกันได้สูงสุด 126 โหนด I/O Blocks ใช้การเชื่อมต่อเครือข่ายแบบกริด โดยมีโหนด Master หนึ่งตัวเป็นตัวจัดการโหนดย่อยที่เหลือ และติดต่อกับคอมพิวเตอร์

IO Blocks

คุณสมบัติ

  1. สามารถเพิ่มโหนดได้สูงสุด 126 ตัว
  2. การเชื่อมต่อเป็นระบบกริด แต่ละโหนดจะได้รับหมายเลขประจำตัวตามพิกัดแกน X และ Y ของตน
  3. สามารถใช้ระบบ Hot Plug ได้ คือสามารถเพิ่มหรือถอดโหนดออกจากเครือข่ายได้โดยไม่ต้องรีเซ็ทระบบ
  4. แต่ละโหนดผู้ใช้สามารถตั้งชื่อได้ เพื่อใช้ระบุโหนดในระดับ Application ในภายหลัง (ดูตัวอย่าง Word Game ด้านล่าง)
  5. แต่ละโหนดมี Output และ input ซึ่งรับค่าเซ็นเซอร์แบบอนาลอกได้ รวมทั้งสามารถต่อ Rotary Encoder ได้
  6. Master สามารถค้นหาโหนดที่เชื่อมต่ออยู่ได้ และสามารถสั่งงาน I/O ของแต่ละโหนดได้
  7. Master สามารถรับคำสั่งจากคอมพิวเตอร์เพื่อควบคุมโหนดต่างๆ ได้

ตัวอย่างการใช้งาน

As I Want You to Understand – ระบบแสดงผลไฟแขวนขนาดใหญ่

โครงงานเชิงศิลปะประยุกต์นี้ประกอบไปด้วยไฟแขวนที่บรรจุหลอดไฟปิงปองสีแดงไว้ 560 ดวง แบ่งเป็น 7×5 ชุดสามารถใช้แสดงผลและรูปลายต่างๆ ได้ตามที่ศิลปินจะกำหนด จุดเด่นของโครงงานอยู่ที่ความร้อนจากหลอดไฟเมื่อติดทั้งหมดซึ่งจะมีกำลังถึง 5,600 วัตต์

I/O Blocks ถูกนำมาใช้ควบคุมการติดดับของไฟ โดยใช้ทั้งหมด 7 โหนด คุมไฟโหนดละ 5 ชุด เมื่อต่อเชื่อมแล้วสามารถเริ่มควบคุมระบบไฟได้ทันที

Word Game – เกมเรียงอักษร

ในเกมสำหรับเด็กนี้ผู้เล่นจะต้องสะกดคำตามที่กำหนด เช่นเมื่อเห็นภาพแมวก็ให้สะกดออกมาว่า CAT โดย I/O Blocks แต่ละโหนดจะมีอักษรติดไว้โหนดละหนึ่งตัว และชื่อของโหนดจะถูกตั้งตามอักษรนั้นๆ เมื่อผู้เล่นต่อโหลดสามโหนดโดยเรียงลำดับเป็น C, A, และ T ถูกต้อง ระบบก็จะแจ้งว่าสำเร็จ

Robo Blocks – ระบบเขียนโปรแกรมควบคุมหุ่นยนต์แบบจับต้องได้

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

โครงสร้างทางเทคนิคของเครือข่าย

เพื่อให้สามารถพัฒนาระบบ I/O Blocks ได้อย่างรวดเร็ว เราใช้ระบบบัส I2C เป็นพื้นฐาน ซึ่งไมโครคอนโทรเลอร์ตระกูล PIC ที่ใช้ในโครงงานนี้มีความสามารถในระบบฮาร์ดแวร์สำหรับจัดการระบบบัสนี้อยู่แล้ว ซึ่งช่วยให้ทีมงานไม่ต้องสร้างระบบพื้นฐานของเครือข่ายขึ้นเอง เช่น การกำหนดที่อยู่ของโหนด การส่งข้อมูลไปยังโหนดที่ต้องการ การตอบรับสัญญาณ (Acknowledgement) การตรวจสอบข้อผิดพลาดในระบบเครือข่าย ความสามารถเหล่านี้ใช้ของระบบบัส I2C ทั้งหมด

อย่างไรก็ดีระบบบัส I2C ขาดความสามารถที่สำคัญไปคือ การตรวสอบลำดับการเชื่อมต่อของโหนดในเครือข่าย เนื่องจากระบบ I/O Blocks ต้องการตรวจสอบว่าโหนดใดต่ออยู่ก่อนหรือหลังโหนดอื่น ทีมจึงต้องออกแบบเพิ่มสวิทมอสเฟตเข้าไปในแต่ละโหนดเพื่อให้สามารถเปิดหรือปิดบัสส่วนที่อยู่ถัดไปจากโหนดตนเองได้ ในช่วงเวลาของการค้นหาโครงสร้างของเครือข่าย Master จะส่งบรอดคาสออกมา เมื่อโหนดที่อยู่ใกล้ที่สุดตอบสนองบรอดคาสนี้แล้ว มันก็จะเปิดสวิทเพื่อเชื่อมต่อโหนดที่อยู่ถัดไปเข้ากับเครือข่าย ดังนั้นเมื่อ Master ทำการบรอดคาสครั้งต่อไปโหนดที่อยู่ถัดไปนี้ก็จะสามารถตอบสนองได้ และตัวมันเองก็จะเปิดสวิทเพื่อให้โหนดที่อยู่ในลำดับถัดไปเชื่อมเข้ามา ทำอย่างนี้วนซ้ำไปเรื่อยๆ จนไม่พบโหนดใหม่เพิ่มเติม

ทีมพัฒนา

Photo of ภานุพงศ์ จันทาพูน
ภานุพงศ์ จันทาพูน
นักศึกษา (LIL Summer Project 2013)
Photo of ธนพล อ้วนหินกอง
ธนพล อ้วนหินกอง
นักศึกษา (LIL Summer Project 2013)
Photo of มารุตพงศ์ ไชยลังกา
มารุตพงศ์ ไชยลังกา
นักศึกษา (LIL Summer Project 2013)

อาจารย์ที่ปรึกษา