LIVE ● ข้อมูลล่าสุด (1m) v3.1.0 · logic audited

แผนบูรณาการองค์ความรู้สู่รายวิชา
เทศบาลเมืองตาก — ระบบ IoT & AI คุณภาพอากาศ

ข้อมูลจริงตาม cadence ที่ตรวจพบของแต่ละสถานี · แยกค่าทันทีออกจากค่าเฉลี่ย 24 ชั่วโมง · UNESCO GNLC 2025 · SDG 3 · 4 · 11 · 13

อัปเดตล่าสุด: 22:56:46 · 5 August 2026
4
สถานี
ตรวจวัด
12
รายวิชา
บูรณาการ
288
ข้อมูล 24h
coverage 100%
10+
พารามิเตอร์
24/7
▼ 0.1
เทียบ
เมื่อวาน
For teachers

เริ่มจากคำถามเดียว

วันนี้อากาศเหมาะกับกิจกรรมกลางแจ้งไหม แล้วให้แต่ละวิชาช่วยตอบด้วยข้อมูลคนละมุม

For students

อ่านข้อมูลจริงก่อนสูตร

แยกค่าทันทีออกจากค่าเฉลี่ย 24 ชม. ตรวจ coverage แล้วจึงใช้ SD, AQI และ Heat Index ในบทเรียน

Data quality

ข้อมูลพร้อมใช้ในชั้นเรียน

ข้อมูลล่าสุดยังใหม่พอสำหรับกิจกรรมสดและ dashboard ในคาบเรียน

Outcome

จาก STEM สู่พลเมืองเรียนรู้

ปลายทางไม่ใช่แค่ทำกราฟ แต่ให้นักเรียนเสนอ protocol, policy และการสื่อสารต่อชุมชนได้

ภาพรวมระบบ — System Architecture

เครือข่ายตรวจวัดคุณภาพอากาศ เทศบาลเมืองตาก

ระบบ IoT 4 สถานีที่เปิดใช้งาน ประเมินรอบส่งจาก median gap ล่าสุดของแต่ละสถานี (สถานีตัวอย่าง: 5 นาที/ครั้ง) ผ่าน WiFi → Cloud Server → Dashboard สาธารณะ

📡
ESP32 + Sensors
PMS7003 · BME688 · SCD30
📶
WiFi / JSON
HTTPS POST · cadence แยกตามสถานี
🗄️
PHP + MariaDB
tb1.ac.th Server
📊
Web Dashboard
Real-time + Historical
🤖
AI Tutor
Ollama + Qwen 2.5
สถานีตรวจวัด
โรงเรียน เทศบาล 1 กิตติขจร
TH-TAK-TB1-001 · อัปเดต 2026-08-05 22:55
PM2.5 ทันที: 5.5 µg/m³
เฉลี่ย 24 ชม.: 5.7 µg/m³ · AQI US: 31 (ดี)
Temp: 31.7°C · Humidity: 58% · Heat Index: 35.7°C 🟠 Extreme caution
CO₂: 457 ppm · PM10: 0.0 µg/m³
สถานะ: 🟢 Online · อายุข้อมูล 1 นาที
Coverage 24h: 100% · WHO ratio: 0.4×
โรงเรียนเทศบาล 2 วัดดอนมูลชัย
TH-TAK-TB2-001 · อัปเดต 2026-08-05 22:55
PM2.5 ทันที: 2.9 µg/m³
เฉลี่ย 24 ชม.: 3.1 µg/m³ · AQI US: 17 (ดี)
Temp: 30.5°C · Humidity: 65% · Heat Index: 35.1°C 🟠 Extreme caution
CO₂: 455 ppm · PM10: 0.0 µg/m³
สถานะ: 🟢 Online · อายุข้อมูล 1 นาที
Coverage 24h: 100% · WHO ratio: 0.2×
โรงเรียนเทศบาล 3 วัดชัยชนะสงคราม
TH-TAK-TB3-001 · อัปเดต 2026-08-05 22:55
PM2.5 ทันที: 4.3 µg/m³
เฉลี่ย 24 ชม.: 5.3 µg/m³ · AQI US: 29 (ดี)
Temp: 31.6°C · Humidity: 61% · Heat Index: 36.5°C 🟠 Extreme caution
CO₂: — ppm · PM10: 2.0 µg/m³
สถานะ: 🟢 Online · อายุข้อมูล 1 นาที
Coverage 24h: 95% · WHO ratio: 0.4×
โรงเรียนเทศบาล 4 รัตนวิทยานุสรณ์
TH-TAK-TB4-001 · อัปเดต 2026-08-05 19:53
PM2.5 ทันที: 4.4 µg/m³
เฉลี่ย 24 ชม.: 3.1 µg/m³ · AQI US: (coverage ไม่พอ)
Temp: 31.6°C · Humidity: 59% · Heat Index: 36.0°C 🟠 Extreme caution
CO₂: 462 ppm · PM10: 4.0 µg/m³
สถานะ: 🟠 Stale · อายุข้อมูล 183 นาที
Coverage 24h: 53% · WHO ratio:
🤔 คำถามกระตุ้นความคิด — เปรียบเทียบสถานีบนฐานเวลาเดียวกัน
ระยะ Haversine: 4.69 km จากพิกัดในทะเบียนสถานี
ค่าเฉลี่ย 24 ชม.: โรงเรียน เทศบาล 1 กิตติขจร = 5.7 vs โรงเรียนเทศบาล 2 วัดดอนมูลชัย = 3.1 µg/m³
ความต่างต่อระยะทางเชิงพรรณนา: 0.55 µg/m³/km — ใช้ตั้งสมมติฐานเท่านั้น ไม่ใช่หลักฐานระบุแหล่งกำเนิดหรือทิศทางการแพร่
● LIVE ข้อมูลจริงจากเซ็นเซอร์

ค่าล่าสุดจาก เซ็นเซอร์จริง — ใช้ในบทเรียนทุกวิชา

หน้าเว็บตรวจข้อมูลใหม่ทุก 60 วินาที · ค่าทันทีใช้ดูการเปลี่ยนแปลง ส่วน AQI/WHO ใช้ค่าเฉลี่ย 24 ชั่วโมงเมื่อ coverage ≥75%

🌫️
5.5µg/m³
PM2.5
AQI 24h 31 · coverage 100%
🌡️
31.7°C
อุณหภูมิ
BME688
💧
58%RH
ความชื้นสัมพัทธ์
Relative Humidity
🫁
457ppm
CO₂
ตัวชี้วัดการระบายอากาศ: ต่ำ
☁️
0.0µg/m³
PM10
ฝุ่นหยาบ ≤10 µm
🥵
35.7°C
Heat Index
🟠 Extreme caution
📊 เปรียบเทียบ PM2.5 ถึงเวลาเดียวกัน — วันนี้ vs เมื่อวาน
วันนี้: 5.7 µg/m³ · เมื่อวาน: 5.8 µg/m³ · ▼ 0.1 µg/m³ (-2%)
วันนี้ n=276 · เมื่อวานช่วงเวลาเดียวกัน n=274 · ผลต่างเป็นเชิงพรรณนา การอธิบายสาเหตุต้องตรวจลม ฝน จุดความร้อน และคุณภาพข้อมูลเพิ่ม
📊

สถิติ 24 ชั่วโมงล่าสุด ● ข้อมูลจริง PM2.5 จาก โรงเรียน เทศบาล 1 กิตติขจร · 288/288 รอบ · coverage 100%

5.68
µg/m³
ค่าเฉลี่ย (x̄)
5.64
µg/m³
มัธยฐาน (Median)
0.23
µg/m³
SD (σ)
7.4
µg/m³
สูงสุด (Max)
5.5
µg/m³
ต่ำสุด (Min)
0.258
r (PM2.5 vs Temp)
ค่าทันที PM2.5 — 24 ชั่วโมงล่าสุด (เส้นมาตรฐานเป็นเพียงบริบท 24h)
PM2.5 เฉลี่ยรายชั่วโมง — Diurnal Pattern
ค่าต่ำสุดที่สังเกต 21:00 น. — 5.5 µg/m³
ค่าสูงสุดที่สังเกต 19:00 น. — 6.4 µg/m³
CO₂ เฉลี่ยรายชั่วโมง — ตัวชี้วัดประกอบการระบายอากาศ
ค่าเฉลี่ย 24h: 479 ppm · ใช้ดูแนวโน้มร่วมกับจำนวนคนและ CO₂ ภายนอก ไม่ใช่เกณฑ์ความปลอดภัยแบบเดี่ยว
PM2.5 เฉลี่ยรายวัน — 7 วันเต็มล่าสุด (ไม่รวมวันนี้)
วิธีอ่านกราฟและการคำนวณ: แนวโน้ม 24 ชั่วโมงใช้ข้อมูลดิบจาก pm_readings_v2 เรียงตามเวลาและสุ่มลดจุดเพื่อให้กราฟลื่น; Diurnal Pattern คือค่าเฉลี่ย PM2.5/CO₂ แยกตามชั่วโมงของวันนี้; กราฟ 7 วันใช้วันเต็ม 7 วันล่าสุดและไม่รวมวันปัจจุบัน; AQI คำนวณจากค่าเฉลี่ยเคลื่อนที่ 24 ชั่วโมงเมื่อ coverage ≥75% และแยก US EPA 2024 กับ Thai PCD; Heat Index ใช้ขั้นตอน NWS simple formula/Rothfusz ภายใต้สมมติฐานร่มและลมอ่อน; Pearson r ใช้เฉพาะคู่ข้อมูล valid ในช่วง 24 ชั่วโมงล่าสุด เป็นสถิติเชิงพรรณนา ไม่ใช่หลักฐานเหตุ-ผล; CO₂ เป็นตัวชี้วัดประกอบเรื่องการระบายอากาศ ไม่ใช่คะแนนคุณภาพอากาศภายในทั้งหมด
คณิตศาสตร์ · วิทยาศาสตร์

สูตรคำนวณ AQI พร้อมตัวอย่างจากข้อมูลจริง

เปรียบเทียบ US EPA AQI, Thai AQI และแนวทาง WHO — ฐาน PM2.5 เฉลี่ย 24 ชม. = 5.7 µg/m³ · coverage 100%

US AQI 0–50
Good
51–100
ปานกลาง
101–150
กลุ่มเสี่ยง
151–200
มีผลต่อสุขภาพ
201–500
อันตราย
ฐานการคำนวณ: ใช้ PM2.5 เฉลี่ยเคลื่อนที่ 24 ชั่วโมงจากสถานีที่เลือก จำนวน 288/288 รอบ (coverage 100%). US EPA ต้อง truncate ความเข้มข้นเหลือ 0.1 µg/m³ ก่อน interpolation; WHO 15 µg/m³ เป็นแนวทางค่าเฉลี่ย 24 ชั่วโมงและ 99th percentile ไม่ใช่ระบบ AQI หรือเส้นตัดสินจากค่าทันที
1

US EPA AQI — มาตรฐานสหรัฐอเมริกา PM2.5 เฉลี่ย 24 ชม. = 5.7 µg/m³ → AQI = 31 (ดี)

📐 สูตร US EPA AQI — Linear Interpolation
\[AQI = \frac{I_{Hi} - I_{Lo}}{BP_{Hi} - BP_{Lo}} \times (C_p - BP_{Lo}) + I_{Lo}\]
📖 คำอธิบายตัวแปร — ค่าตัวอย่างจากข้อมูลจริง PM2.5 = 5.7 µg/m³
สัญลักษณ์ ชื่อ คำอธิบาย หน่วย ค่าจริง
\(C_p\) Concentration ค่า PM2.5 จากเซ็นเซอร์ (ค่าเฉลี่ย 24h) µg/m³ 5.7
\(BP_{Lo}\) Breakpoint Low ขอบล่างของช่วงที่ \(C_p\) ตกอยู่ µg/m³ 0
\(BP_{Hi}\) Breakpoint High ขอบบนของช่วงที่ \(C_p\) ตกอยู่ µg/m³ 9
\(I_{Lo}\) Index Low ค่า AQI ที่ตรงกับ \(BP_{Lo}\) 0
\(I_{Hi}\) Index High ค่า AQI ที่ตรงกับ \(BP_{Hi}\) 50
\(AQI\) Air Quality Index ผลลัพธ์ 0–500 31
แบบฝึกหัด — คำนวณ AQI จากค่าเฉลี่ย 24 ชม. (5.7 µg/m³)
1
หาช่วง Breakpoint: \(C_p = 5.7\) → ช่วง 0 – 9
2
ค่าจากตาราง: \(BP_{Lo}=0,\ BP_{Hi}=9,\ I_{Lo}=0,\ I_{Hi}=50\)
3
แทนค่า: \[AQI = \frac{50 - 0}{9 - 0} \times (5.7 - 0) + 0\]
= 31
4
ผล: AQI = 31 ดี — ใช้ฝึกคำนวณเท่านั้น การตัดสินกิจกรรมต้องอ้างอิงนโยบายโรงเรียนที่อนุมัติและข้อมูลสุขภาพ/ความร้อนประกอบ

📋 ตาราง Breakpoint PM2.5 — US EPA (2024)

Category BPLo BPHi ILo IHi สี
Good 0.0 9.0 0 50
Moderate 9.1 35.4 51 100
Unhealthy for Sensitive 35.5 55.4 101 150
Unhealthy 55.5 125.4 151 200
Very Unhealthy 125.5 225.4 201 300
Hazardous 225.5 325.4 301 500
📚 อ้างอิง: US EPA AQI Breakpoints · PM2.5 averaging time 24 HOUR
2

Thai PCD AQI — กรมควบคุมมลพิษ AQI Thai = 10 · เกณฑ์ต่างจาก EPA

📐 สูตรเดียวกับ EPA แต่ Breakpoint ต่างกัน
\[AQI_{Thai} = \frac{I_{Hi} - I_{Lo}}{BP_{Hi} - BP_{Lo}} \times (C_p - BP_{Lo}) + I_{Lo}\]
Thai AQI และ US EPA AQI เป็นดัชนีคนละระบบ; WHO 15 µg/m³ เป็นแนวทางสุขภาพค่าเฉลี่ย 24 ชม. จึงไม่ควรเรียกรวมว่า “AQI 3 มาตรฐาน”
🤔 เปรียบเทียบ 2 ระบบ AQI กับ 1 แนวทาง — PM2.5 เฉลี่ย 24 ชม. = 5.7 µg/m³
US EPA: AQI = 31 (ดี)
Thai PCD: AQI = 10
WHO 2021: อัตราส่วนต่อแนวทาง 24h = 0.38× (15 µg/m³; 99th percentile)
บทเรียน: ค่าเท่ากัน แต่ "ระดับ" ต่างตามมาตรฐาน — นักเรียนต้องรู้ว่าดูมาตรฐานไหน
คณิตศาสตร์ ม.1–6 · Data Analytics

สถิติจาก ข้อมูล 24 ชั่วโมงจริง

ข้อมูล PM2.5 จำนวน 288 รายการ จากสถานี โรงเรียน เทศบาล 1 กิตติขจร

📐 สูตรที่ 1 — ค่าเฉลี่ยเลขคณิต (Arithmetic Mean)
\[\bar{x} = \frac{\sum_{i=1}^{n} x_i}{n}\]
✏️ ผลจากข้อมูลจริง 24h (n = 288)
\[\bar{x} = 5.68\;\mu g/m^3\] → ค่าเฉลี่ย 24h สอดคล้องกับ AQI EPA = 31 (ดี)
📐 สูตรที่ 2 — ส่วนเบี่ยงเบนมาตรฐาน (Standard Deviation)
\[s = \sqrt{\frac{\sum_{i=1}^{n}(x_i - \bar{x})^2}{n-1}}\]
✏️ ผลจากข้อมูลจริง
\[s = 0.23\;\mu g/m^3\] → SD = 0.23 µg/m³ — ค่า PM2.5 ผันผวน ±0.23 จากค่าเฉลี่ย
→ ช่วง mean ± 1 SD: 5.5–5.9 µg/m³; ในชุดข้อมูลจริงมี 95% อยู่ในช่วงนี้ (กฎ 68% ใช้ได้เมื่อแจกแจงใกล้ปกติ)
📐 สูตรที่ 3 — เปอร์เซ็นไทล์ & IQR (v3.0 ใหม่)
\[Q_1 = P_{25}, \qquad Q_3 = P_{75}, \qquad IQR = Q_3 - Q_1\] \[\text{ค่าผิดปกติ (Outlier)}: x < Q_1 - 1.5 \times IQR \quad \text{หรือ} \quad x> Q_3 + 1.5 \times IQR\]
✏️ Percentile จากข้อมูลจริง 24h
\(Q_1 = 5.59,\quad Q_3 = 5.69,\quad IQR = 0.10\)
→ ขอบเขตค่าผิดปกติ: ต่ำกว่า 5.4 หรือสูงกว่า 5.8 µg/m³
→ Median = 5.64 vs Mean = 5.68; ความต่างเพียงอย่างเดียวยังไม่พอวินิจฉัยความเบ้ ต้องดู histogram/quantiles ร่วมด้วย
📐 สูตรที่ 4 — Z-score ตรวจจับค่าผิดปกติ (v3.0 ใหม่)
\[z = \frac{x - \bar{x}}{s}\]
|z| > 2 หรือ 3 ใช้เป็น screening flag ตามบริบท ไม่ใช่หลักฐานว่าเกิดไฟไหม้/การเผา และไม่เท่ากับความน่าจะเป็น 95% หากข้อมูลไม่เป็น Normal distribution
✏️ Z-score ค่าทันที (PM2.5 = 5.5 µg/m³)
\[z = \frac{5.5 - 5.68}{0.23} = -0.74\] → อยู่ภายใน ±2 SD — ไม่ได้แปลว่า “ปกติ/ปลอดภัย” โดยอัตโนมัติ
📐 สูตรที่ 5 — สัมประสิทธิ์สหสัมพันธ์ Pearson (r)
\[r = \frac{n\sum x_i y_i - (\sum x_i)(\sum y_i)}{\sqrt{[n\sum x_i^2-(\sum x_i)^2][n\sum y_i^2-(\sum y_i)^2]}}\]
🤔 ตีความผล r = 0.258 (PM2.5 กับ Temperature)
ความสัมพันธ์ต่ำ — ค่า r ≈ 0 หมายถึงตัวแปรทั้งสองไม่ค่อยสัมพันธ์กัน
เกณฑ์เชิงพรรณนาในบทเรียน: |r| > 0.7 = สูง, 0.3–0.7 = ปานกลาง, <0.3 = ต่ำ; ต้องรายงานช่วงเวลา ขนาดตัวอย่าง และ scatter plot ร่วมด้วย
Advanced Math · วิทยาการคำนวณ ม.4–6

Kalman Filter — กรองสัญญาณรบกวนจากเซ็นเซอร์

สาธิต Kalman Filter 1D กับค่าจริงจาก PMS7003 เพื่อเรียนรู้การกรองสัญญาณ; ค่าพารามิเตอร์ Q/R ด้านล่างเป็นสมมติฐานการสอน ไม่ใช่ค่าที่สอบเทียบแล้ว

📐 Kalman Filter 1D — Predict
\[\hat{x}_{k|k-1} = \hat{x}_{k-1|k-1} \qquad P_{k|k-1} = P_{k-1|k-1} + Q\]
📐 Kalman Filter 1D — Update
\[K_k = \frac{P_{k|k-1}}{P_{k|k-1} + R}\] \[\hat{x}_{k|k} = \hat{x}_{k|k-1} + K_k \cdot (z_k - \hat{x}_{k|k-1})\] \[P_{k|k} = (1 - K_k) \cdot P_{k|k-1}\]
📖 คำอธิบายตัวแปร Kalman Filter — ค่าจากเซ็นเซอร์จริง + พารามิเตอร์สาธิต
สัญลักษณ์ ชื่อ (EN) คำอธิบาย ค่าในระบบ
\(z_k\) Measurement ค่าดิบจากเซ็นเซอร์ PMS7003 ณ เวลา k 5.5
\(K_k\) Kalman Gain "เชื่อใคร?" K→1 เชื่อเซ็นเซอร์, K→0 เชื่อค่าทำนาย 0.5025
\(Q\) Process Noise "ค่าจริงเปลี่ยนเร็วแค่ไหน" Q สูง = กรองเบา 0.01 (สมมติ)
\(R\) Measurement Noise "เซ็นเซอร์คลาดเคลื่อนแค่ไหน" R สูง = ไม่เชื่อเซ็นเซอร์ 1.0 (สมมติ)
\(\hat{x}_{k|k}\) Updated Estimate ผลลัพธ์สุดท้าย — ค่ากรองแล้ว
✏️ แบบฝึกหัด: ค่าป้อนจริง + Q/R สำหรับสาธิต
กำหนด: \(\hat{x}_0=5.7,\ P_0=1,\ Q=0.01,\ R=1.0\) · ค่าจากเซ็นเซอร์: \(z_1=5.5\) µg/m³

1
Predict: \(\hat{x}_{1|0}=5.7\), \(P_{1|0}=1+0.01=1.01\)
2
Kalman Gain: \[K_1 = \frac{1.01}{1.01+1.0} = 0.5025\]
3
Update: \[\hat{x}_{1|1} = 5.7 + 0.5025 \times (5.5-5.7)\]
= 5.59
เซ็นเซอร์บอก 5.5 µg/m³ แต่ Kalman กรองเป็น 5.59 µg/m³
ข้อจำกัด: ก่อนใช้ผลกรองเป็นข้อมูลรายงาน ต้องประมาณ Q/R จาก residual เทียบเครื่องอ้างอิง ตรวจ lag/step response และเก็บข้อมูลดิบไว้เสมอ การที่กราฟนิ่งขึ้นไม่ได้แปลว่าแม่นยำขึ้น
// C++ ตัวอย่างสำหรับห้องเรียน — ต้อง validate ก่อนใช้จริง class KalmanFilter { float x_est, P_est, Q, R; public: KalmanFilter(float q, float r, float x0=0) : Q(q), R(r), x_est(x0), P_est(1) {} float update(float z) { float P_pred = P_est + Q; // Predict float K = P_pred/(P_pred+R); // Gain x_est += K * (z - x_est); // Update P_est = (1-K) * P_pred; // Covariance return x_est; } }; // พารามิเตอร์สาธิต ไม่ใช่ผลสอบเทียบ KalmanFilter pm25Filter(0.01, 1.0, 5.7); float filtered = pm25Filter.update(5.5); // → 5.59 µg/m³
กลุ่มสาระวิทยาศาสตร์ ม.1–6

บทเรียน วิทยาศาสตร์ — หลักการทำงานของเซ็นเซอร์

PMS7003
Plantower — Laser Scattering
วัดค่า: PM1.0 · PM2.5 · PM10
ช่วงวัด: 0–500 µg/m³
Interface: UART 9600 bps
ค่าล่าสุด: 5.5 µg/m³
BME688
Bosch — MEMS 4-in-1 Gas Sensor
วัดค่า: Temp · Humidity · Pressure · Gas
Interface: I2C 0x77
ล่าสุด: 31.7°C / 58%
SCD30
Sensirion — NDIR CO₂
วัดค่า: CO₂ · Temp · Humidity
ช่วงวัด: 400–10,000 ppm · ±30 ppm
ล่าสุด: 457 ppm
🔬 Mie Scattering (PMS7003)
\[I \propto \frac{d^6}{\lambda^4}\]
I = ความเข้มแสงกระเจิง · d = เส้นผ่านศูนย์กลาง · λ = ความยาวคลื่น Laser (~650 nm)
🔬 Beer-Lambert Law (SCD30 NDIR)
\[A = \varepsilon \cdot c \cdot l\]
A = Absorbance · ε = สัมประสิทธิ์ดูดกลืน · c = ความเข้มข้น CO₂ · l = ระยะทางแสง
🥵

Heat Index — ดัชนีความร้อน (v3.0 ใหม่) วัดจาก BME688 จริง → อุณหภูมิที่ "รู้สึก" จริงเมื่อรวมความชื้น

📐 Rothfusz Regression (NOAA/NWS)
\[HI = c_1 + c_2 T + c_3 R + c_4 TR + c_5 T^2 + c_6 R^2 + c_7 T^2 R + c_8 T R^2 + c_9 T^2 R^2\]
T = อุณหภูมิ (°F) · R = ความชื้นสัมพัทธ์ (%) · c₁…c₉ = สัมประสิทธิ์ Rothfusz
✏️ Heat Index จากข้อมูลจริง
Temp: 31.7°C · RH: 58%
Heat Index = 35.7°C 🟠 Extreme caution
→ ต่างจากอุณหภูมิจริง 4.0°C — ภายใต้สมมติฐานของสูตร ความชื้นทำให้ค่ารู้สึกร้อนสูงขึ้น
สูตร NWS นี้ใช้สำหรับร่มและลมอ่อน ไม่รวมรังสีแดด เสื้อผ้า ภาระงาน หรือการปรับตัวต่ออากาศร้อน
ระดับ Heat Index (°C) อาการ คำแนะนำ
🟢 ต่ำกว่า Caution < 27 ต่ำกว่าช่วงเตือนของตาราง NWS ยังต้องดูแดด ลม ระยะเวลา และอาการ
🟡 Caution 27–32 อ่อนเพลีย ถ้าออกกำลังนาน ดื่มน้ำบ่อย พักเป็นช่วง
🟠 Extreme caution 32–41 ตะคริว เพลียแดด ลดกิจกรรม ย้ายเข้าร่ม
🔴 อันตราย 41–54 ลมแดด งดกิจกรรม เข้าอาคาร
🟣 อันตรายมาก > 54 อันตรายถึงชีวิต อยู่ในอาคารเท่านั้น
📚 อ้างอิง: US National Weather Service — Heat Index Equation · ค่ากลางแจ้งสำหรับร่ม/ลมอ่อน; ไม่แทน WBGT
กลุ่มสาระคณิตศาสตร์ ม.1–6

บทเรียน คณิตศาสตร์ จากข้อมูลจริง

ทุกโจทย์ใช้ข้อมูลจากเซ็นเซอร์จริง — ไม่ใช่ตัวเลขสมมุติ

1

สมการเชิงเส้นจากสูตร AQI (ม.2–3)เปลี่ยนสูตร AQI ให้อยู่ในรูป y = mx + b

📐 AQI ในรูปสมการเชิงเส้น
\[y = mx + b \qquad m = \frac{I_{Hi}-I_{Lo}}{BP_{Hi}-BP_{Lo}} \qquad b = I_{Lo} - m \cdot BP_{Lo}\]
✏️ ช่วง BP 0–9
\[m = \frac{50-0}{9-0} = 5.556, \qquad b = 0 - 5.556 \times 0 = 0.0\]
AQI = 5.556 × PM2.5 + 0.0
แทนค่าเฉลี่ย 24h (5.7 µg/m³): AQI ≈ 31
2

Haversine Formula — ระยะห่าง 2 สถานี (ม.4–6)ใช้พิกัด GPS จริงคำนวณระยะทางบนผิวโลก

📐 Haversine Formula
\[d = 2R \arcsin\sqrt{\sin^2\!\left(\frac{\Delta\phi}{2}\right) + \cos\phi_1 \cos\phi_2 \sin^2\!\left(\frac{\Delta\lambda}{2}\right)}\]
📖 ตัวแปร Haversine — พิกัดจริงของ 2 สถานี
สัญลักษณ์ ชื่อ ค่าจริง
\(R\) รัศมีโลก 6,371 km
\(\phi_1\) โรงเรียน เทศบาล 1 กิตติขจร 16.867284°, 99.127582°
\(\phi_2\) โรงเรียนเทศบาล 2 วัดดอนมูลชัย 16.903990°, 99.105876°
\(d\) ระยะทาง 4.690 km
✏️ ความต่างเชิงพื้นที่จากค่าเฉลี่ย 24 ชม.
โรงเรียน เทศบาล 1 กิตติขจร = 5.7 µg/m³ · โรงเรียนเทศบาล 2 วัดดอนมูลชัย = 3.1 µg/m³
ผลต่าง = 2.6 µg/m³ ÷ 4.690 km = 0.55 µg/m³/km
เป็นอัตราความต่างระหว่างจุด 2 จุด ไม่ใช่ spatial gradient field และยังใช้ระบุแหล่งกำเนิดไม่ได้
3

ร้อยละและอัตราส่วน — WHO Ratio (ม.1–2)เปรียบเทียบค่าจริงกับเกณฑ์มาตรฐาน

📐 อัตราส่วนเทียบแนวทาง WHO
\[\text{WHO Ratio} = \frac{PM2.5_{\text{24h}}}{PM2.5_{\text{WHO,24h}}} = \frac{5.7}{15} = 0.38\] \[\text{ส่วนต่างร้อยละ} = (0.38 - 1) \times 100\% = -62\%\]
🤔 ค่าเฉลี่ย 24 ชม. ต่างจากแนวทาง WHO กี่เปอร์เซ็นต์?
PM2.5 เฉลี่ย 24 ชม.: 5.7 µg/m³ · coverage 100%
แนวทาง WHO 2021: 15 µg/m³ (ค่าเฉลี่ย 24h)
→ ต่ำกว่าแนวทาง 62%
WHO 15 µg/m³ เป็นค่า 24h ที่ 99th percentile (ประมาณ 3–4 วันเกินต่อปี) ไม่ใช่เส้นแบ่ง “ปลอดภัย/อันตราย” รายวันแบบเด็ดขาด
วิทยาการคำนวณ ม.1–6

บทเรียน Coding & IoT — ตัวอย่างที่ตรวจสอบความถูกต้อง

C

ESP32 — อ่าน PM2.5 จาก PMS7003C++ · Bit Manipulation · UART Protocol

// ตัวอย่างอ่าน PMS7003 — ตรวจ frame length และ checksum ก่อนใช้ค่า #include <HardwareSerial.h> HardwareSerial pms(2); // Serial2 uint8_t frame[32]; size_t pos = 0; void setup() { Serial.begin(115200); pms.begin(9600, SERIAL_8N1, 25, 26); } void loop() { while (pms.available()) { uint8_t b = pms.read(); if (pos == 0 && b != 0x42) continue; if (pos == 1 && b != 0x4D) { pos = (b == 0x42) ? 1 : 0; continue; } frame[pos++] = b; if (pos == 32) { uint16_t frameLen = (frame[2] << 8) | frame[3]; uint16_t sum = 0; for (int i = 0; i < 30; i++) sum += frame[i]; uint16_t expected = (frame[30] << 8) | frame[31]; if (frameLen == 28 && sum == expected) { uint16_t pm25 = (frame[12] << 8) | frame[13]; Serial.printf("PM2.5=%d µg/m³\n", pm25); // ค่าทันที: 6 µg/m³ } pos = 0; } } }
📖 คำอธิบายคำสั่งสำคัญ
คำสั่ง ชื่อ คำอธิบาย
0x42, 0x4D Header Bytes สัญญาณเริ่มต้น packet ของ PMS7003 (ASCII "BM")
<< 8 Bit Shift Left เลื่อนบิตซ้าย 8 ตำแหน่ง = คูณ 256 รวม High+Low byte
frame[12], frame[13] Data Position ตำแหน่ง byte 12-13 = ค่า PM2.5 atmospheric ใน packet 32 bytes
Σ byte 0–29 Checksum ต้องเท่ากับ byte 30–31 และ frame length ต้องเป็น 28 มิฉะนั้นต้องทิ้ง frame
🐍

Python — วิเคราะห์ข้อมูลเซ็นเซอร์pandas · matplotlib · scipy · ข้อมูลจาก API จริง

# ดึงข้อมูลจาก API และแยกค่าทันทีกับค่าเฉลี่ย 24 ชั่วโมง import pandas as pd import requests, matplotlib.pyplot as plt url = "https://tb1.ac.th/tak-aqm/integration_lessons.php?api=chart&station=TH-TAK-TB1-001" r = requests.get(url, timeout=15) r.raise_for_status() df = pd.DataFrame(r.json()) df['reading_time'] = pd.to_datetime(df['reading_time']) df['pm25'] = pd.to_numeric(df['pm2_5_compensated'], errors='coerce') df['temperature'] = pd.to_numeric(df['temperature'], errors='coerce') df['temperature'] = df['temperature'].where(df['temperature'].between(-40, 85)) df = df[df['pm25'].between(0, 1000)].sort_values('reading_time') df = df.set_index('reading_time') df['pm25_24h'] = df['pm25'].rolling('24h', min_periods=216).mean() # สถิติ print(f"Mean: {df['pm25'].mean():.2f}") # → 5.68 print(f"SD: {df['pm25'].std():.2f}") # → 0.23 print(f"r: {df['pm25'].corr(df['temperature']):.3f}") # → 0.258 # Z-score screening — ใช้ค้นจุดที่ควรตรวจ ไม่ใช่ข้อสรุปสาเหตุ df['z_score'] = (df['pm25'] - df['pm25'].mean()) / df['pm25'].std(ddof=1) anomalies = df[df['z_score'].abs() > 2] print(f"Anomalies: {len(anomalies)}") # วาดกราฟ fig, ax = plt.subplots(figsize=(10, 4)) ax.plot(df.index, df['pm25'], color='#93C5FD', alpha=.45, label='instantaneous') ax.plot(df.index, df['pm25_24h'], color='#2563EB', label='rolling 24h') ax.axhline(y=37.5, color='red', ls='--', label='Thai 24h reference') ax.axhline(y=15, color='green', ls='--', label='WHO 24h guideline') plt.tight_layout(); plt.show()
ตัวอย่างนี้ใช้ cadence ที่ตรวจพบของ TH-TAK-TB1-001 (5 นาที/ครั้ง) จึงคาด 288 จุด/24 ชม. และกำหนดขั้นต่ำ 216 จุด = coverage 75% ก่อนแสดงค่า rolling 24h
กลุ่มสาระสังคมศึกษาฯ ม.1–6

บทเรียน สังคมศึกษา — SDGs, สิ่งแวดล้อม & ธรรมาภิบาล

3 สุขภาพดี
4 การศึกษา
11 เมืองยั่งยืน
13 ภูมิอากาศ
17 ความร่วมมือ

SDG 3 + 13 — สุขภาพ & สิ่งแวดล้อม

บริบทสุขภาพ: WHO ประเมินการเสียชีวิตก่อนวัยราว 7 ล้านคน/ปีจากผลรวมมลพิษอากาศภายนอกและในครัวเรือน ไม่ใช่ค่าที่อนุมานจากเซ็นเซอร์หน้านี้
ข้อมูลวันนี้: PM2.5 เฉลี่ย = 5.7 µg/m³
โจทย์วิจัยท้องถิ่น: ตรวจข้อมูลย้อนหลังรายเดือนร่วมกับจุดความร้อน ลม และฝน ก่อนสรุปรูปแบบฤดูกาลของจังหวัดตาก

SDG 11 — เมืองยั่งยืน & ธรรมาภิบาล

บทบาทเทศบาล: ตาม พ.ร.บ.สิ่งแวดล้อมแห่งชาติ
ระบบของเรา: ใช้ข้อมูลเซ็นเซอร์เป็นหลักฐานสนับสนุนหลังตรวจ coverage/คุณภาพ ไม่ใช่ฐานตัดสินนโยบายเพียงแหล่งเดียว
UNESCO GNLC 2025: เทศบาลเมืองตากได้รับการรับรอง
📝 กิจกรรม — สำรวจและเสนอแนะ
ม.1-3: สำรวจพฤติกรรมการเผาในชุมชน เขียนรายงานอ้างอิงข้อมูล PM2.5 จาก Dashboard
ม.4-6: จัดทำ "ข้อเสนอแนะเชิงนโยบาย" โดยรายงานข้อมูลจาก 4 สถานีที่เปิดใช้งาน พร้อมข้อจำกัด coverage ตัวแปรกวน และแหล่งอ้างอิงภายนอก
สุขศึกษาและพลศึกษา

บทเรียน สุขภาพ — ฝึกออกแบบแนวปฏิบัติจากข้อมูลจริง

ตารางนี้ดัดแปลงเพื่อการเรียนรู้จาก AirNow School Activity Guidance ไม่ใช่คำสั่งของโรงเรียน ต้องผ่านผู้บริหาร ครูพยาบาล และหน่วยงานสาธารณสุขก่อนนำไปใช้จริง

🏫

Decision-matrix example — กิจกรรมกลางแจ้งตาม US AQI AQI ฐาน 24h: 31 (ดี) · coverage 100%

AQI ระดับ กิจกรรมสั้น กิจกรรมยาว/หนัก สิ่งที่ต้องติดตาม
0–50 ⬅️ 🟢 Good ทำได้ตามแผน ทำได้ตามแผน ตรวจ AQI และอาการ
51–100 🟡 Moderate ทำได้ตามแผน ผู้ไวต่อมลพิษเฝ้าดูอาการ แผนโรคหืด/ยาประจำตัว
101–150 🟠 Sensitive groups ทำได้ โดยเฉพาะกิจกรรมสั้น เพิ่มพักและลดความหนัก ติดตามไอ หายใจลำบาก แน่นหน้าอก
151–200 🔴 Unhealthy เพิ่มพักและลดความหนัก พิจารณาย้ายในอาคาร/เลื่อนเวลา ติดตามอาการของทุกคน
201–500 🟣 Very unhealthy+ ย้ายในอาคารหรือเลื่อน ย้ายในอาคารหรือเลื่อน ตรวจคุณภาพอากาศภายในด้วย
📚 อ้างอิง: AirNow — Air Quality and Outdoor Activity Guidance for Schools · ต้องปรับให้เข้ากับแนวทางไทยและแผนสุขภาพของโรงเรียน
💚 สถานการณ์วันนี้ — คุณภาพอากาศ
AQI ฐาน 24 ชม.: 31 — ดี · PM2.5 = 5.7 µg/m³
ตัวอย่างการตีความ: ทำกิจกรรมได้ตามแผนและติดตามการเปลี่ยนแปลง
🥵 สถานการณ์วันนี้ — ดัชนีความร้อน
Heat Index: 35.7°C 🟠 Extreme caution
คำแนะนำ: Extreme caution: ลดความหนัก เพิ่มพัก และย้ายเข้าร่ม
Heat Index สมมติพื้นที่ร่มและลมอ่อน; แดดตรงอาจทำให้ค่ารู้สึกร้อนสูงขึ้น และไม่แทน WBGT สำหรับกิจกรรมกีฬา
AI Tutoring Systems

ระบบ AI Tutor เสริมการเรียนรู้

Ollama + Qwen 2.5 — สอนคณิตศาสตร์แบบ 1:1 ด้วยข้อมูลจริงจาก Dashboard

🤖

ตัวอย่างบทสนทนา — PM2.5 เฉลี่ย 24 ชม. = 5.7 µg/m³

🤖 AI Tutor
สวัสดี! ค่า PM2.5 เฉลี่ย 24 ชม. อยู่ที่ 5.7 µg/m³ ลองดูว่าอยู่ในช่วง Breakpoint ไหนก่อนนะ 🎯
👨‍🎓 นักเรียน
อยู่ในช่วง 0–9 µg/m³ ครับ!
🤖 AI Tutor
ถูกต้อง! 🎉 +10 XP · ลองแทนค่าดูครับ 💪 \[AQI = \frac{50-0}{9-0} \times (5.7 - 0) + 0\]

🎮 Gamification

XP: ตอบถูก +10, Combo +15, จบบท +50
Levels: 🌱 ฝึกหัด → ⭐ นักคิด → 🔥 นักแก้โจทย์ → 💎 อัจฉริยะ
Leaderboard: จัดอันดับในห้อง/ระดับชั้น

📚 เทคนิคการสอน

Socratic Method: ถามนำ ไม่เฉลยทันที
Adaptive: ตอบถูกมาก → ยากขึ้นอัตโนมัติ
RAG: สอนจากเนื้อหาที่ครูเตรียมไว้