แล็บ: สร้าง Virtual Device และ event script
Course 2 · Module 3
Type: Hands-on (Virtual Device + optional Blender → GLB)
Suggested time: ~3–3.5 ชั่วโมง Virtual Device (+ ~1–1.5 ชม. Lab E)
Read first: Lesson · Device checklist · Blender cheatsheet · Template · ← Table of Contents · ← M02 · M04 →
Useful references during the lab
หัวข้อที่มีชื่อว่า “Useful references during the lab”| เอกสาร | ใช้เมื่อ |
|---|---|
| M02 lab | เซสชัน Studio / Simulator พร้อม |
| Hackathon | scene presets / web-app evidence |
| Course 1 M05 | ความหมายเซ็นเซอร์ |
| Blender Manual 4.5 | Modeling / Texturing / Animation |
| INC111-2021 playlist (Thai) | Tutorial วิดีโอภาษาไทย |
| ternion-3d-assets-free | ตัวอย่าง GLB / texture |
Lab Goals
หัวข้อที่มีชื่อว่า “Lab Goals”- มี Virtual Device ที่กำหนดเซ็นเซอร์อย่างน้อย 2 ชนิด
- มี behavior อย่างน้อย 1 เส้นทาง (อินพุต → สถานะที่สังเกตได้)
- มีสคริปต์/ไทม์ไลน์เหตุการณ์รันซ้ำได้และเห็นผลใน visualization
- กรอก device-model-checklist.md
- (แนะนำ) ฝึก Blender สั้น ๆ: model หรือ texture หรือ animation → export GLB
Suggested time: ~3–3.5 ชม. (Virtual Device) + ~1–1.5 ชม. (Lab E Blender ถ้าทำ)
Prerequisites
หัวข้อที่มีชื่อว่า “Prerequisites”- Lab M02 ผ่าน (เปิด Bitstream Studio ได้)
- เลือกเส้นทาง: Simulator และ/หรือบอร์ดที่สตรีมได้
- มีโฟลเดอร์
lab-notes/สำหรับไฟล์โมเดล + หลักฐาน - (Lab E) ติดตั้ง Blender
Lab A — Create the model (required)
หัวข้อที่มีชื่อว่า “Lab A — Create the model (required)”- คัดลอก sample-virtual-device.template.json เป็นไฟล์ของคุณ เช่น
lab-notes/device-model.json - ตั้ง
deviceId/displayNameให้ทีมจำได้ - เปิดใช้เซ็นเซอร์อย่างน้อย 2 ชนิดจากชุด: switch, temperature/pressure, IMU
- กำหนด
defaultและช่วงmin/max(หรือเทียบเท่า) ให้สมเหตุสมผล - ระบุ actuator อย่างน้อย 1 ตัว (LED / flag / log sink)
บนโฮสต์: เปิด Simulator หรือบอร์ด แล้วเลือก scene ที่สอดคล้องโมเดล (เช่น Lab Quiet สำหรับสาธิตช้า, Motion เมื่อมี IMU)
Pass when: ไฟล์โมเดลอ่านรู้เรื่อง และโฮสต์แสดงค่าที่เกี่ยวข้องกับเซ็นเซอร์ที่เลือกอย่างน้อยหนึ่งช่อง
Lab B — Behavior (required)
หัวข้อที่มีชื่อว่า “Lab B — Behavior (required)”กำหนดและสาธิตอย่างน้อยหนึ่งกฎ เช่น:
- คำสั่ง/ปุ่ม → LED หรือสถานะบน UI
- อุณหภูมิเกินเกณฑ์ → event / ข้อความ log / การเปลี่ยนโหมด
เขียนเป็นประโยค WHEN … THEN … ใน checklist
Pass when: เพื่อนในทีมกระตุ้นอินพุตแล้วชี้ผลบนจอได้โดยไม่เดา
Lab C — Event script (required)
หัวข้อที่มีชื่อว่า “Lab C — Event script (required)”เขียนไทม์ไลน์อย่างน้อย 4 จังหวะ (ดูตัวอย่างในบทเรียน) แล้วรันจริง:
- เริ่มจากค่า default / Lab Quiet
- กระตุ้นสเกลาร์หรือสวิตช์ตามเวลา
- กระตุ้น IMU หรือสลับไป Motion (ถ้าโมเดลมี IMU)
- บันทึกผลที่เห็น (สกรีนช็อตก่อน/หลัง หรือคลิปสั้น)
อนุญาตให้รันแบบ นาฬิกาจับเวลา + มือ ถ้าเครื่องมือยังไม่มีไฟล์สคริปต์อัตโนมัติ — แต่ต้องทำซ้ำได้ในรอบที่ 2
Pass when: รันสคริปต์ซ้ำแล้วได้ลำดับผลเดียวกันโดยประมาณ
Lab D — Optional polish
หัวข้อที่มีชื่อว่า “Lab D — Optional polish”- เพิ่ม behavior ที่สอง (threshold + command)
- เปรียบเทียบ scene Lab Quiet vs Motion บนเซ็นเซอร์ชุดเดียวกัน
- เปิด Hackathon
web-app/เป็นจอ Visualization ชั้นนอก
Lab E — Blender for Twin (recommended)
หัวข้อที่มีชื่อว่า “Lab E — Blender for Twin (recommended)”ใช้ blender-twin-cheatsheet.md เป็นแผนที่ลิงก์
Tutorial ภาษาไทย: INC111-2021 playlist
เลือกอย่างน้อย หนึ่ง track ให้จบ:
E1 — Modeling
หัวข้อที่มีชื่อว่า “E1 — Modeling”- ติดตั้ง Blender
- สร้างชิ้นส่วนง่าย (เคสกล่อง / บอร์ดแบน) จาก mesh primitive
- ใช้ Extrude / Bevel / Mirror ตาม Modeling intro
- ตั้ง origin + Apply Scale
E2 — Texturing
หัวข้อที่มีชื่อว่า “E2 — Texturing”- Unwrap UV (UV unwrapping)
- ใส่ Principled BSDF + Base Color
- (ทางเลือก) ใช้ texture จาก ternion-3d-assets-free textures
E3 — Animation
หัวข้อที่มีชื่อว่า “E3 — Animation”- Keyframe หมุนหรือเปิดฝา 2–3 วินาที (Keyframes)
- เล่นใน Timeline ให้เห็นชัด
E4 — Export & view
หัวข้อที่มีชื่อว่า “E4 — Export & view”- Export → glTF 2.0 →
.glbตาม glTF exporter - โหลดใน Bitstream Studio (หรือเทียบกับโมเดลใน free assets)
- บันทึกสกรีนช็อต + ชื่อไฟล์
.glbใน checklist
Pass when (Lab E): มีไฟล์ .glb และหลักฐานว่าเปิดในโฮสต์ได้ หรืออย่างน้อยเปิดใน Blender หลัง re-import ได้
Deliverables checklist
หัวข้อที่มีชื่อว่า “Deliverables checklist”-
device-model.json(หรือเทียบเท่า) - Lab A–C ผ่าน
- device-model-checklist.md กรอกครบ
- หลักฐานสคริปต์รัน (รูป/คลิป)
- (แนะนำ) Lab D
- (แนะนำ) Lab E +
.glb
Troubleshooting
หัวข้อที่มีชื่อว่า “Troubleshooting”| อาการ | แนวทาง |
|---|---|
| โมเดลเขียนแล้วแต่จอไม่เปลี่ยน | ยังไม่ Link / อยู่คนละโหมด Simulator–Bitstream |
| IMU ไม่ขยับ | อยู่ซีน Environment หรือ Lab Quiet — สลับ Motion หรือกระตุ้นตามสคริปต์ |
| Behavior ไม่เห็นผล | ยังไม่ได้กำหนดจุดสังเกต (LED/UI/log) ให้ชัด |
| ค่าดู “ปลอม” เกินไป | ปกติของ Simulator — จดในโมเดลว่าเป็น synthetic |
| ทำซ้ำไม่ได้ | เขียนเวลาเป็นวินาที และเริ่มจาก default เดียวกันทุกครั้ง |
| GLB ไม่มี texture | ลืม UV / ไม่ใช้ Principled / ปิด Materials ตอน export — ดู glTF materials |
| GLB ไม่มี animation | Action ไม่ได้ active / ไม่ได้เปิด Animation ใน export |
| โมเดลใหญ่เกินไปใน Studio | ลด subdivision · decimate · ตรวจสเกล |
Lesson · Device checklist · Blender cheatsheet · Table of Contents · M04 →
อ้างอิงบทเรียนนี้
ถ้านำบทเรียนนี้ไปสอน ทำสไลด์ หรือทำเอกสารต่อ ให้อ้างอิงด้วยข้อความนี้ ถ้าดัดแปลงเนื้อหา ให้เติม (ดัดแปลง)ต่อท้ายชื่อบทเรียน
"แล็บ: สร้าง Virtual Device และ event script" จาก TESA Open Knowledge โดยสมาคมสมองกลฝังตัวไทย (Thai Embedded Systems Association: TESA) https://github.com/tesaiot/tesa-qualification-program สัญญาอนุญาต CC BY-NC 4.0
ข้อความอ้างอิงภาษาอังกฤษ: "Lab: Build a Virtual Device and Event Script" from TESA Open Knowledge by the Thai Embedded Systems Association (TESA), https://github.com/tesaiot/tesa-qualification-program, licensed under CC BY-NC 4.0
ลิงก์บทเรียน: https://tesaiot.github.io/tesa-qualification-program/courses/digital-twin/m03-virtual-device/l02-lab/
บทเรียนนี้ดัดแปลงจากต้นฉบับด้านล่าง เมื่ออ้างอิงให้คงเครดิตต้นฉบับไว้ด้วย
https://github.com/drsanti/TESAIoT-Courses/blob/287c21814ba8c75f693136616dcd270349a15966/C2/M03/lab.md · Original content by Asst. Prof. Dr. Santi Nuratch (ผศ.ดร.สันติ นุราช), KMUTT. Course 2 (C2/) of drsanti/TESAIoT-Courses. TESA funded the work and holds the rights; published here under CC BY-NC 4.0. The upstream repository carries no licence file. Text kept faithful; structure, front matter, quizzes and notes added by TESA Open Knowledge.
TESA Open Knowledge · © 2026 สมาคมสมองกลฝังตัวไทย (TESA) · CC BY-NC 4.0
เนื้อหาเผยแพร่ภายใต้ CC BY-NC 4.0 นำไปใช้ต่อในงานที่ไม่ใช่เพื่อการค้าได้ โปรดอ้างอิงสมาคมสมองกลฝังตัวไทย (TESA) ทุกครั้ง · วิธีอ้างอิง TESA