การควบคุมโหลดภายนอกด้วยทรานซิสเตอร์และรีเลย์


🎯 1) จุดประสงค์การเรียนรู้

✔ เข้าใจเหตุผลว่าทำไมไมโครคอนโทรลเลอร์ต้องใช้ วงจรขับ (Driver)
✔ ต่อวงจรทรานซิสเตอร์ NPN เพื่อขับรีเลย์ได้อย่างถูกต้อง
✔ เข้าใจการป้องกันกระแสย้อน (Flyback Diode)
✔ เขียนโปรแกรมควบคุมรีเลย์บน ICON-32 (ESP32)
✔ ใช้เซนเซอร์หรือปุ่มควบคุมรีเลย์ได้
✔ ปฏิบัติงานต่อวงจรกำลังอย่างปลอดภัย


🧩 2) อุปกรณ์ที่ใช้

ลำดับรายการจำนวนหมายเหตุ
1ICON-32 (ESP32)1บอร์ดหลัก
2ทรานซิสเตอร์ NPN (2N2222/BC547)1วงจรขับรีเลย์
3รีเลย์ 5V หรือ 3.3V (Module ก็ได้)1ควบคุมโหลด
4ไดโอด 1N40071ป้องกันกระแสย้อน
5ตัวต้านทาน 1kΩ1ต่อที่ Base
6LED + ตัวต้านทาน 220Ω1แสดงสถานะ
7อะแดปเตอร์ 6V2A1จ่ายไฟให้รีเลย์/โหลด
8สาย Jumper6–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) ความปลอดภัยในการใช้งานรีเลย์

  1. ถ้าใช้โหลด 220V → ต้องใช้ Relay แบบ Opto-isolated
  2. ห้ามต่อ 220V บน Breadboard
  3. ใช้ฟิวส์ป้องกันเสมอ
  4. GND ของ ICON-32 กับวงจรรีเลย์ต้องเชื่อม ร่วมกัน
  5. ห้ามจับส่วนที่เป็น 220V ระหว่างทดลอง

🧪 10) แบบฝึกหัด EP3

งานกลุ่ม / งานเดี่ยว

  1. ต่อวงจรทรานซิสเตอร์ + รีเลย์ให้ถูกต้อง
  2. เขียนโปรแกรมเปิด–ปิดรีเลย์ด้วยปุ่มกด
  3. เขียนโปรแกรมเปิด–ปิดรีเลย์แบบตั้งเวลา (5 วินาทีต่อครั้ง)
  4. ทำระบบ “ไฟกระพริบกำลังสูง” (ใช้วงจรโหลด 6V จากอะแดปเตอร์)
  5. ทำระบบ “พัดลมอัตโนมัติจาก DHT11” (Mini Project)

🧠 11) สรุป

หัวข้อสรุป
ไมโครคอนโทรลเลอร์ขับรีเลย์โดยตรงไม่ได้ต้องใช้ทรานซิสเตอร์เป็นวงจรขยาย
Flyback Diode จำเป็นป้องกันลูกดอกไฟย้อนจากรีเลย์
ทิศทางการต่อขาถูกต้องสำคัญC → Coil, B → GPIO (ผ่าน R), E → GND
Relay มี COM/NO/NCใช้ NO สำหรับควบคุมโหลดทั่วไป
โค้ดควบคุมง่ายมากdigitalWrite(pin, HIGH/LOW)