แอนิเมชันเปิด–ปิดและการตรวจการชน
Course 3 · Module 3
Suggested time: ประมาณ 3 ชั่วโมง — สร้างภาพเคลื่อนไหวเปิด–ปิดชิ้นส่วน ตรวจการชน และตั้งชื่อคลิปให้พร้อมใช้กับ Twin
Format: บทเรียนลงมือทำ — อ่านแล้วทำตามใน Blender ได้เลย; การส่งออก GLB ไป Twin อยู่ที่ M04
Lab · Clip list · ← Table of Contents · ← M02 · M04 →
เป้าหมาย (Learning Outcomes)
หัวข้อที่มีชื่อว่า “เป้าหมาย (Learning Outcomes)”เมื่อเรียนจบ คุณควรทำได้ดังนี้:
- สร้างภาพเคลื่อนไหวสำหรับเปิด–ปิดชิ้นส่วนหรือแสดงโครงสร้างภายใน
- จำลองการเคลื่อนไหวเพื่อประเมินความเหมาะสมในการใช้งาน (ชิ้นส่วนไม่ทะลุกัน)
- สร้างชุดลำดับการเคลื่อนไหว (named clips / actions) สำหรับ Twin หรือสื่อการสอน
Key phrase
Animation ใน M03 คือเครื่องมือตรวจกลไก ไม่ใช่แค่ทำให้ดูสวย — ถ้าฝาเปิดแล้วทะลุฐาน แสดงว่าดีไซน์ยังไม่พร้อมพิมพ์
How this differs from Course 2 M03
หัวข้อที่มีชื่อว่า “How this differs from Course 2 M03”| Course | M03 focus |
|---|---|
| Course 2 M03 | Virtual Device · sensor script · event simulation |
| Course 3 M03 (this module) | Animation ของผลิตภัณฑ์ใน Blender (เปิดฝา / หมุนชิ้นส่วน / คลิปสั้น) |
Read alongside this chapter
หัวข้อที่มีชื่อว่า “Read alongside this chapter”| Document | Use when |
|---|---|
| M02 — Modeling, Materials, Render | ต้องมี Enclosure_lid / Enclosure_base แยกชิ้นแล้ว |
| Insert / edit keyframes | กด I ใส่คีย์เฟรม |
| Timeline | เล่น / เลื่อนเฟรม / Auto Key |
| Actions | เก็บแอนิเมชันเป็น Action ตั้งชื่อได้ |
| Dope Sheet | จัดคีย์เฟรมทั้งคลิป |
| Graph Editor | ปรับความนุ่มของ motion (optional) |
| Set Origin | จุดหมุนของฝา (บานพับ) |
| Parenting | (ทางเลือก) ผูกชิ้นส่วนกับฝา |
| glTF Animations | เตรียมชื่อคลิปให้ export ใน M04 |
| Blender Fundamentals — Animation | วิดีโอทางการ (เลือกบท Animation) |
| INC111-2021 (Thai) | Tutorial ภาษาไทย |
| Clip list worksheet | บันทึกชื่อคลิป ความยาว แกนหมุน |
1. Why Animate the Product?
หัวข้อที่มีชื่อว่า “1. Why Animate the Product?”ภาพเคลื่อนไหวในงาน enclosure ช่วยตอบคำถามที่ภาพนิ่งตอบไม่ครบ:
| Question | What motion shows |
|---|---|
| เปิดฝาแล้วมือหรือสายชนไหม? | เส้นทางหมุนของฝา |
| ช่องภายในพอใส่ PCB / แบตเตอรี่ไหม? | เปิดฝาแล้วเห็นช่องว่าง |
| ผู้ใช้เข้าใจวิธีเปิดอย่างไร? | คลิปสั้นสำหรับสื่อการสอน |
| Twin จะเล่นสถานะอะไรได้บ้าง? | ชื่อคลิป เช่น lid_open |
ในระยะแรกของคอร์สนี้ ใช้คีย์เฟรมของ Location / Rotation เป็นหลัก
Armature (กระดูก) เก็บไว้เมื่อกลไกซับซ้อนจริง ๆ — ส่วนใหญ่ฝากล่องหมุนรอบขอบด้านหลังก็พอ
2. Prepare the Lid Pivot (Do This Before Keyframes)
หัวข้อที่มีชื่อว่า “2. Prepare the Lid Pivot (Do This Before Keyframes)”จาก M02 คุณควรมี object แยกแล้ว เช่น Enclosure_lid และ Enclosure_base
2.1 Place the origin at the hinge
หัวข้อที่มีชื่อว่า “2.1 Place the origin at the hinge”จุด Origin ของฝา = จุดหมุน (Set Origin)
ขั้นตอนที่แนะนำ:
- เลือก
Enclosure_lid - เข้า Edit Mode · เลือกขอบหรือจุดที่ต้องการเป็นบานพับ (มักเป็นขอบหลังด้านใน)
Shift+S→ Cursor to Selected- Object Mode →
Object → Set Origin → Origin to 3D Cursor - กลับ Cursor ไปที่ World Origin ถ้าต้องการ (
Shift+S→ Cursor to World Origin)
ทดสอบ: กด R แล้วหมุนรอบแกนที่ถูกต้อง (มักเป็น X หรือ Y ตามทิศวางโมเดล) — ฝาควรเปิดเหมือนบานพับ ไม่ลอยไปทั้งก้อน
2.2 Apply Rotation and Scale
หัวข้อที่มีชื่อว่า “2.2 Apply Rotation and Scale”ก่อนใส่คีย์เฟรม:
Ctrl+A→ Rotation & Scale บนฝา (และฐานถ้าจำเป็น)- อ่าน Apply
ถ้า Rotation ในแผง Item ไม่เป็นศูนย์ทั้งที่ฝาดูตรง อาจสับสนตอนใส่คีย์ — Apply ช่วยให้ค่าเริ่มต้นอ่านง่าย
3. Keyframe Workflow — Lid Open / Close
หัวข้อที่มีชื่อว่า “3. Keyframe Workflow — Lid Open / Close”อ้างอิงตัวอย่างอย่างเป็นทางการใน Editing Keyframes และควบคุมเวลาด้วย Timeline
3.1 Set frame rate and range
หัวข้อที่มีชื่อว่า “3.1 Set frame rate and range”| Setting | Lab default | Where |
|---|---|---|
| Frame rate | 24 fps หรือ 30 fps (ทีมเดียวกัน) | Output Properties |
| Clip length | 1–3 วินาที ต่อคลิป | เช่น 24–72 เฟรมที่ 24 fps |
| Scene End | ให้ยาวพอเล่นคลิป | Timeline Start/End |
ตัวอย่างคลิป lid_open ที่ 24 fps ความยาว 1.5 วินาที ≈ เฟรม 1 → 36
3.2 Insert keys (closed → open)
หัวข้อที่มีชื่อว่า “3.2 Insert keys (closed → open)”- ไปเฟรม 1 (ฝาปิด)
- เลือก
Enclosure_lid - กด
I→ เลือก Rotation (หรือ LocRot ถ้าต้องขยับด้วย) - ไปเฟรมปลายคลิป (เช่น 36)
- หมุนฝาเปิดในมุมที่ใช้งานจริง (เช่น 90° หรือ 110°)
- กด
I→ Rotation อีกครั้ง - กด Space (หรือปุ่ม Play ใน Timeline) เพื่อเล่น
ถ้าอยากให้ Blender ใส่คีย์อัตโนมัติขณะหมุน: เปิด Auto Key ใน Timeline (Timeline) — จำไว้ว่าเปิดแล้วทุกการขยับจะติดคีย์
3.3 Optional second clip — close
หัวข้อที่มีชื่อว่า “3.3 Optional second clip — close”สร้างคลิปปิดแยก หรือต่อในช่วงเฟรมถัดไป:
- เฟรม 36 = เปิด
- เฟรม 72 = ปิด (คัดลอกค่า rotation จากเฟรม 1)
สำหรับ Twin มักแยกชื่อชัดกว่า: lid_open และ lid_close
3.4 Name the Action
หัวข้อที่มีชื่อว่า “3.4 Name the Action”Animation ใน Blender ถูกเก็บใน Action (Actions)
- เปิด Dope Sheet → โหมด Action (หรือแผง Action ใน Animation workspace)
- ตั้งชื่อ Action เป็นภาษาอังกฤษสั้น เช่น
lid_open - หลีกเลี่ยงชื่อว่าง / ชื่อซ้ำ / ภาษาไทยในชื่อไฟล์คลิปที่ส่ง Twin
ชื่อที่ดี:
| Good name | Avoid |
|---|---|
lid_open |
Anim1, asdf, เปิดฝา |
lid_close |
final_final2 |
battery_reveal |
ชื่อยาวมีช่องว่างเยอะ |
จดทุคลิปใน animation-clip-list.md
4. Collision / Interference Check While Playing
หัวข้อที่มีชื่อว่า “4. Collision / Interference Check While Playing”เล่นแอนิเมชันช้า ๆ แล้วตรวจ:
| Check | Pass means |
|---|---|
| Lid vs base | ไม่ทะลุกันรุนแรงตรงบานพับ |
| Lid vs tall components | ไม่ชนหัว USB / เซ็นเซอร์ / จอ |
| Cable / finger space (concept) | มีช่องให้จินตนาการมือเปิดได้ |
| Extreme angle | มุมเปิดไม่เกินที่กลไกจริงทำได้ |
ถ้าชน:
- เลื่อนบานพับ (Origin)
- ลดมุมเปิด
- หรือกลับไปแก้รูปทรงใน M02 (ระยะห่างผนัง / ความสูงชิ้นส่วน)
Key phrase
Motion ที่ชน = บั๊กดีไซน์ ที่จับได้ถูกกว่าตอนพิมพ์แล้วค่อยรู้
ไม่จำเป็นต้องเปิด Physics simulation ใน M03 — การดูด้วยตา + Wireframe ก็เพียงพอสำหรับแล็บ
5. Useful Product Motions (Pick What Fits)
หัวข้อที่มีชื่อว่า “5. Useful Product Motions (Pick What Fits)”| Motion idea | Typical keys | Twin / teaching use |
|---|---|---|
| เปิด–ปิดฝา | Rotation on hinge | หลักของแล็บนี้ |
| เผย PCB ภายใน | Lid open + camera hold | สื่อการสอนโครงสร้าง |
| ถอดแบตเตอรี่ (แนวคิด) | Location ของ Battery_block |
แสดงช่องบริการ |
| สถานะ LED / ชิ้นหมุน | Rotation เล็กน้อยหรือ Emission (จาก M02) | demo สถานะทำงาน |
เลือกอย่างน้อย หนึ่งชุดเปิด/ปิด ให้ผ่านเกณฑ์ — ส่วนอื่นเป็นงานต่อยอด
6. Sequences for Twin and Teaching Media
หัวข้อที่มีชื่อว่า “6. Sequences for Twin and Teaching Media”6.1 Keep clips short and purposeful
หัวข้อที่มีชื่อว่า “6.1 Keep clips short and purposeful”| Guideline | Why |
|---|---|
| 1–3 วินาทีต่อคลิป | จัดการง่าย · export เบา · ผู้ชมเข้าใจจุดเดียว |
| หนึ่งคลิป = หนึ่งเจตนา | lid_open ไม่ปนการหมุนกล้องยาว |
| ชื่อคงที่ทั้งทีม | M04 / Bitstream Studio อ้างชื่อเดียวกัน |
6.2 Prepare for glTF export (preview of M04)
หัวข้อที่มีชื่อว่า “6.2 Prepare for glTF export (preview of M04)”ตาม glTF Animations:
- แอนิเมชันที่ export ได้ดีคือ keyframe ของ transform (และบางกรณี shape keys)
- ถ้ามีหลาย Action ที่จะส่งออก มักต้อง Stash ลง NLA ตามโหมด export
- ชื่อ track / action มีผลต่อชื่อคลิปในไฟล์ GLB
ใน M03 ให้ทำให้เล่นใน Blender ถูกและตั้งชื่อคลิปครบ — รายละเอียดปุ่ม export อยู่ที่ M04
6.3 Optional playblast for evidence
หัวข้อที่มีชื่อว่า “6.3 Optional playblast for evidence”บันทึกหลักฐานสั้น ๆ โดยไม่ต้องเรนเดอร์เต็ม:
- Viewport → View → Viewport Render Animation (ชื่อเมนูตามเวอร์ชัน)
- หรือบันทึกหน้าจอขณะกด Play
แนบไฟล์หรือสกรีนช็อตลำดับเฟรมคู่กับ clip list
7. Quality Gate Before M04
หัวข้อที่มีชื่อว่า “7. Quality Gate Before M04”| Check | Pass means |
|---|---|
| Lid origin at hinge | หมุนแล้วเป็นบานพับ |
| At least one open/close motion | เล่นใน Timeline ได้ |
| No severe mesh intersection | ตรวจตอนเล่น |
| Named action/clip | เช่น lid_open |
| Clip list filled | animation-clip-list.md |
| Scale from M01–M02 unchanged | PCB ยังใส่ได้ |
Next Steps
หัวข้อที่มีชื่อว่า “Next Steps”- ทำแล็บ: แล็บ
- กรอก animation-clip-list.md
- เมื่อพร้อม ไปต่อ M04 — Blender to Twin Integration
References and Further Reading
หัวข้อที่มีชื่อว่า “References and Further Reading”Blender animation (official)
หัวข้อที่มีชื่อว่า “Blender animation (official)”- Editing Keyframes (4.5 LTS)
- Timeline
- Actions
- Dope Sheet
- Graph Editor
- Set Origin
- Parenting
- glTF 2.0 — Animations
- Blender Fundamentals 4.5 LTS
- INC111-2021 Blender (Thai)
Course links
หัวข้อที่มีชื่อว่า “Course links”- M02 · M04 · Course 3 TOC
- Course 2 M03 (Virtual Device — คนละโฟกัส)
เช็กความเข้าใจ
หัวข้อที่มีชื่อว่า “เช็กความเข้าใจ”คำถามสั้นสามข้อใน quiz.yaml ผูกกับเป้าหมายของบทเรียนนี้ข้อละหนึ่งคำถาม ลองตอบเองก่อน แล้วค่อยเทียบกับเฉลยและคำอธิบายในไฟล์
ลงมือต่อที่ แล็บ: แอนิเมชันฝาและลำดับการเคลื่อนไหวสั้น
Lab · Clip list · ← TOC · ← M02 · M04 →
คำถามทบทวน
ลองตอบเองก่อน แล้วค่อยเปิดดูเฉลย
-
ก่อนใส่ keyframe การเปิดฝา ควรวาง origin ของฝาไว้ที่ใด (เป้าหมายข้อ 1)
- ตำแหน่งกล้อง
- กึ่งกลางของฉาก
- ที่บานพับ
- กึ่งกลางของฝา
ดูเฉลย
คำตอบ: C. ที่บานพับ
หัวข้อ 2.1 Place the origin at the hinge
-
ชื่อคลิปใดเหมาะสำหรับส่งเข้า Twin (เป้าหมายข้อ 2)
- `lid_open`
- `Anim1`
- `เปิดฝา`
- `final_final2`
ดูเฉลย
คำตอบ: A. `lid_open`
ตารางในหัวข้อ 3.4: ใช้ชื่อภาษาอังกฤษสั้น เลี่ยงชื่อว่าง ชื่อซ้ำ และภาษาไทยในชื่อคลิป
-
ถ้าฝาเปิดแล้วชนชิ้นส่วนสูงภายใน บทเรียนเสนอทางแก้ใด (เป้าหมายข้อ 3)
- ซ่อนชิ้นส่วนที่ชนตอนเรนเดอร์
- export ใหม่โดยไม่ต้องแก้อะไร
- เลื่อนบานพับ ลดมุมเปิด หรือกลับไปแก้รูปทรงในโมดูล 2
- เปิด Physics simulation ให้ชิ้นส่วนเด้งออก
ดูเฉลย
คำตอบ: C. เลื่อนบานพับ ลดมุมเปิด หรือกลับไปแก้รูปทรงในโมดูล 2
หัวข้อ 4: Motion ที่ชนคือบั๊กดีไซน์ที่จับได้ถูกกว่าตอนพิมพ์แล้วค่อยรู้
อ้างอิงบทเรียนนี้
ถ้านำบทเรียนนี้ไปสอน ทำสไลด์ หรือทำเอกสารต่อ ให้อ้างอิงด้วยข้อความนี้ ถ้าดัดแปลงเนื้อหา ให้เติม (ดัดแปลง)ต่อท้ายชื่อบทเรียน
"แอนิเมชันเปิด–ปิดและการตรวจการชน" จาก TESA Open Knowledge โดยสมาคมสมองกลฝังตัวไทย (Thai Embedded Systems Association: TESA) https://github.com/tesaiot/tesa-qualification-program สัญญาอนุญาต CC BY-NC 4.0
ข้อความอ้างอิงภาษาอังกฤษ: "Open/Close Animation and Interference Checks" 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/product-design/m03-motion/l01-motion-and-interaction/
บทเรียนนี้ดัดแปลงจากต้นฉบับด้านล่าง เมื่ออ้างอิงให้คงเครดิตต้นฉบับไว้ด้วย
https://github.com/drsanti/TESAIoT-Courses/blob/287c21814ba8c75f693136616dcd270349a15966/C3/M03/README.md · Original content by Asst. Prof. Dr. Santi Nuratch (ผศ.ดร.สันติ นุราช), KMUTT. Course 3 (C3/) 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