ATtiny85 คืออะไร?
ATtiny85 คือไมโครคอนโทรลเลอร์ขนาดจิ๋วของ Microchip (เดิม Atmel) ตระกูล AVR — ตระกูลเดียวกับที่ Arduino Uno ใช้ (ATmega328P) แต่เล็กกว่า ถูกกว่า และกินไฟน้อยกว่ามาก
ATtiny85 มาใน package DIP-8 ขนาดเท่าเม็ดถั่ว — มีขาแค่ 8 ขา (ใช่จริง ๆ แค่ 5 GPIO) แต่แรงพอสำหรับงานควบคุมเซ็นเซอร์, กระพริบ LED, อ่านค่า Analog, และ Deep Sleep ที่ประหยัดไฟสุด ๆ
สเปกเทียบกับ Arduino Uno
| รายการ | ATtiny85 | Arduino Uno |
|---|---|---|
| Flash (พื้นที่เก็บโค้ด) | 8 KB | 32 KB |
| RAM (หน่วยความจำชั่วคราว) | 512 Bytes | 2 KB |
| ความเร็ว Clock | 8 MHz (ตั้งเป็น 16 MHz ได้) | 16 MHz |
| GPIO ที่ใช้งานได้ | 5 ขา (PB0-PB5) | 14 ขา |
| ADC (Analog Input) | 3 ช่อง (10-bit) | 6 ช่อง |
| PWM | 2 ช่อง | 6 ช่อง |
| I2C / SPI | ✅ Software / Hardware | ✅ Hardware |
| กระแสตอนทำงาน | ~5-10 mA | ~50 mA |
| กระแสตอน Deep Sleep | < 0.1 µA | ~5 µA |
| แรงดันไฟเลี้ยง | 2.7V - 5.5V | 5V (แนะนำ) |
| ราคา | ~30-50 บาท | ~200-300 บาท |
| ขนาด | DIP-8 จิ๋ว | ใหญ่เท่าบัตร |
จุดเด่นของ ATtiny85
✅ กินไฟน้อยมาก — Deep Sleep 0.1 µA
ATtiny85 ใช้ไฟตอนหลับเพียง 0.1 µA (ไมโครแอมป์) — น้อยกว่า ESP8266 ที่ 20 µA ถึง 200 เท่า!
CR2032 แบตกระดุม 220 mAh อยู่ได้เป็น 10-20 ปี ในทางทฤษฎี
✅ เล็ก — ใช้พื้นที่น้อย
ขนาด DIP-8 เทียบเท่า Op-Amp ทั่วไป ลง Breadboard ได้, ลง PCB พื้นที่ 1-2 ตร.ซม.
เหมาะกับโปรเจกต์ขนาดเล็กที่ต้องการซ่อนในกระถาง, ในกล่องกันน้ำ, หรือติดกับเซ็นเซอร์
✅ ถูก — 30-50 บาท
ถูกกว่า Arduino Uno 5-10 เท่า ถ้าโปรเจกต์ต้องการแค่ 1-2 เซ็นเซอร์ + LED — ATtiny85 คือคำตอบ
เผลอต่อผิดแล้วพัง? ซื้อใหม่ไม่เสียดาย
✅ เขียนด้วย Arduino IDE
ไม่ต้องเรียนภาษาใหม่ — ใช้ Arduino IDE เหมือนเขียน Arduino Uno ทุกประการ
เพิ่มบอร์ด ATtiny ผ่าน Board Manager แล้วเลือก "ATtiny25/45/85" ก็เขียนได้เลย
ข้อเสียที่ควรรู้
| ข้อเสีย | ผลกระทบ | ทางแก้ |
|---|---|---|
| แค่ 512 Bytes RAM | เขียน String ยาว, ใช้ Library ใหญ่ ไม่ได้ | เขียนแบบ C-style, หลีกเลี่ยง String, ใช้ PROGMEM |
| แค่ 5 GPIO | ต่ออุปกรณ์หลายตัวพร้อมกันลำบาก | ใช้ I2C (ขาเดียว) ต่อหลายอุปกรณ์, หรือใช้ ATtiny84 ที่มี 11 ขา |
| ไม่มี USB ในตัว | เสียบ USB โดยตรงไม่ได้ ต้องใช้ Programmer | ใช้ Arduino เป็น ISP — ไม่ต้องซื้อ Programmer เพิ่ม |
| ไม่มี WiFi/BLE | ต่อ Internet ไม่ได้ | ใช้ ESP8266/ESP32 ถ้าต้องการ联网 |
| ความเร็ว 8 MHz | คำนวณซับซ้อนช้า | Fuse Bit ปรับเป็น 16 MHz ได้ หรือใช้ ATtiny861 |
Pin Mapping — ATtiny85 กับ Arduino
เวลาเขียนโค้ดใน Arduino IDE — เลข Pin ที่ใช้ต้องเทียบตามนี้:
┌──────┐
PB5/RESET┫1 8┫VCC (2.7-5.5V)
PB3┫2 7┫PB2 (SCK) ← Arduino Pin 2
PB4┫3 6┫PB1 (MISO) ← Arduino Pin 1
GND┫4 5┫PB0 (MOSI) ← Arduino Pin 0
└──────┘
Arduino Pin → ATtiny85 ขา:
Pin 0 = PB0 (ขา 5) — PWM, ADC0
Pin 1 = PB1 (ขา 6) — PWM, ADC1
Pin 2 = PB2 (ขา 7) — ADC2
Pin 3 = PB3 (ขา 2) — ADC3 (Analog Input เท่านั้น)
Pin 4 = PB4 (ขา 3) — ADC2
⚠️ ขา PB5 (Pin 1) = RESET — ใช้เป็น I/O ไม่ได้ในโหมดปกติ
Source Code พื้นฐาน — ATtiny85 Blink
// ATtiny85 Blink — Arduino IDE
// PB2 (Arduino Pin 2) → LED + 220Ω → GND
const int LED = 2; // PB2
void setup() {
pinMode(LED, OUTPUT);
}
void loop() {
digitalWrite(LED, HIGH);
delay(500);
digitalWrite(LED, LOW);
delay(500);
}
วิธีอัปโหลดโค้ด — ใช้ Arduino เป็น Programmer (ISP)
ATtiny85 ไม่มี USB-Port ในตัว — ต้องใช้ Programmer ภายนอก แต่วิธีที่ง่ายที่สุดคือใช้ Arduino Uno เป็น ISP:
- เปิด Arduino IDE → File → Examples → ArduinoISP → ArduinoISP
- อัปโหลด ArduinoISP ลง Arduino Uno ปกติ
- ต่อวงจรระหว่าง Arduino Uno กับ ATtiny85:
Arduino Uno → ATtiny85 Pin 10 (SS) → PB0 (Pin 5) — MOSI Pin 11 (MOSI) → PB0 (Pin 5) — MOSI Pin 12 (MISO) → PB1 (Pin 6) — MISO Pin 13 (SCK) → PB2 (Pin 7) — SCK Pin 16 (RESET) → Pin 1 (RST) — RESET 5V → Pin 8 (VCC) GND → Pin 4 (GND) ⚠️ ต่อ 10µF Capacitor (ขั้วลบ→GND, ขั้วบวก→RESET ของ Uno) เพื่อป้องกัน Uno รีเซ็ตตัวเองตอนอัปโหลด
- Tools → Board → ATtiny25/45/85 → ATtiny85 @ 8 MHz (internal)
- Tools → Programmer → Arduino as ISP
- กด Sketch → Upload Using Programmer
โปรเจกต์ที่เหมาะกับ ATtiny85
| โปรเจกต์ | ใช้งานยังไง | จำนวนขาที่ใช้ |
|---|---|---|
| 🌿 กระถางแขวนแจ้งเตือน | อ่าน Capacitive Sensor → กระพริบ LED | 2 ขา |
| 💡 Night Light อัตโนมัติ | อ่าน LDR → เปิด/ปิด LED หรือ Relay เล็ก | 2 ขา |
| 🌡️ เทอร์โมมิเตอร์ + LCD | อ่าน DS18B20 → แสดงบน LCD I2C (ใช้แค่ 2 ขา) | 2-3 ขา |
| 🔘 Countdown Timer | กดปุ่ม → กระพริบ LED ตามเวลาที่ตั้ง | 2 ขา |
| 📊วัดความชื้น + Log | อ่านเซ็นเซอร์ → เก็บค่าใน EEPROM (256 Bytes) | 2 ขา |
| 🚦Signal Light จิ๋ว | LED หลายสี แสดงสถานะเครื่องจักร | 3-4 ขา |
เปรียบเทียบ ATtiny85 vs ATtiny84 vs ATtiny861
| รุ่น | Flash | RAM | GPIO | ราคา | เหมาะกับ |
|---|---|---|---|---|---|
| ATtiny85 | 8 KB | 512 B | 5 | ~30-50 | โปรเจกต์เล็ก ประหยัดไฟ |
| ATtiny84 | 8 KB | 512 B | 11 | ~40-60 | ต้องการขาเพิ่ม |
| ATtiny861 | 16 KB | 1 KB | 16 | ~60-100 | RAM/Flash ต้องการเยอะขึ้น |
| ATmega328P (Uno) | 32 KB | 2 KB | 14 | ~100-150 | โปรเจกต์ใหญ่ |
Fuse Bit — ปรับแต่ง ATtiny85
ATtiny85 มี Fuse Bit ที่ใช้ปรับค่าพื้นฐาน เช่น ความเร็ว clock, ขนาด flash, brown-out detection:
// ตั้งค่า Fuse Bit ด้วย avrdude: // ATtiny85 @ 8 MHz internal (ค่าเริ่มต้น) — ใช้กับ 3.3V ได้ avrdude -c arduino -P COM3 -b 19200 -p t85 -U lfuse:w:0xE2:m // ATtiny85 @ 16 MHz external crystal (ต้องต่อ Crystal ขา PB0/PB1) avrdude -c arduino -P COM3 -b 19200 -p t85 -U lfuse:w:0xEE:m ⚠️ เปลี่ยน Fuse Bit พลาด → ATtiny85 อาจไม่ทำงานอีก ⚠️ ถ้าเลือก External Clock แล้วไม่ได้ต่อ Crystal → ATtiny85 หาย!
⚠️ หมายเหตุ: เนื้อหาค้นคว้าและเรียบเรียงโดย Hermes AI — ข้อมูลทางเทคนิคควรตรวจสอบก่อนนำไปใช้งานจริง