ภาพรวมระบบ — System Architecture
เครือข่ายตรวจวัดคุณภาพอากาศ เทศบาลเมืองตาก
ระบบ IoT 4 สถานี ส่งข้อมูลทุก 10 นาที ผ่าน WiFi → Cloud Server → Dashboard สาธารณะ
📡
ESP32 + Sensors
PMS7003 · BME688 · SCD30
→
📶
WiFi / JSON
HTTPS POST ทุก 10 นาที
→
🗄️
PHP + MariaDB
tb1.ac.th Server
→
📊
Web Dashboard
Real-time + Historical
→
🤖
AI Tutor
Ollama + Qwen 2.5
สถานีตรวจวัด
โรงเรียน เทศบาล 1 กิตติขจร
TH-TAK-TB1-001 · อัปเดต 17:03
PM2.5: 5.3 µg/m³
· AQI: 29 (ดีมาก)
Temp: 31.6°C · Humidity: 64% · Heat Index: 37.4°C 🟠 เตือนภัย
CO₂: 457 ppm · PM10: 0.0 µg/m³
สถานะ: 🟢 Online · WHO: เกิน 0.4×
Temp: 31.6°C · Humidity: 64% · Heat Index: 37.4°C 🟠 เตือนภัย
CO₂: 457 ppm · PM10: 0.0 µg/m³
สถานะ: 🟢 Online · WHO: เกิน 0.4×
โรงเรียนเทศบาล 2 วัดดอนมูลชัย
TH-TAK-TB2-001 · อัปเดต 17:03
PM2.5: 2.5 µg/m³
· AQI: 14 (ดีมาก)
Temp: 30.3°C · Humidity: 74% · Heat Index: 37.0°C 🟠 เตือนภัย
CO₂: 414 ppm · PM10: 0.0 µg/m³
สถานะ: 🟢 Online · WHO: เกิน 0.2×
Temp: 30.3°C · Humidity: 74% · Heat Index: 37.0°C 🟠 เตือนภัย
CO₂: 414 ppm · PM10: 0.0 µg/m³
สถานะ: 🟢 Online · WHO: เกิน 0.2×
โรงเรียนเทศบาล 3 วัดชัยชนะสงคราม
TH-TAK-TB3-001 · อัปเดต 12:31
PM2.5: 9.2 µg/m³
· AQI: 51 (ดี)
Temp: 33.3°C · Humidity: 64% · Heat Index: 41.8°C 🔴 อันตราย
CO₂: 429 ppm · PM10: 8.0 µg/m³
สถานะ: 🟢 Online · WHO: เกิน 0.6×
Temp: 33.3°C · Humidity: 64% · Heat Index: 41.8°C 🔴 อันตราย
CO₂: 429 ppm · PM10: 8.0 µg/m³
สถานะ: 🟢 Online · WHO: เกิน 0.6×
โรงเรียนเทศบาล 4 รัตนวิทยานุสรณ์
TH-TAK-TB4-001 · อัปเดต 17:03
PM2.5: 2.5 µg/m³
· AQI: 14 (ดีมาก)
Temp: 29.6°C · Humidity: 75% · Heat Index: 35.2°C 🟠 เตือนภัย
CO₂: 437 ppm · PM10: 0.0 µg/m³
สถานะ: 🟢 Online · WHO: เกิน 0.2×
Temp: 29.6°C · Humidity: 75% · Heat Index: 35.2°C 🟠 เตือนภัย
CO₂: 437 ppm · PM10: 0.0 µg/m³
สถานะ: 🟢 Online · WHO: เกิน 0.2×
🤔 คำถามกระตุ้นความคิด — เปรียบเทียบ 2 สถานี
ข้อ 1: โรงเรียน เทศบาล 1 กิตติขจร = 5.3 µg/m³ vs โรงเรียนเทศบาล 2 วัดดอนมูลชัย = 2.5 µg/m³ — ผลต่าง 2.8 µg/m³ ทำไมจึงต่างกัน?ข้อ 2: ระยะห่างระหว่าง 2 สถานีประมาณ 2.68 km → Gradient = 1.03 µg/m³/km
● LIVE ข้อมูลจริงจากเซ็นเซอร์
ค่าล่าสุดจาก เซ็นเซอร์จริง — ใช้ในบทเรียนทุกวิชา
ข้อมูลอัปเดตทุก 60 วินาที — ทุกตัวเลขในหน้านี้มาจากเซ็นเซอร์ที่โรงเรียนจริง
📊 เปรียบเทียบ PM2.5 วันนี้ vs เมื่อวาน
วันนี้: 5.6 µg/m³
· เมื่อวาน: 5.8 µg/m³
·
▼ 0.2 µg/m³
(-3%)
📊
สถิติ 24 ชั่วโมงล่าสุด ● ข้อมูลจริง PM2.5 จาก โรงเรียน เทศบาล 1 กิตติขจร · 287 รายการ
5.50
µg/m³
ค่าเฉลี่ย (x̄)
5.29
µg/m³
มัธยฐาน (Median)
0.55
µg/m³
SD (σ)
7.6
µg/m³
สูงสุด (Max)
4.8
µg/m³
ต่ำสุด (Min)
-0.234
r (PM2.5 vs Temp)
แนวโน้ม PM2.5 — 24 ชั่วโมงล่าสุด (ข้อมูลจริง)
PM2.5 เฉลี่ยรายชั่วโมง — Diurnal Pattern
🌿 ดีที่สุด 09:00 น. — 5.2 µg/m³
🔴 แย่ที่สุด 02:00 น. — 6.3 µg/m³
CO₂ เฉลี่ยรายชั่วโมง — การระบายอากาศ
ค่าเฉลี่ย 24h: 492 ppm
✅ ระบายอากาศดี
PM2.5 เฉลี่ยรายวัน — 7 วันย้อนหลัง
คณิตศาสตร์ · วิทยาศาสตร์
สูตรคำนวณ AQI พร้อมตัวอย่างจากข้อมูลจริง
ระบบคำนวณ AQI 3 มาตรฐาน — ค่าล่าสุด PM2.5 = 5.3 µg/m³
0–50
ดีมาก
ดีมาก
51–100
ดี
ดี
101–150
กลุ่มเสี่ยง
กลุ่มเสี่ยง
151–200
มีผลต่อสุขภาพ
มีผลต่อสุขภาพ
201–500
อันตราย
อันตราย
1
US EPA AQI — มาตรฐานสหรัฐอเมริกา PM2.5 = 5.3 µg/m³ → AQI = 29 (ดีมาก)
📐 สูตร US EPA AQI — Linear Interpolation
\[AQI = \frac{I_{Hi} - I_{Lo}}{BP_{Hi} - BP_{Lo}} \times (C_p - BP_{Lo}) + I_{Lo}\]
| สัญลักษณ์ | ชื่อ | คำอธิบาย | หน่วย | ค่าจริง |
|---|---|---|---|---|
| \(C_p\) | Concentration | ค่า PM2.5 จากเซ็นเซอร์ (ค่าเฉลี่ย 24h) | µg/m³ | 5.5 |
| \(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 (PM2.5 ล่าสุด = 5.3 µg/m³)
1
หาช่วง Breakpoint: \(C_p = 5.3\) → ช่วง 0 – 9
2
ค่าจากตาราง: \(BP_{Lo}=0,\ BP_{Hi}=9,\ I_{Lo}=0,\ I_{Hi}=50\)
3
แทนค่า: \[AQI = \frac{50 - 0}{9 - 0} \times (5.3 - 0) + 0\]
= 29
4
ผล: AQI = 29 ดีมาก
→ 🌿 อากาศดีมาก
📋 ตาราง 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 AirNow · EPA-454/B-18-007 (2024)
2
Thai PCD AQI — กรมควบคุมมลพิษ AQI Thai = 9 · เกณฑ์ต่างจาก EPA
📐 สูตรเดียวกับ EPA แต่ Breakpoint ต่างกัน
\[AQI_{Thai} = \frac{I_{Hi} - I_{Lo}}{BP_{Hi} - BP_{Lo}} \times (C_p - BP_{Lo}) + I_{Lo}\]
เกณฑ์ไทยผ่อนปรนกว่า EPA เล็กน้อย — WHO เข้มงวดที่สุด (15 µg/m³)
🤔 เปรียบเทียบ 3 มาตรฐาน — PM2.5 = 5.3 µg/m³
US EPA: AQI = 29 (ดีมาก)Thai PCD: AQI = 9
WHO 2021: เกินเกณฑ์ 0.35 เท่า (เกณฑ์ = 15 µg/m³)
→ บทเรียน: ค่าเท่ากัน แต่ "ระดับ" ต่างตามมาตรฐาน — นักเรียนต้องรู้ว่าดูมาตรฐานไหน
คณิตศาสตร์ ม.1–6 · Data Analytics
สถิติจาก ข้อมูล 24 ชั่วโมงจริง
ข้อมูล PM2.5 จำนวน 287 รายการ จากสถานี โรงเรียน เทศบาล 1 กิตติขจร
📐 สูตรที่ 1 — ค่าเฉลี่ยเลขคณิต (Arithmetic Mean)
\[\bar{x} = \frac{\sum_{i=1}^{n} x_i}{n}\]
✏️ ผลจากข้อมูลจริง 24h (n = 287)
\[\bar{x} = 5.50\;\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.55\;\mu g/m^3\]
→ SD = 0.55 µg/m³ — ค่า PM2.5 ผันผวน ±0.55 จากค่าเฉลี่ย→ ช่วง 1σ: 5.0–6.1 µg/m³ (ครอบคลุม ~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.09,\quad Q_3 = 5.84,\quad IQR = 0.75\)→ ขอบเขตค่าผิดปกติ: ต่ำกว่า 4.0 หรือสูงกว่า 7.0 µg/m³
→ Median = 5.29 vs Mean = 5.50 — ข้อมูลค่อนข้างสมมาตร
📐 สูตรที่ 4 — Z-score ตรวจจับค่าผิดปกติ (v3.0 ใหม่)
\[z = \frac{x - \bar{x}}{s}\]
|z| > 2 = ค่าผิดปกติ, |z| > 3 = ค่าสุดขีด — ใช้ตรวจจับเหตุการณ์ผิดปกติ เช่น ไฟไหม้ การเผา
✏️ Z-score ค่าปัจจุบัน (PM2.5 = 5.3 µg/m³)
\[z = \frac{5.3 - 5.50}{0.55} = -0.44\]
→ ค่าปกติ — อยู่ในช่วง ±2σ (95% ของข้อมูล)
📐 สูตรที่ 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.234 (PM2.5 กับ Temperature)
→ ความสัมพันธ์ต่ำ — ค่า r ≈ 0 หมายถึงตัวแปรทั้งสองไม่ค่อยสัมพันธ์กัน
เกณฑ์ตีความ: |r| > 0.7 = สูง, |r| 0.3–0.7 = ปานกลาง, |r| < 0.3=ต่ำ
Advanced Math · วิทยาการคำนวณ ม.4–6
Kalman Filter — กรองสัญญาณรบกวนจากเซ็นเซอร์
PM2.5 จาก PMS7003 มี noise สูง — Kalman Filter ช่วยกรองให้นิ่งขึ้น ใช้จริงบน ESP32
📐 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}\]
| สัญลักษณ์ | ชื่อ (EN) | คำอธิบาย | ค่าในระบบ |
|---|---|---|---|
| \(z_k\) | Measurement | ค่าดิบจากเซ็นเซอร์ PMS7003 ณ เวลา k | 5.3 |
| \(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 | ผลลัพธ์สุดท้าย — ค่ากรองแล้ว | — |
✏️ แบบฝึกหัด: คำนวณ Kalman Filter จากค่าจริง
กำหนด: \(\hat{x}_0=5.5,\ P_0=1,\ Q=0.01,\ R=1.0\) · ค่าจากเซ็นเซอร์: \(z_1=5.3\) µg/m³1
Predict: \(\hat{x}_{1|0}=5.5\), \(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.5 + 0.5025 \times (5.3-5.5)\]
= 5.38
// C++ จริงบน ESP32 — Kalman Filter
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.5);
float filtered = pm25Filter.update(5.3);
// → 5.38 µg/m³
กลุ่มสาระวิทยาศาสตร์ ม.1–6
บทเรียน วิทยาศาสตร์ — หลักการทำงานของเซ็นเซอร์
PMS7003
Plantower — Laser Scattering
วัดค่า: PM1.0 · PM2.5 · PM10
ช่วงวัด: 0–500 µg/m³
Interface: UART 9600 bps
ค่าล่าสุด: 5.3 µg/m³
ช่วงวัด: 0–500 µg/m³
Interface: UART 9600 bps
ค่าล่าสุด: 5.3 µg/m³
BME688
Bosch — MEMS 4-in-1 Gas Sensor
วัดค่า: Temp · Humidity · Pressure · Gas
Interface: I2C 0x77
ล่าสุด: 31.6°C / 64%
Interface: I2C 0x77
ล่าสุด: 31.6°C / 64%
SCD30
Sensirion — NDIR CO₂
วัดค่า: CO₂ · Temp · Humidity
ช่วงวัด: 400–10,000 ppm · ±30 ppm
ล่าสุด: 457 ppm
ช่วงวัด: 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.6°C · RH: 64%→ Heat Index = 37.4°C 🟠 เตือนภัย
→ ต่างจากอุณหภูมิจริง 5.8°C — ความชื้นสูงทำให้ร้อนกว่าที่เห็น!
| ระดับ | Heat Index (°C) | อาการ | คำแนะนำ |
|---|---|---|---|
| 🟢 ปลอดภัย | < 27 | ปกติ | ทำกิจกรรมได้ตามปกติ |
| 🟡 ระวัง | 27–32 | อ่อนเพลีย ถ้าออกกำลังนาน | ดื่มน้ำบ่อย พักเป็นช่วง |
| 🟠 เตือนภัย | 32–41 | ตะคริว เพลียแดด | ลดกิจกรรม ย้ายเข้าร่ม |
| 🔴 อันตราย | 41–54 | ลมแดด | งดกิจกรรม เข้าอาคาร |
| 🟣 อันตรายมาก | > 54 | อันตรายถึงชีวิต | อยู่ในอาคารเท่านั้น |
📚 อ้างอิง: Rothfusz, L.P. 1990. NWS Technical Attachment SR 90-23
กลุ่มสาระคณิตศาสตร์ ม.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.5 µ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)}\]
| สัญลักษณ์ | ชื่อ | ค่าจริง |
|---|---|---|
| \(R\) | รัศมีโลก | 6,371 km |
| \(\phi_1\) | ละติจูด TB1 กิตติขจร | 16.8839°N |
| \(\phi_2\) | ละติจูด TB2 วัดดอนมูลชัย | 16.9046°N |
| \(d\) | ระยะทาง | ≈ 2.68 km |
✏️ ความแตกต่าง PM2.5 ระหว่าง 2 สถานี
TB1 = 5.3 µg/m³ ·
TB2 = 2.5 µg/m³ผลต่าง = 2.8 µg/m³ ÷ 2.68 km = Gradient 1.03 µg/m³/km
3
ร้อยละและอัตราส่วน — WHO Ratio (ม.1–2)เปรียบเทียบค่าจริงกับเกณฑ์มาตรฐาน
📐 อัตราส่วนเทียบเกณฑ์ WHO
\[\text{WHO Ratio} = \frac{PM2.5_{\text{actual}}}{PM2.5_{\text{WHO}}} = \frac{5.3}{15} = 0.35\]
\[\text{เกินเกณฑ์} = (0.35 - 1) \times 100\% = -65\%\]
🤔 ค่าจริงวันนี้เกินเกณฑ์ WHO กี่เปอร์เซ็นต์?
PM2.5 วันนี้: 5.3 µg/m³เกณฑ์ WHO 2021: 15 µg/m³ (ค่าเฉลี่ย 24h)
→ เกินเกณฑ์ 0%
วิทยาการคำนวณ ม.1–6
บทเรียน Coding & IoT — โค้ดจริงจากระบบ
C
ESP32 — อ่าน PM2.5 จาก PMS7003C++ · Bit Manipulation · UART Protocol
// โค้ดจริงจากระบบ v5.5.2 — อ่าน PM2.5
#include <HardwareSerial.h>
HardwareSerial pms(2); // Serial2
void setup() {
Serial.begin(115200);
pms.begin(9600, SERIAL_8N1, 25, 26);
}
void loop() {
if (pms.available() >= 32) {
uint8_t buf[32];
pms.readBytes(buf, 32);
if (buf[0]==0x42 && buf[1]==0x4D) {
int pm25 = (buf[12] << 8) | buf[13];
Serial.printf("PM2.5=%d µg/m³\n", pm25);
// ค่าจริง: 5 µg/m³
}
}
delay(1000);
}| คำสั่ง | ชื่อ | คำอธิบาย |
|---|---|---|
| 0x42, 0x4D | Header Bytes | สัญญาณเริ่มต้น packet ของ PMS7003 (ASCII "BM") |
| << 8 | Bit Shift Left | เลื่อนบิตซ้าย 8 ตำแหน่ง = คูณ 256 รวม High+Low byte |
| buf[12], buf[13] | Data Position | ตำแหน่ง byte 12-13 = ค่า PM2.5 atmospheric ใน packet 32 bytes |
🐍
Python — วิเคราะห์ข้อมูลเซ็นเซอร์pandas · matplotlib · scipy · ข้อมูลจาก API จริง
# ดึงข้อมูลจาก API จริงของโรงเรียน
import pandas as pd
import requests, matplotlib.pyplot as plt
url = "https://tb1.ac.th/integration_lessons.php?api=chart"
r = requests.get(url)
df = pd.DataFrame(r.json())
df['reading_time'] = pd.to_datetime(df['reading_time'])
df['pm25'] = pd.to_numeric(df['pm2_5_compensated'])
# สถิติ
print(f"Mean: {df['pm25'].mean():.2f}") # → 5.50
print(f"SD: {df['pm25'].std():.2f}") # → 0.55
print(f"r: {df['pm25'].corr(df['temperature']):.3f}")
# → -0.234
# Z-score anomaly detection (v3.0 ใหม่)
df['z_score'] = (df['pm25'] - df['pm25'].mean()) / df['pm25'].std()
anomalies = df[df['z_score'].abs() > 2]
print(f"Anomalies: {len(anomalies)}")
# วาดกราฟ
fig, ax = plt.subplots(figsize=(10, 4))
ax.plot(df['reading_time'], df['pm25'], color='#3B82F6')
ax.axhline(y=37.5, color='red', ls='--', label='Thai PCD')
ax.axhline(y=15, color='green', ls='--', label='WHO')
plt.tight_layout(); plt.show()
สุขศึกษาและพลศึกษา
บทเรียน สุขภาพ — โปรโตคอลโรงเรียนจากข้อมูลจริง
🏫
School Protocol — แนวปฏิบัติตาม AQI AQI วันนี้: 29 (ดีมาก)
| AQI | ระดับ | พลศึกษา | กลางแจ้ง | การป้องกัน |
|---|---|---|---|---|
| 0–50 ⬅️ | 🟢 ดีมาก | ทุกกิจกรรม | ✅ อนุญาต | ไม่จำเป็น |
| 51–100 | 🟡 ดี | ลดความหนัก | ⚠️ ≤ 30 นาที | กลุ่มเสี่ยงใส่หน้ากาก |
| 101–150 | 🟠 กลุ่มเสี่ยง | กิจกรรมเบา | ❌ งด | ทุกคน N95 |
| 151–200 | 🔴 มีผลฯ | ย้ายเข้าอาคาร | ❌ ห้าม | เครื่องฟอกอากาศ |
| 201–500 | 🟣 อันตราย | ❌ งด | ❌ ปิดหน้าต่าง | พิจารณาหยุดเรียน |
💚 สถานการณ์วันนี้ — คุณภาพอากาศ
AQI ตอนนี้: 29 — ดีมาก · PM2.5 = 5.3 µg/m³คำแนะนำ: ✅ ทำกิจกรรมกลางแจ้งได้ตามปกติ
🥵 สถานการณ์วันนี้ — ดัชนีความร้อน
Heat Index: 37.4°C 🟠 เตือนภัยคำแนะนำ: 🟠 ลดกิจกรรมกลางแจ้ง เสี่ยงเพลียแดด/ตะคริว
AI Tutoring Systems
ระบบ AI Tutor เสริมการเรียนรู้
Ollama + Qwen 2.5 — สอนคณิตศาสตร์แบบ 1:1 ด้วยข้อมูลจริงจาก Dashboard
🤖
ตัวอย่างบทสนทนา — PM2.5 วันนี้ = 5.3 µg/m³
🤖 AI Tutor
สวัสดี! วันนี้ค่า PM2.5 อยู่ที่ 5.3 µg/m³ ลองดูว่าอยู่ในช่วง Breakpoint ไหนก่อนนะ 🎯
สวัสดี! วันนี้ค่า PM2.5 อยู่ที่ 5.3 µg/m³ ลองดูว่าอยู่ในช่วง Breakpoint ไหนก่อนนะ 🎯
👨🎓 นักเรียน
อยู่ในช่วง 0–9 µg/m³ ครับ!
อยู่ในช่วง 0–9 µg/m³ ครับ!
🤖 AI Tutor
ถูกต้อง! 🎉 +10 XP · ลองแทนค่าดูครับ 💪 \[AQI = \frac{50-0}{9-0} \times (5.3 - 0) + 0\]
ถูกต้อง! 🎉 +10 XP · ลองแทนค่าดูครับ 💪 \[AQI = \frac{50-0}{9-0} \times (5.3 - 0) + 0\]
🎮 Gamification
XP: ตอบถูก +10, Combo +15, จบบท +50
Levels: 🌱 ฝึกหัด → ⭐ นักคิด → 🔥 นักแก้โจทย์ → 💎 อัจฉริยะ
Leaderboard: จัดอันดับในห้อง/ระดับชั้น
Levels: 🌱 ฝึกหัด → ⭐ นักคิด → 🔥 นักแก้โจทย์ → 💎 อัจฉริยะ
Leaderboard: จัดอันดับในห้อง/ระดับชั้น
📚 เทคนิคการสอน
Socratic Method: ถามนำ ไม่เฉลยทันที
Adaptive: ตอบถูกมาก → ยากขึ้นอัตโนมัติ
RAG: สอนจากเนื้อหาที่ครูเตรียมไว้
Adaptive: ตอบถูกมาก → ยากขึ้นอัตโนมัติ
RAG: สอนจากเนื้อหาที่ครูเตรียมไว้
บทเรียน สังคมศึกษา — SDGs, สิ่งแวดล้อม & ธรรมาภิบาล
SDG 3 + 13 — สุขภาพ & สิ่งแวดล้อม
ข้อมูลวันนี้: PM2.5 เฉลี่ย = 5.5 µg/m³
จ.ตาก: ฤดูหมอกควัน (ม.ค.–เม.ย.) PM2.5 เกินเกณฑ์บ่อย
SDG 11 — เมืองยั่งยืน & ธรรมาภิบาล
ระบบของเรา: เทศบาลเมืองตากใช้ข้อมูลจากเซ็นเซอร์ตัดสินใจนโยบาย
UNESCO GNLC 2025: เทศบาลเมืองตากได้รับการรับรอง
ม.4-6: จัดทำ "ข้อเสนอแนะเชิงนโยบาย" เสนอต่อเทศบาลเมืองตาก วิเคราะห์จากข้อมูลเซ็นเซอร์ 2 สถานี