สัปดาห์ที่ 03 · Foundation · Pre-code

Diagram 6 แบบ — ภาษาที่ AI อ่านดีกว่าคำพูด

AI โง่ลงทันทีเมื่อคำสั่งของเรา กำกวม · diagram คือเครื่องมือทำให้คำสั่ง ไม่กำกวม สัปดาห์นี้เรียน 6 แบบที่นักศึกษาวิศวกรรมต้องใช้ — เลือกใช้ให้ถูกกับสถานการณ์

เป้าหมายสัปดาห์นี้

ทำไม Diagram ถึงสำคัญในยุค AI

ลองคิด — ถ้าคุณบอก AI ว่า "ทำระบบจองเครื่อง" AI จะเดาเอง 100 อย่าง · แต่ถ้าคุณส่ง sequence diagram ของ flow การจองให้ดู AI จะ ไม่ต้องเดา · output แม่นขึ้น 10 เท่า

🧭 ไม่แน่ใจใช้แบบไหน? ลองตัวช่วยนี้

ตอบคำถามสั้น ๆ → ระบบแนะนำ diagram + เทมเพลตพร้อมใช้:

เครื่องมือเต็ม (Editor + Validator + Cheat-sheet) ดูที่ 🎨 หน้าเครื่องมือ

1️⃣ Flowchart — Process Logic

ใช้กับ: workflow ของคน, การประมวลผลใน 1 program, การตัดสินใจ if/else · ใช้บ่อยที่สุด

flowchart TD
    A([Start]) --> B{เข้าใจโจทย์?}
    B -->|No| C[ถาม TA]
    C --> B
    B -->|Yes| D[ทำการบ้าน]
    D --> E[/ส่ง Classroom/]
    E --> F([End])

↓ ผลลัพธ์ ↓

flowchart TD A([Start]) --> B{เข้าใจโจทย์?} B -->|No| C[ถาม TA] C --> B B -->|Yes| D[ทำการบ้าน] D --> E[/ส่ง Classroom/] E --> F([End])

2️⃣ Sequence Diagram — Who Talks to Who

ใช้กับ: การสื่อสารระหว่าง parts — frontend ↔ backend ↔ database, hardware ↔ cloud, user ↔ bot

sequenceDiagram
    Student->>Web: เปิดหน้าจอง
    Web->>Backend: GET /slots
    Backend->>Database: SELECT free slots
    Database-->>Backend: list of slots
    Backend-->>Web: JSON response
    Web-->>Student: แสดงช่องว่าง
    Student->>Web: เลือกช่อง + ยืนยัน
    Web->>Backend: POST /book
    Backend->>Database: INSERT booking
    Backend->>LINE Bot: แจ้งเตือน
    Backend-->>Web: success
    Web-->>Student: ใบยืนยัน

↓ ผลลัพธ์ ↓

sequenceDiagram actor Student participant Web participant Backend participant Database participant LINE as LINE Bot Student->>Web: เปิดหน้าจอง Web->>Backend: GET /slots Backend->>Database: SELECT free slots Database-->>Backend: list of slots Backend-->>Web: JSON response Web-->>Student: แสดงช่องว่าง Student->>Web: เลือกช่อง + ยืนยัน Web->>Backend: POST /book Backend->>Database: INSERT booking Backend->>LINE: แจ้งเตือน Backend-->>Web: success Web-->>Student: ใบยืนยัน
ใช้ sequence diagram เมื่อ ระบบมีหลายส่วนคุยกัน · เกิด bug ระหว่างทาง · ต้องอธิบายให้ AI ว่า "หลังจาก click แล้วเกิดอะไรขึ้น"

3️⃣ C4 Model — System Architecture

ใช้กับ: "ภาพรวมของระบบ" — มีอะไรอยู่ในระบบบ้าง, ใครใช้, ติดต่อ external อะไร · นักศึกษาปี 1 ใช้แค่ 2 ระดับแรก พอ:

L1 — Context Diagram (ระบบที่เห็นจากนอก)

3 อย่างหลัก: คน · ระบบของเรา · ระบบภายนอกที่เราเรียกใช้

flowchart LR student(["👤 Student
นักศึกษาที่อยากจอง"]) system["🏭 CNC Booking System
ระบบของเรา
เก็บ booking + แจ้งเตือน"] line[["📧 LINE Notify
External service"]] student <--> system system --> line classDef person fill:#0d3f3a,stroke:#2dd4bf,color:#fff classDef internal fill:#1e3a5f,stroke:#3776ab,stroke-width:3px,color:#fff classDef external fill:#3b2962,stroke:#8b5cf6,color:#fff class student person class system internal class line external

L2 — Container Diagram (อะไรอยู่ในระบบ)

เจาะลึก "CNC Booking System" — มีกี่ container · technology อะไร

flowchart TB student(["👤 Student"]) subgraph booking ["🏭 CNC Booking System"] direction LR frontend["Frontend
Streamlit · UI"] backend["Backend
Flask · API logic"] db[("Database
SQLite")] frontend -->|REST| backend backend -->|SQL| db end line[["📧 LINE Notify"]] student -->|browser| frontend backend -->|HTTPS| line classDef person fill:#0d3f3a,stroke:#2dd4bf,color:#fff classDef external fill:#3b2962,stroke:#8b5cf6,color:#fff class student person class line external

4️⃣ State Machine Diagram — สถานะของสิ่งของ

ใช้กับ: "สิ่งที่มีหลายสถานะ" — booking (รอ → ยืนยัน → ยกเลิก), เครื่องจักร (พร้อม → กำลังใช้ → maintenance), assignment (ส่ง → ตรวจ → ผ่าน/ไม่ผ่าน)

stateDiagram-v2
    [*] --> รอยืนยัน : นักศึกษาจอง
    รอยืนยัน --> ยืนยันแล้ว : ระบบ approve
    รอยืนยัน --> ยกเลิก : timeout 1 ชม.
    ยืนยันแล้ว --> กำลังใช้งาน : ถึงเวลานัด
    ยืนยันแล้ว --> ยกเลิก : ผู้ใช้ขอยกเลิก
    กำลังใช้งาน --> เสร็จสิ้น : กดคืน
    เสร็จสิ้น --> [*]

↓ ผลลัพธ์เมื่อ Mermaid render ↓

stateDiagram-v2 [*] --> รอยืนยัน : นักศึกษาจอง รอยืนยัน --> ยืนยันแล้ว : ระบบ approve รอยืนยัน --> ยกเลิก : timeout 1 ชม. ยืนยันแล้ว --> กำลังใช้งาน : ถึงเวลานัด ยืนยันแล้ว --> ยกเลิก : ผู้ใช้ขอยกเลิก กำลังใช้งาน --> เสร็จสิ้น : กดคืน เสร็จสิ้น --> [*]
สำคัญสำหรับ MAE State machine คือพื้นฐานของ PLC ladder logic, robot control, safety interlock — เป็นทักษะที่ใช้จนถึงปี 4

5️⃣ ER Diagram — โครงสร้างข้อมูล

ใช้กับ: "ก่อนออกแบบ database" — กำหนดว่ามีตารางอะไร, field อะไร, ความสัมพันธ์ยังไง

erDiagram
    STUDENT ||--o{ BOOKING : "ทำการจอง"
    MACHINE ||--o{ BOOKING : "ถูกจอง"
    BOOKING {
        int booking_id PK
        int student_id FK
        int machine_id FK
        datetime start_time
        datetime end_time
        string status
    }
    STUDENT {
        int student_id PK
        string name
        string email
        string line_id
    }
    MACHINE {
        int machine_id PK
        string code
        string location
        string status
    }

↓ ผลลัพธ์เมื่อ render ↓

erDiagram STUDENT ||--o{ BOOKING : "ทำการจอง" MACHINE ||--o{ BOOKING : "ถูกจอง" BOOKING { int booking_id PK int student_id FK int machine_id FK datetime start_time datetime end_time string status } STUDENT { int student_id PK string name string email string line_id } MACHINE { int machine_id PK string code string location string status }

สัญลักษณ์:

6️⃣ Block Diagram — ระบบทางกายภาพ

ใช้กับ: "ระบบฮาร์ดแวร์" — IoT, sensor → microcontroller → cloud, mechatronics

flowchart LR sensor[/"Temp Sensor
DS18B20"/] mcu(["ESP32
microcontroller"]) mqtt[["MQTT Broker
Mosquitto"]] dash[("Dashboard
Streamlit")] relay[\"Relay
เปิด/ปิดพัดลม"\] sensor -->|1-Wire| mcu mcu -->|publish| mqtt mqtt -->|subscribe| dash mcu -->|GPIO| relay classDef input fill:#0d3f3a,stroke:#34d399,color:#fff classDef cpu fill:#3b2962,stroke:#8b5cf6,color:#fff classDef io fill:#1e3a5f,stroke:#2dd4bf,color:#fff classDef output fill:#5c2618,stroke:#ff7a18,color:#fff classDef actuator fill:#5c2618,stroke:#ef4444,color:#fff class sensor input class mcu cpu class mqtt io class dash output class relay actuator

🟢 input · 🟣 cpu · 🔵 communication · 🟠 display · 🔴 actuator

📌 ตารางสรุป — ใช้แบบไหนเมื่อไหร่

แบบเหมาะกับเครื่องมือ
Flowchartprocess / workflow / if-elseMermaid, draw.io
SequenceAPI call, hardware↔cloud, bot interactionMermaid
C4 (L1+L2)"ระบบของเราคืออะไร"draw.io, Mermaid
State Machinebooking, machine, assignmentMermaid
ERก่อนสร้าง databaseMermaid, dbdiagram.io
Blockhardware system, IoTdraw.io, ปากกา+กระดาษ

🧰 Mermaid — เครื่องมือคู่ AI ที่สำคัญที่สุด

Mermaid เป็น syntax แบบ text → diagram · ข้อดี:

เทคนิคยุค AI อย่ารีบเปิด draw.io วาด · ลอง ขอ AI ให้สร้าง Mermaid ก่อน — เร็วกว่า 10 เท่า เช่น: "ทำ sequence diagram ของระบบจอง CNC ที่: นักศึกษาเปิดเว็บ → กรอกแบบฟอร์ม → ระบบเช็คว่าง → ยืนยัน → ส่ง LINE"

🎨 ลองเลย — Mermaid Live Editor

เปลี่ยน template ได้จาก dropdown (6 ชนิด) · แก้ทางซ้าย → preview ทางขวาทันที

🔍 ลองเช็ค — Flowchart Validator

วาง flowchart syntax แล้วกด ตรวจ · เครื่องมือบอกว่า Start/End/Decision ใช้ถูก semantic มั้ย

flowchart TD A([Start]) --> B[เปิดใบงาน] B --> C{เข้าใจ?} C -->|Yes| D[ทำส่ง] C -->|No| E[ถาม TA] --> B D --> F([End])

Workshop — เลือก 1 ระบบ วาด 3 แบบ

  1. เลือก 1 ปัญหาจาก W01 — ตัวเดียวกับที่เขียน Problem Statement ไว้
  2. วาด Flowchart ของ workflow ปัจจุบัน (อันที่เขียนใน W01 ก็ได้) ลองแปลงเป็น Mermaid และให้ AI ปรับให้
  3. วาด C4 Container Diagram — ระบบที่อยากสร้างมีอะไรบ้าง? (frontend, backend, database, external service)
  4. วาดอีก 1 แบบ ตามที่เหมาะ — ถ้ามี user หลายสถานะ → State machine · ถ้ามี database → ER diagram · ถ้ามี hardware → Block diagram
  5. ขอ AI ช่วยปรับ — ส่ง diagram ทั้ง 3 ให้ Claude พร้อมโจทย์: "ดูแล้วระบบนี้น่าจะลืมอะไรไปบ้าง?"
  6. บันทึก Mermaid ลงไฟล์ — สร้าง diagrams.md ใน folder ของ project — ใส่ Mermaid ทั้ง 3 ลงไป

ข้อผิดที่พบบ่อย

วาด diagram ละเอียดเกินไปตั้งแต่แรก — เริ่มที่ "7-10 กล่อง" ก่อนเสมอ · ถ้ามากกว่านี้ แสดงว่ายังคิดไม่ครบ ต้อง zoom out
ใช้ flowchart วาดทุกอย่าง — flowchart เก่งเรื่อง process · แต่อธิบาย system architecture ไม่ได้ดี · เลือกแบบที่เหมาะ
วาด diagram โดยไม่กลับไปอัพเดต — เมื่อระบบเปลี่ยน diagram ต้องเปลี่ยนตาม · Mermaid ใน git ช่วยตรงนี้

ส่งงานสัปดาห์นี้

Reference จาก slide เดิม

เนื้อหานี้เชื่อมโยงกับ Topic 1 — IntroFlowchart ของเอกสารประกอบการสอนเดิม + ขยายเป็น 6 แบบตาม Mainidea