เขียนโปรแกรม ATtiny85 ผ่าน Arduino Nano (Clone จีน) บน Windows 11 — วัดความชื้น กระพริบ LED ไฟแดง

ATtiny85 + Arduino Nano ISP — โปรเจกต์วัดความชื้นสำหรับมือใหม่

ATtiny85 เป็น MCU จิ๋ว 8 ขา ราคา ~30-50 บาท เหมาะกับงานที่ต้องการขนาดเล็กและกินไฟน้อย ปัญหาคือ ATtiny85 ไม่มีพอร์ต USB — ต้องใช้บอร์ด Arduino ตัวอื่นเป็น "โปรแกรมเมอร์" (ISP Programmer) ในการอัปโหลดโค้ด

บทความนี้จะสอน ทีละขั้นตอน ตั้งแต่การต่อวงจร ติดตั้ง Driver บน Windows 11 จนถึงเขียนโค้ดวัดความชื้นและกระพริบ LED เมื่อดินแห้ง

อุปกรณ์ที่ต้องใช้

อุปกรณ์จำนวนราคา
ATtiny85 (DIP-8)1 ตัว~30-50 บาท
Arduino Nano Clone (CH340)1 ตัว~80-120 บาท
Capacitive Soil Moisture Sensor v1.21 ตัว~50-80 บาท
LED สีแดง1 ดวง~2 บาท
Resistor 220Ω1 ตัว~1 บาท
Resistor 10kΩ (pull-up RST)1 ตัว~1 บาท
Capacitor 10µF (ข้าม RST ตอนอัปโหลด)1 ตัว~3 บาท
สาย Dupont + Breadboard1 ชุด~30 บาท
รวม~200-290 บาท

💡 Arduino Nano Clone จีน: ราคาถูก หาง่าย (Shopee/Lazada ~80-120 บาท) ใช้ชิพ CH340G แทน FTDI — ต้องติดตั้ง Driver ก่อนใช้งานบน Windows 11

ขั้นตอนที่ 1 — ติดตั้ง Driver CH340 บน Windows 11

Arduino Nano Clone จีนใช้ชิพ CH340G แปลง USB → Serial ซึ่ง Windows 11 ไม่มี Driver ในตัว ต้องติดตั้งเอง

  1. ดาวน์โหลด Driver — จากเว็บทางการ: WCH CH341SER (CH340 ใช้ Driver เดียวกับ CH341)
  2. ติดตั้ง — เปิดไฟล์ EXE → กด INSTALL → รอจนขึ้น "Driver install success"
  3. เสียบ Arduino Nano — ต่อ USB Micro กับคอม
  4. ตรวจสอบ — เปิด Device Manager → Ports (COM & LPT) → ควรเห็น "CH340 COMx"
⚠️ ปัญหาที่พบบ่อย: Windows 11 บางรุ่นต้อง ปิด Driver Signature Enforcement ก่อนติดตั้ง — รีสตาร์ท → กด F7 → เลือก "Disable Driver Signature Enforcement" จากนั้นติดตั้ง CH340 Driver ใหม่

ขั้นตอนที่ 2 — ติดตั้ง Board Support สำหรับ ATtiny85 ใน Arduino IDE

ATtiny85 ไม่มีใน Arduino IDE เริ่มต้น ต้องเพิ่ม Board Manager URL ก่อน:

  1. เปิด Arduino IDE → File → Preferences
  2. ในช่อง "Additional Boards Manager URLs" เพิ่ม:
    https://raw.githubusercontent.com/damellis/attiny/ide-1.6.x-boards-manager/package_damellis_attiny_index.json
  3. กด OK → ไปที่ Tools → Board → Boards Manager
  4. ค้นหา "attiny" → ติดตั้ง "ATtiny by Davis A. Mellis"
  5. เลือก Tools → Board → ATtiny → ATtiny25/45/85
  6. เลือก Processor → ATtiny85
  7. เลือก Clock → 8 MHz (internal) — ไม่ต้องใช้ External Crystal

ขั้นตอนที่ 3 — เตรียม Arduino Nano เป็น ISP Programmer

Arduino Nano ทำหน้าที่เป็น "สะพาน" ส่งโปรแกรมจากคอมไปยัง ATtiny85 ผ่าน SPI

  1. เปิด Arduino IDE → File → Examples → ArduinoISP → ArduinoISP
  2. เลือก Tools → Board → Arduino Nano
  3. เลือก Tools → Processor → ATmega328P (Old Bootloader) — Clone จีนส่วนใหญ่ใช้ Old Bootloader!
  4. เลือก Tools → Port → COM ที่ขึ้น (CH340)
  5. กด Upload — รอจนขึ้น "Done uploading"

🔑 สำคัญ: Clone จีน ต้องเลือก "Old Bootloader" (ATmega328P Old Bootloader) ถ้าเลือกแบบปกติจะ Error ตอน Upload เพราะ Nano จีนใช้ Bootloader รุ่นเก่า

ขั้นตอนที่ 4 — ต่อวงจร ISP: Arduino Nano → ATtiny85

ต้องต่อสายระหว่าง Arduino Nano (ISP) กับ ATtiny85 (Target) ดังนี้:

Arduino Nano PinATtiny85 Pinสาย
D10 (SS)Pin 1 (PB5 / RST)แดง
D11 (MOSI)Pin 5 (PB0 / MOSI)ส้ม
D12 (MISO)Pin 6 (PB1 / MISO)เหลือง
D13 (SCK)Pin 7 (PB2 / SCK)เขียว
5VPin 8 (VCC)แดง
GNDPin 4 (GND)ดำ
Arduino Nano (ISP)           ATtiny85
                         ┌──────────┐
  D10 (RST) ──── PB5 ───┤1        8├─── VCC ──── 5V
  D11 (MOSI) ─── PB0 ───┤2        7├─── PB2 ──── D13 (SCK)
  D12 (MISO) ─── PB1 ───┤3        6├─── PB1 ──── D12 (MISO)
                    GND ─┤4        5├─── PB0 ──── D11 (MOSI)
                         └──────────┘

  เพิ่ม: RST → 10kΩ → 5V (pull-up)
  เพิ่ม: 10µF capacitor ระหว่าง RST (Arduino) ↔ GND
         (ป้องกัน Arduino รีเซ็ตขณะ Upload)

การต่อกับ Capacitive Moisture Sensor และ LED

ATtiny85 Pinต่อกับ
Pin 3 (PB3 / ADC3)→ Capacitive Sensor AOUT
Pin 2 (PB4 / ADC2)→ LED + 220Ω → GND
VCC (Pin 8)→ Capacitive Sensor VCC
GND (Pin 4)→ Capacitive Sensor GND
⚠️ อย่าลืม! ตอนต่อสาย ISP ให้ถอด Capacitor 10µF ออกจาก RST → GND หลังจาก Upload เสร็จ (Capacitor นี้ใช้ตอน Upload เท่านั้น ป้องกัน Arduino รีเซ็ต) ถ้าต่อทิ้งไว้ ATtiny85 จะไม่ทำงาน

ขั้นตอนที่ 5 — ตั้งค่า Programmer ใน Arduino IDE

  1. Tools → Board → ATtiny → ATtiny25/45/85
  2. Tools → Processor → ATtiny85
  3. Tools → Clock → 8 MHz (internal)
  4. Tools → Programmer → Arduino as ISP

ขั้นตอนที่ 6 — เขียนโค้ดวัดความชื้น กระพริบ LED ไฟแดง

// ATtiny85 + Capacitive Soil Moisture Sensor
// ถ้าดินแห้ง → กระพริบ LED สีแดง
// ใช้ internal 8MHz, PB3 = ADC3 = analog input

const int SENSOR_PIN = 3;   // PB3 (Pin 3) — AOUT เซ็นเซอร์
const int LED_PIN = 4;      // PB4 (Pin 2) — LED + 220Ω
const int DRY_LEVEL = 600;  // ค่า threshold — ปรับตามเซ็นเซอร์

void setup() {
  pinMode(LED_PIN, OUTPUT);
  digitalWrite(LED_PIN, LOW);
  // ATtiny85 ใช้ Clock 8MHz internal — ไม่ต้องตั้งเพิ่ม
}

void loop() {
  int moisture = readMoisture();

  if (moisture > DRY_LEVEL) {
    // ดินแห้ง กระพริบ LED 10 ครั้ง
    for (int i = 0; i < 10; i++) {
      digitalWrite(LED_PIN, HIGH);
      delay(200);
      digitalWrite(LED_PIN, LOW);
      delay(200);
    }
  } else {
    // ดินยังชื้นอยู่ — กระพริบสั้นๆ 2 ครั้ง บอกว่า OK
    digitalWrite(LED_PIN, HIGH);
    delay(50);
    digitalWrite(LED_PIN, LOW);
    delay(50);
    digitalWrite(LED_PIN, HIGH);
    delay(50);
    digitalWrite(LED_PIN, LOW);
    delay(50);
  }

  // รอ 10 วินาทีแล้ววัดใหม่
  delay(10000);
}

int readMoisture() {
  int total = 0;
  for (int i = 0; i < 5; i++) {
    total += analogRead(SENSOR_PIN);
    delay(5);
  }
  return total / 5;  // ค่าเฉลี่ย 5 ครั้ง
}

💡 เรื่อง Pin numbering: ATtiny85 มี 2 ระบบ — "Physical Pin" (1-8) และ "Digital Pin" (PB0-PB5) ในโค้ด Arduino ใช้ Digital Pin: PB0=0, PB1=1, PB2=2, PB3=3, PB4=4, PB5=5 (RST) ดังนั้น PB3 = Pin 3, PB4 = Pin 4

ขั้นตอนที่ 7 — อัปโหลดโค้ดไปยัง ATtiny85

  1. ต่อวงจร ISP ตามแผนภาพด้านบน (Arduino Nano → ATtiny85)
  2. เชื่อมต่อ Capacitor 10µF: ขั้วบวก → RST Arduino, ขั้วลบ → GND
  3. ตรวจสอบ Tools → Board, Processor, Clock, Programmer ถูกต้อง
  4. กด Sketch → Upload Using Programmer (หรือ Ctrl+Shift+U)
  5. รอ... ATtiny85 รับโปรแกรมผ่าน SPI
  6. ถ้าขึ้น "Done uploading" → ถอด Capacitor 10µF ออก → ATtiny85 เริ่มทำงานทันที!
⚠️ ใช้ "Upload Using Programmer" เท่านั้น! ห้ามกด Upload ปกติ (→) เพราะ ATtiny85 ไม่มี Bootloader — การ Upload ปกติจะ Error

การปรับค่า Threshold และ Fuse Bit

Capacitive Sensor: ค่าจะแปรผกผันกับความชื้น — ยิ่งชื้นค่ายิ่งต่ำ, ยิ่งแห้งค่ายิ่งสูง

สภาพดินค่า Analog (ADC)Action
แฉะมาก (เพิ่งรดน้ำ)200-350✅ ปกติ
ชื้น350-500✅ ปกติ
เริ่มแห้ง500-650⚠️ กระพริบ LED
แห้งมาก650-850🚨 กระพริบถี่ ๆ

Fuse Bit — ตั้ง Clock ATtiny85: ถ้าใช้ Internal 8MHz (ค่าเริ่มต้นจากโรงงาน) ไม่ต้องปรับ Fuse ถ้าต้องการประหยัดไฟสูงสุด เปลี่ยนเป็น 1MHz (ลดกระแสจาก ~5mA เหลือ ~1mA):

// ใน Arduino IDE: Tools → Clock → 1 MHz (internal)
// หรือใช้ avrdude โดยตรง:
// avrdude -c arduino -p attiny85 -P COM3 -b 19200 -U lfuse:w:0x62:m  (8MHz)
// avrdude -c arduino -p attiny85 -P COM3 -b 19200 -U lfuse:w:0x62:m  (1MHz = 0x62)

ปัญหาและวิธีแก้ไข (Windows 11)

ปัญหาสาเหตุวิธีแก้
avrdude: stk500_getsync() errorCH340 driver หรือ Port ผิดเลือก Port ใหม่, ติดตั้ง CH340 Driver ใหม่
avrdude: Expected signature for ATtiny85ต่อวงจร ISP ผิดตรวจสอบสาย MOSI/MISO/SCK/RST ว่าตรง Pin ถูกต้อง
Upload ขึ้น Error "not in sync"ลืมต่อ Capacitor 10µFต่อ 10µF ข้าม RST↔GND Arduino Nano
Programmer not respondingBoard/Processor เลือกผิดเลือก ATmega328P Old Bootloader สำหรับ Nano จีน
CH340 ไม่แสดงใน Device ManagerDriver ไม่ได้ติดตั้ง / OS BlockDisable Driver Signature Enforcement → ติดตั้งใหม่
LED ดับสนิท ไม่กระพริบขั้ว LED กลับ / Resistor ผิดLED ขาสั้น = GND, ใช้ 220Ω-470Ω
Capacitive Sensor อ่านค่า 0 ตลอดเซ็นเซอร์ไม่ได้รับไฟต่อ VCC เซ็นเซอร์กับไฟ 3.3V หรือ 5V

ต่อยอดโปรเจกต์

  • ใช้ Deep Sleep + CR2032 — ใช้ Watchdog Timer ปลุกทุก 30 นาที → แบตอยู่ได้หลายปี
  • เพิ่มสายอากาศ RF 433MHz — ส่งสัญญาณแจ้งเตือนไร้สายไปยังตัวรับในบ้าน
  • เปลี่ยนเป็น ESP8266 — ถ้าต้องการแจ้ง Line/Telegram เมื่อดินแห้ง
  • เพิ่มเซ็นเซอร์วัดแสง — ATtiny85 มี ADC 3 ช่อง (PB3, PB4, PB2) สามารถต่อ LDR เพิ่มได้
  • ใช้ Arduino Nano เป็น Programmer ประจำ — อัปโหลด ArduinoISP ครั้งเดียว เก็บ Nano ไว้ใช้เป็น Programmer ตลอด

วิดีโอแนะนำ

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

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