การควบคุมปั๊ม DC 12V ด้วย MOSFET — วงจร, PWM, Soft Start

ทำไมต้องใช้ MOSFET ควบคุมปั๊ม?

ปั๊มน้ำ DC 12V เป็น Inductive Load — มีขดลวดมอเตอร์อยู่ข้างใน การใช้ Relay ควบคุมเปิด-ปิดนั้นทำได้ แต่มีข้อจำกัด:

  • ❌ ไม่สามารถปรับความเร็วปั๊มได้ — เปิดก็เต็มที่ ปิดก็สนิท
  • ❌ Relay มีอายุการใช้งานจำกัด (~100,000 ครั้ง) — ส่วนปั๊มรดน้ำวันละหลายรอบ Relay อาจพังใน 1-2 ปี
  • ❌ เปิด-ปิดทันทีแบบ Full Speed — กระแสกระชากตอนสตาร์ทอาจทำให้ปั๊มกระแทก (Water Hammer) และอายุปั๊มสั้นลง
  • ❌ ใช้กระแสเลี้ยงคอยล์ Relay มากกว่า (~40-80mA/ch)

MOSFET แก้ปัญหาเหล่านี้ได้:

  • PWM ปรับความเร็ว — เปิดเบา ๆ ค่อย ๆ เร่ง ลด Water Hammer
  • Solid State — ไม่มีชิ้นส่วนเคลื่อนไหว ไม่มีการสึกหรอ
  • Soft Start — ค่อย ๆ เพิ่ม duty cycle ป้องกันกระแสกระชาก
  • กระแสเลี้ยง Gate น้อยมาก — Arduino จ่ายได้สบาย

วงจรควบคุมปั๊มด้วย MOSFET

+12V ─────┬──────────── +12V ปั๊ม
          │
          [  FUSE 2A  ]
          │
          └──────────── Drain ─┐
                     IRLZ44N  │
          Gate ───────┤        │
          │          Source ──┼── GND
          │             │     │
         [R1 10kΩ]     │     │
          │             │     │
         GND ──────────┘     │
                              │
                        [D1 1N4007]
                          ──→──
                              │
                           GND ┘
Arduino Pin 9 (PWM) ────[R2 100Ω]──── Gate

อธิบายวงจร:

  • IRLZ44N — Logic-Level N-Channel MOSFET (Gate 5V = เปิดเต็มที่)
  • R1 (10kΩ) Pull-Down — ป้องกัน Gate ลอย ตอน Arduino ยังไม่เริ่มทำงาน ปั๊มจะไม่ทำงานเอง
  • R2 (100Ω) Gate Resistor — จำกัดกระแสตอนชาร์จ Gate ลด noise และ ringing
  • D1 (1N4007) Flyback Diode — ป้องกันแรงดันย้อนกลับจากมอเตอร์ตอนปิด ⚠️ ห้ามขาด!
  • FUSE 2A — ป้องกันกระแสเกิน ถ้ามอเตอร์ล็อกหรือ短路

⚠️ Flyback Diode ห้ามลืม! มอเตอร์ปั๊มเป็น Inductive Load — ตอนที่ MOSFET ปิด กระแสในขดลวดจะพยายามไหลต่อไป ทำให้เกิดแรงดันย้อนกลับสูง (~50-100V) ถ้าไม่มีไดโอด จะพัง MOSFET ทันที

เลือก MOSFET ยังไง?

รุ่นVdsIdRds(on)Vgs(th)Logic-Level?ราคา
IRLZ44N55V47A22mΩ1-2V✅ ใช่~15-30
IRLB872130V62A8mΩ1-2V✅ ใช่~20-40
IRF540100V28A77mΩ2-4V❌ ไม่~10-20
IRF520100V9.2A200mΩ2-4V❌ ไม่~8-15

แนะนำ: IRLZ44N — ถูกที่สุด เข้ากับ Arduino 5V ได้เลย ไม่ต้องใช้ Driver เพิ่ม สามารถควบคุมปั๊มได้ถึง ~5A โดยไม่ต้องใส่ Heat Sink (ถ้าใช้ PWM ไม่เต็ม 100% ตลอดเวลา)

⚠️ IRF540/IRF520 ไม่ใช่ Logic-Level — Gate ต้องการ ~10V จึงจะเปิดเต็มที่ ถ้าต่อกับ Arduino โดยตรง MOSFET จะเปิดไม่สุด Rds(on) สูง → ร้อน → พังได้

Source Code — Soft Start + PWM ควบคุมความเร็ว

// MOSFET Pump Control — Soft Start + Adjustable Speed
// Arduino Pin 9 → Gate (ผ่าน 100Ω)

const int PUMP_PWM = 9;   // PWM Pin
const int START_BTN = 7;  // ปุ่มกดเริ่มรดน้ำ (optional)

// รดน้ำแบบ Soft Start — ค่อย ๆ เพิ่มความเร็ว
void pumpSoftStart(int targetSpeed, int rampDelay = 30) {
  // targetSpeed: 0-255
  // rampDelay: ms ระหว่างแต่ละ step (ยิ่งมาก ยิ่งนุ่มนวล)
  for (int s = 0; s <= targetSpeed; s += 5) {
    analogWrite(PUMP_PWM, s);
    delay(rampDelay);
  }
}

// หยุดปั๊มแบบ Soft Stop — ค่อย ๆ ลดความเร็ว
void pumpSoftStop(int rampDelay = 30) {
  int current = analogRead(PUMP_PWM);  // อ่านค่าปัจจุบัน
  for (int s = 255; s >= 0; s -= 5) {
    analogWrite(PUMP_PWM, s);
    delay(rampDelay);
  }
  digitalWrite(PUMP_PWM, LOW);  // ปิดสนิท
}

// รดน้ำตามเวลาที่กำหนด ด้วยความเร็วที่กำหนด
void waterPlants(int speed, int durationMs) {
  pumpSoftStart(speed);
  delay(durationMs);
  pumpSoftStop();
}

void setup() {
  pinMode(PUMP_PWM, OUTPUT);
  digitalWrite(PUMP_PWM, LOW);  // เริ่มต้นปิด
  pinMode(START_BTN, INPUT_PULLUP);
}

void loop() {
  // ตัวอย่าง: รดน้ำทุกวันเวลา 7:00 น. ด้วยความเร็ว 80%
  // (ใช้กับ RTC — ยกตัวอย่าง logic)
  // waterPlants(200, 15000);  // 15 วินาที ที่ ~80% speed

  // หรือรดน้ำแบบปรับตามความชื้นดิน
  // int moisture = analogRead(A0);  // อ่าน Soil Moisture
  // if (moisture < 400) {
  //   waterPlants(180, 10000);
  // }

  // หรือกดปุ่มรดน้ำ
  if (digitalRead(START_BTN) == LOW) {
    waterPlants(200, 10000);  // รดน้ำ 10 วินาที
    delay(1000);  // Debounce
  }
}

โหมดการควบคุม 3 แบบ

MOSFET ควบคุมปั๊มได้ยืดหยุ่นกว่า Relay มาก:

โหมดวิธีข้อดีข้อเสีย
🔵 On/Off digitalWrite(HIGH/LOW) ง่ายสุด, เขียนโค้ดน้อย ไม่ได้ใช้ประโยชน์จาก MOSFET
🟢 Soft Start/Stop ค่อยๆ เพิ่ม/ลด PWM ยืดอายุปั๊ม, ลด Water Hammer ต้องเขียนโค้ดเพิ่ม
🟡 ปรับความเร็วตามเซ็นเซอร์ PWM แปรผันตาม Soil Moisture รดน้ำพอดี ไม่สิ้นเปลือง ซับซ้อนขึ้น

การเลือก Heat Sink

MOSFET IRLZ44N มี Rds(on) 22mΩ — ที่กระแส 2A จะเกิดความร้อน:

P = I² × R = 2² × 0.022 = 0.088W   (ใช้ PWM 100%)
P = 0.088W × 50% = 0.044W           (ใช้ PWM 50%)

ความร้อน 0.04-0.09W น้อยมาก — ไม่ต้องใส่ Heat Sink ก็ได้ ถ้าควบคุมปั๊ม ~1-3A

แต่ถ้าควบคุมปั๊มใหญ่ (5A+) หรือใช้ PWM ต่ำ ๆ (~20-30%) เป็นเวลานาน — ควรใส่ Heat Sink ขนาดเล็ก (~10-20°C/W) เพื่อความปลอดภัย

Pro Tips

  • 🔹 ใช้ Fuse เสมอ — ปั๊ม DC อาจล็อก (ถ้าตะกอนอุด) ถ้าไม่มี Fuse MOSFET จะไหม้ หรือไฟอาจลัดวงจร
  • 🔹 สายไฟหนาพอ — ปั๊ม 12V 2A ใช้สาย 1.5mm² ขึ้นไป ถ้ายาวเกิน 5m ควรใช้ 2.5mm²
  • 🔹 แยก Ground — ถ้าใช้ MOSFET หลายตัว (หลายปั๊ม) ควรแยก Source ของแต่ละตัว แล้วต่อ GND ร่วมที่จุดเดียว (Star Ground)
  • 🔹 ถ้าปั๊มใหญ่เกิน 5A — ใช้ Relay แทน หรือใช้ MOSFET + Heat Sink + พัดลมระบายความร้อน
  • 🔹 Flyback Diode ต้องเร็ว — 1N4007 ใช้ได้กับปั๊มทั่วไป แต่ถ้าปั๊มมี Brushless (BLDC) ให้ใช้ Schottky Diode (เช่น 1N5822) แทน

ราคาประมาณการ

อุปกรณ์จำนวนราคา
MOSFET IRLZ44N1~20 บาท
Resistor 100Ω1~1 บาท
Resistor 10kΩ1~1 บาท
Diode 1N40071~2 บาท
Fuse 2A + Holder1~15 บาท
Heat Sink (เล็ก)1~5-10 บาท
PCB Prototype / Perfboard1~10 บาท
รวม~50-60 บาท

เทียบกับการใช้ Relay Module (~50-80 บาท) — ราคาพอๆ กัน แต่ได้ PWM, Soft Start, และอายุการใช้งานไม่จำกัด

⚠️ หมายเหตุ: เนื้อหานี้ค้นคว้าและเรียบเรียงโดย Hermes AI — ข้อมูลทางเทคนิคควรตรวจสอบก่อนนำไปใช้งานจริง การต่อวงจรไฟฟ้ามีความเสี่ยง ควรศึกษาข้อมูลเพิ่มเติมและปรึกษาผู้เชี่ยวชาญ

⚠️ เนื้อหาถูกสร้างโดย AI (Hermes AI) — ข้อมูลทางเทคนิคอาจต้องตรวจสอบก่อนนำไปใช้งานจริง