การควบคุมโหลดภายนอกด้วยทรานซิสเตอร์และรีเลย์
🎯 1) จุดประสงค์การเรียนรู้
✔ เข้าใจเหตุผลว่าทำไมไมโครคอนโทรลเลอร์ต้องใช้ วงจรขับ (Driver)
✔ ต่อวงจรทรานซิสเตอร์ NPN เพื่อขับรีเลย์ได้อย่างถูกต้อง
✔ เข้าใจการป้องกันกระแสย้อน (Flyback Diode)
✔ เขียนโปรแกรมควบคุมรีเลย์บน ICON-32 (ESP32)
✔ ใช้เซนเซอร์หรือปุ่มควบคุมรีเลย์ได้
✔ ปฏิบัติงานต่อวงจรกำลังอย่างปลอดภัย
🧩 2) อุปกรณ์ที่ใช้
| ลำดับ | รายการ | จำนวน | หมายเหตุ |
|---|---|---|---|
| 1 | ICON-32 (ESP32) | 1 | บอร์ดหลัก |
| 2 | ทรานซิสเตอร์ NPN (2N2222/BC547) | 1 | วงจรขับรีเลย์ |
| 3 | รีเลย์ 5V หรือ 3.3V (Module ก็ได้) | 1 | ควบคุมโหลด |
| 4 | ไดโอด 1N4007 | 1 | ป้องกันกระแสย้อน |
| 5 | ตัวต้านทาน 1kΩ | 1 | ต่อที่ Base |
| 6 | LED + ตัวต้านทาน 220Ω | 1 | แสดงสถานะ |
| 7 | อะแดปเตอร์ 6V2A | 1 | จ่ายไฟให้รีเลย์/โหลด |
| 8 | สาย Jumper | 6–10 | ต่อวงจร |
⚡ 3) ทำไมต้องใช้ทรานซิสเตอร์ + รีเลย์?
ไมโครคอนโทรลเลอร์ ICON-32 (ESP32):
- ให้ไฟ 3.3V
- ส่งกระแสสูงสุดประมาณ 12–20 mA
แต่ รีเลย์ต้องการกระแส 60–80 mA หรือมากกว่า จึงต้องใช้ ทรานซิสเตอร์ทำหน้าที่เป็นสวิตช์ขยายกระแส
⚙️ 4) วงจรทรานซิสเตอร์ขับรีเลย์ (Transistor Driver)
🔌 ผังวงจรพื้นฐาน
C++
+5V (หรือ 6V จากอะแดปเตอร์)
│
Relay Coil
│
┌────────┴────────┐
│ │
|>| 1N4007 Transistor (NPN)
│ │
│ Collector (C)
│ │
GND Emitter (E) → GND
ICON-32 GPIO ──[1kΩ]──► Base (B)
อธิบายส่วนประกอบ
| องค์ประกอบ | หน้าที่ |
|---|---|
| Transistor NPN | เปิด/ปิดรีเลย์ตามคำสั่งจากไมโครฯ |
| 1kΩ Resistor | จำกัดกระแสฐาน (Base) |
| Diode 1N4007 | ป้องกันแรงดันย้อนจากขดลวดรีเลย์ |
| Relay Coil | ชุดขดลวดแม่เหล็กควบคุมหน้าสัมผัส |
| NO/NC/COM | จุดสำหรับต่อโหลด |
🔌 5) การต่อส่วนโหลด (เช่น หลอดไฟหรือพัดลม)
ตัวอย่าง: หลอดไฟ 6V หรือพัดลม 6V
C++
+6V Adapter ─── COM
Relay
LOAD ────────── NO
│
GND
- NO (Normally Open) = ปิดอยู่จนกว่าจะสั่งให้ทำงาน
- COM (Common) = จุดร่วมของวงจรโหลด
📌 ไมโครคอนโทรลเลอร์ไม่สัมผัสไฟหลังรีเลย์เลย → ปลอดภัย
💻 6) ตัวอย่างโปรแกรมควบคุมรีเลย์ (ESP32/ICON-32)
C++
const int relayPin = 26;
void setup() {
pinMode(relayPin, OUTPUT);
}
void loop() {
digitalWrite(relayPin, HIGH); // เปิดรีเลย์
delay(1000);
digitalWrite(relayPin, LOW); // ปิดรีเลย์
delay(1000);
}
รีเลย์จะดัง “คลิก…คลิก…” ทุก 1 วินาที
💡 7) ควบคุมรีเลย์ด้วยปุ่มกด
ใช้วงจรปุ่มกดจาก EP1 ได้เลย ✔
C++
const int relayPin = 26;
const int button = 4;
bool state = false;
unsigned long lastPress = 0;
void setup() {
pinMode(relayPin, OUTPUT);
pinMode(button, INPUT_PULLUP);
}
void loop() {
if (digitalRead(button) == LOW && millis() - lastPress > 300) {
state = !state;
digitalWrite(relayPin, state);
lastPress = millis();
}
}
🌡️ 8) ควบคุมรีเลย์ด้วยเซนเซอร์ DHT11 (เตรียม EP4)
C++
#include <DHT.h>
#define DHTPIN 4
#define DHTTYPE DHT11
DHT dht(DHTPIN, DHTTYPE);
const int relayPin = 26;
void setup() {
Serial.begin(115200);
dht.begin();
pinMode(relayPin, OUTPUT);
}
void loop() {
float temp = dht.readTemperature();
if (temp > 30) digitalWrite(relayPin, HIGH);
else digitalWrite(relayPin, LOW);
Serial.println(temp);
delay(1000);
}
อุณหภูมิ > 30°C → เปิดรีเลย์ (เปิดพัดลม)
🔥 9) ความปลอดภัยในการใช้งานรีเลย์
- ถ้าใช้โหลด 220V → ต้องใช้ Relay แบบ Opto-isolated
- ห้ามต่อ 220V บน Breadboard
- ใช้ฟิวส์ป้องกันเสมอ
- GND ของ ICON-32 กับวงจรรีเลย์ต้องเชื่อม ร่วมกัน
- ห้ามจับส่วนที่เป็น 220V ระหว่างทดลอง
🧪 10) แบบฝึกหัด EP3
งานกลุ่ม / งานเดี่ยว
- ต่อวงจรทรานซิสเตอร์ + รีเลย์ให้ถูกต้อง
- เขียนโปรแกรมเปิด–ปิดรีเลย์ด้วยปุ่มกด
- เขียนโปรแกรมเปิด–ปิดรีเลย์แบบตั้งเวลา (5 วินาทีต่อครั้ง)
- ทำระบบ “ไฟกระพริบกำลังสูง” (ใช้วงจรโหลด 6V จากอะแดปเตอร์)
- ทำระบบ “พัดลมอัตโนมัติจาก DHT11” (Mini Project)
🧠 11) สรุป
| หัวข้อ | สรุป |
|---|---|
| ไมโครคอนโทรลเลอร์ขับรีเลย์โดยตรงไม่ได้ | ต้องใช้ทรานซิสเตอร์เป็นวงจรขยาย |
| Flyback Diode จำเป็น | ป้องกันลูกดอกไฟย้อนจากรีเลย์ |
| ทิศทางการต่อขาถูกต้องสำคัญ | C → Coil, B → GPIO (ผ่าน R), E → GND |
| Relay มี COM/NO/NC | ใช้ NO สำหรับควบคุมโหลดทั่วไป |
| โค้ดควบคุมง่ายมาก | digitalWrite(pin, HIGH/LOW) |
