ระบบ “พัดลมเปิดเองเมื่อร้อน / ปิดเองเมื่อเย็น” ใช้ Sensor DHT11 + ICON-32 (ESP32) + Transistor+Relay+Adapter 6V
🎯 1) จุดประสงค์การเรียนรู้เมื่อจบ EP5 นักเรียนจะสามารถ:
- อธิบายหลักการทำงานของเซนเซอร์ DHT11 (อุณหภูมิ + ความชื้น) ได้
- อ่านค่าอุณหภูมิจาก DHT11 ด้วย ICON-32 (ESP32)
- ใช้ลอจิก
if / elseสร้างเงื่อนไขควบคุมพัดลม - ใช้วงจร Transistor Driver + Relay ที่เรียนใน EP3 มาควบคุมโหลดจริง
- เข้าใจแนวคิด Hysteresis (ตั้งค่าเปิด/ปิดคนละจุด เพื่อลดการกระพริบของรีเลย์)
- สร้าง Mini Project ระบบ Smart Fan พร้อม Serial Monitor แสดงค่าได้
🧩 2) อุปกรณ์ที่ใช้
| # | รายการ | จำนวน | หมายเหตุ |
|---|---|---|---|
| 1 | ICON-32 (ESP32) | 1 | บอร์ดควบคุมหลัก |
| 2 | เซนเซอร์ DHT11 | 1 | วัดอุณหภูมิ + ความชื้น |
| 3 | ทรานซิสเตอร์ NPN (เช่น 2N2222 / BC547) | 1 | วงจรขับรีเลย์ |
| 4 | รีเลย์ 5V หรือ 6V (ถ้ามีโมดูลก็ใช้แทนได้) | 1 | ใช้สั่งพัดลม/โหลด |
| 5 | ไดโอด 1N4007 | 1 | Flyback diode |
| 6 | ตัวต้านทาน 1kΩ | 1 | ฐานทรานซิสเตอร์ |
| 7 | LED + R 220Ω | 1 | แสดงสถานะพัดลม |
| 8 | อะแดปเตอร์ 6V 2A | 1 | จ่ายไฟให้พัดลม/โหลด |
| 9 | สายจัมเปอร์ + Breadboard | – | ต่อวงจร |
🧠 3) หลักการทำงานของระบบ Smart Fan
- DHT11 วัด อุณหภูมิ (°C) และ ความชื้น (%RH)
- ICON-32 อ่านค่าจาก DHT11 แล้วเปรียบเทียบกับค่า อุณหภูมิที่กำหนด เช่น 30°C
- ถ้าอุณหภูมิ สูงกว่าค่าที่กำหนด → สั่งเปิดรีเลย์ → พัดลมทำงาน
- ถ้าอุณหภูมิ ต่ำกว่าค่าที่กำหนดเล็กน้อย → สั่งปิดรีเลย์ → พัดลมหยุด
- ใช้ Hysteresis เช่น
- เปิดพัดลมเมื่อ
Temp >= 30°C - ปิดพัดลมเมื่อ
Temp <= 28°C
เพื่อไม่ให้รีเลย์กลับไปกลับมารัว ๆ
- เปิดพัดลมเมื่อ
🔌 4) การต่อวงจร
4.1 ต่อ DHT11 เข้ากับ ICON-32
DHT11 แบบโมดูล/แบบ 3 ขา:
- ขา
VCC→ 3.3V (หรือ 5V ก็ได้ แต่ใช้ 3.3V จะปลอดภัยที่สุด) - ขา
GND→ GND - ขา
DATA→ GPIO 4 (หรือขาอื่นก็กำหนดเองได้)
C++
ICON-32 DHT11
3.3V ───► VCC
GND ───► GND
GPIO4 ───► DATA
4.2 วงจร Transistor + Relay (ทบทวนจาก EP3)
สมมติใช้:
GPIO 26ของ ICON-32 ควบคุมฐานทรานซิสเตอร์ → ขับรีเลย์- ด้านโหลดของรีเลย์ต่อกับพัดลม 6V และอะแดปเตอร์ 6V
ฝั่งควบคุม (Control)
C++
ICON-32
GPIO26 ──[1kΩ]──► B (Base) NPN Transistor
C (Collector) ────┐
│
Relay Coil
│
+6V (จาก Adapter)
GND (ICON-32) ────────────────► E (Emitter) → GND ร่วมกับ Adapter
ขดลวดรีเลย์: ขนานด้วยไดโอด 1N4007 (กลับขั้ว)
+6V ──Relay Coil───┐
│
|<| 1N4007
│
GND
ฝั่งโหลด (พัดลม 6V) – ใช้ขั้ว COM/NO ของรีเลย์
C++
+6V Adapter ─────► COM (รีเลย์)
NO (รีเลย์) ────► พัดลม 6V ───► GND Adapter
สำคัญ: GND ของ ICON-32 กับ GND ของ Adapter ต้องเชื่อมกัน เพื่อให้สัญญาณควบคุมอ้างอิงกันได้
💻 5) ติดตั้งไลบรารี DHT
ใน Arduino IDE:
- ไปที่ Tools → Manage Libraries…
- ค้นหา:
DHT - ติดตั้ง “DHT sensor library” by Adafruit และ “Adafruit Unified Sensor”
💻 6) โค้ดพื้นฐาน: อ่านค่าจาก DHT11
C++
#include <DHT.h>
#define DHTPIN 4 // ขา DATA ของ DHT11
#define DHTTYPE DHT11
DHT dht(DHTPIN, DHTTYPE);
void setup() {
Serial.begin(115200);
dht.begin();
}
void loop() {
float h = dht.readHumidity();
float t = dht.readTemperature(); // องศาเซลเซียส
if (isnan(h) || isnan(t)) {
Serial.println("อ่านค่า DHT11 ไม่ได้");
delay(1000);
return;
}
Serial.print("Temp: ");
Serial.print(t);
Serial.print(" °C Humidity: ");
Serial.print(h);
Serial.println(" %");
delay(1000);
}
กลองรันดู แล้วเอามืออังเซนเซอร์ / เป่าลมหายใจใส่ → ดูค่าเปลี่ยนใน Serial Monitor
💻 7) โค้ด Smart Fan: เปิด–ปิดพัดลมตามอุณหภูมิ (มี Hysteresis)
สมมติ:
- เปิดพัดลมเมื่อ
Temp >= 30°C - ปิดพัดลมเมื่อ
Temp <= 28°C - ใช้
GPIO 26เป็นขาควบคุมรีเลย์ - มี LED ที่
GPIO 2แสดงสถานะพัดลม (ติด = พัดลม ON)
C++
#include <DHT.h>
#define DHTPIN 4
#define DHTTYPE DHT11
DHT dht(DHTPIN, DHTTYPE);
const int relayPin = 26;
const int ledPin = 2;
const float TEMP_ON = 30.0; // อุณหภูมิที่เริ่มเปิดพัดลม
const float TEMP_OFF = 28.0; // อุณหภูมิที่ปิดพัดลม (ต่ำกว่าเล็กน้อย เพื่อลดการสลับถี่)
bool fanOn = false;
void setup() {
Serial.begin(115200);
dht.begin();
pinMode(relayPin, OUTPUT);
pinMode(ledPin, OUTPUT);
digitalWrite(relayPin, LOW); // เริ่มต้น ปิดพัดลม
digitalWrite(ledPin, LOW);
}
void loop() {
float h = dht.readHumidity();
float t = dht.readTemperature();
if (isnan(h) || isnan(t)) {
Serial.println("อ่านค่า DHT11 ไม่ได้");
delay(1000);
return;
}
Serial.print("Temp: ");
Serial.print(t);
Serial.print(" °C , Humidity: ");
Serial.print(h);
Serial.print(" % , Fan: ");
Serial.println(fanOn ? "ON" : "OFF");
// Logic ควบคุมแบบ Hysteresis
if (!fanOn && t >= TEMP_ON) {
fanOn = true;
digitalWrite(relayPin, HIGH); // เปิดรีเลย์
digitalWrite(ledPin, HIGH); // LED แสดงว่าพัดลมทำงาน
}
else if (fanOn && t <= TEMP_OFF) {
fanOn = false;
digitalWrite(relayPin, LOW); // ปิดรีเลย์
digitalWrite(ledPin, LOW);
}
delay(1000);
}
ครูสามารถเอาโค้ดนี้ไปให้เด็กลองแล้วถามนักเรียนว่า:
“ถ้า TEMP_ON และ TEMP_OFF ต่างกันน้อยมาก หรือเท่ากัน จะเกิดอะไรขึ้นครับ?” → นำเข้าสู่แนวคิด Hysteresis
🔧 8) เพิ่มปุ่ม “โหมดแมนนวล” (เลือกเองว่าจะให้พัดลมทำงานไหม)
ต่อจาก EP1/EP1.1 ได้เลย:
แนวคิด:
- กดปุ่มสลับโหมด:
- Mode 0 = Auto (ควบคุมด้วยอุณหภูมิ)
- Mode 1 = Manual Override (บังคับเปิดตลอด)
🧪 9) แบบฝึกหัด
- เปลี่ยนค่าตั้งต้น TEMP_ON / TEMP_OFF แล้วทดลองในห้องเรียน
- เพิ่มข้อความ Serial ให้แสดง “Status: COOL / WARM / HOT” ตามช่วงอุณหภูมิ เช่น
- t < 28 → COOL
- 28–32 → WARM
- 32 → HOT
- เพิ่ม LED สีเขียว/เหลือง/แดง แสดงระดับอุณหภูมิ
- ลองเปลี่ยนจากพัดลมเป็น หลอดไฟ → เป็น “ระบบโคมไฟกันชื้น”
- ให้เด็กวาด Diagram การทำงานของระบบ (Block Diagram):
DHT11 → ICON-32 → Transistor+Relay → Fan + LED
🧠 10) สรุปแนวคิดสำคัญ
| หัวข้อ | สรุป |
|---|---|
| DHT11 | วัดอุณหภูมิ (°C) + ความชื้น (%) |
| ICON-32 (ESP32) | อ่านค่าจาก DHT11 ผ่านไลบรารี + ขา GPIO |
| Relay + Transistor | ใช้ขยายกำลังควบคุมพัดลมจากสัญญาณดิจิทัลขนาดเล็ก |
| Hysteresis | ตั้งเกณฑ์เปิด/ปิดต่างกัน ลดการตัดต่อถี่ของรีเลย์ |
| Smart Fan | ตัวอย่างจริงของระบบควบคุมอัตโนมัติ (Automation) |
