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.2 | 1 ตัว | ~50-80 บาท |
| LED สีแดง | 1 ดวง | ~2 บาท |
| Resistor 220Ω | 1 ตัว | ~1 บาท |
| Resistor 10kΩ (pull-up RST) | 1 ตัว | ~1 บาท |
| Capacitor 10µF (ข้าม RST ตอนอัปโหลด) | 1 ตัว | ~3 บาท |
| สาย Dupont + Breadboard | 1 ชุด | ~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 ในตัว ต้องติดตั้งเอง
- ดาวน์โหลด Driver — จากเว็บทางการ: WCH CH341SER (CH340 ใช้ Driver เดียวกับ CH341)
- ติดตั้ง — เปิดไฟล์ EXE → กด INSTALL → รอจนขึ้น "Driver install success"
- เสียบ Arduino Nano — ต่อ USB Micro กับคอม
- ตรวจสอบ — เปิด 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 ก่อน:
- เปิด Arduino IDE → File → Preferences
- ในช่อง "Additional Boards Manager URLs" เพิ่ม:
https://raw.githubusercontent.com/damellis/attiny/ide-1.6.x-boards-manager/package_damellis_attiny_index.json - กด OK → ไปที่ Tools → Board → Boards Manager
- ค้นหา "attiny" → ติดตั้ง "ATtiny by Davis A. Mellis"
- เลือก Tools → Board → ATtiny → ATtiny25/45/85
- เลือก Processor → ATtiny85
- เลือก Clock → 8 MHz (internal) — ไม่ต้องใช้ External Crystal
ขั้นตอนที่ 3 — เตรียม Arduino Nano เป็น ISP Programmer
Arduino Nano ทำหน้าที่เป็น "สะพาน" ส่งโปรแกรมจากคอมไปยัง ATtiny85 ผ่าน SPI
- เปิด Arduino IDE → File → Examples → ArduinoISP → ArduinoISP
- เลือก Tools → Board → Arduino Nano
- เลือก Tools → Processor → ATmega328P (Old Bootloader) — Clone จีนส่วนใหญ่ใช้ Old Bootloader!
- เลือก Tools → Port → COM ที่ขึ้น (CH340)
- กด 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 Pin | → | ATtiny85 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) | เขียว |
| 5V | → | Pin 8 (VCC) | แดง |
| GND | → | Pin 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
- Tools → Board → ATtiny → ATtiny25/45/85
- Tools → Processor → ATtiny85
- Tools → Clock → 8 MHz (internal)
- 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
- ต่อวงจร ISP ตามแผนภาพด้านบน (Arduino Nano → ATtiny85)
- เชื่อมต่อ Capacitor 10µF: ขั้วบวก → RST Arduino, ขั้วลบ → GND
- ตรวจสอบ Tools → Board, Processor, Clock, Programmer ถูกต้อง
- กด Sketch → Upload Using Programmer (หรือ Ctrl+Shift+U)
- รอ... ATtiny85 รับโปรแกรมผ่าน SPI
- ถ้าขึ้น "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() error | CH340 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 responding | Board/Processor เลือกผิด | เลือก ATmega328P Old Bootloader สำหรับ Nano จีน |
| CH340 ไม่แสดงใน Device Manager | Driver ไม่ได้ติดตั้ง / OS Block | Disable 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 ตลอด
วิดีโอแนะนำ
- How to Program ATtiny85 with Arduino Nano (YouTube)
- ATtiny85 + Soil Moisture Sensor Tutorial
- CH340 Driver Install Windows 11
⚠️ หมายเหตุ: เนื้อหานี้ค้นคว้าและเรียบเรียงโดย Hermes AI — ข้อมูลทางเทคนิคควรตรวจสอบก่อนนำไปใช้งานจริง ราคาอาจเปลี่ยนแปลงตามเวลา