กลับไปหน้ารวมไฟล์
low-power-library-for-arduino-c33-6a7c6a.md

ชื่อโปรเจกต์: Low Power library for Arduino C33

วิศวกรรมระดับไมโครแอมแปร์: การหลับของ CPU ที่ใช้พลังงานต่ำ

การใช้งาน Arduino ด้วยแบตเตอรี่ 9V ตามปกติจะทำให้แบตเตอรี่หมดภายใน 48 ชั่วโมง เพราะโปรเซสเซอร์ 16MHz ทำงานด้วยความเร็วสูงมาก เหมือนวิ่งด้วยความเร็วล้านไมล์ต่อชั่วโมง แม้จะไม่ได้ทำอะไรเลยก็ตาม Low Power Library for Arduino C33 บังคับให้นักพัฒนาเลิกใช้ฟังก์ชัน delay() อย่างสิ้นเชิง และแทนที่ด้วย "Sleep States" ระดับรีจิสเตอร์ของ ATmega ที่ซับซ้อนและใหญ่โต ซึ่งจะลดการใช้พลังงานไฟฟ้าลงเหลือเพียงเศษส่วนของ Micro-Amp!

invisible_mess_glasses_relay_schema_1772681179521.png

กิจวัตรการเข้าสู่โหมด Sleep (Avr/Sleep.h & LowPower.h)

ในการสร้างอุปกรณ์ที่ใช้แบตเตอรี่และใช้งานได้นาน 2 ปีด้วยแบตเตอรี่ AA สองก้อน คุณต้องทำให้โปรเซสเซอร์เข้าสู่ SLEEP_MODE_PWR_DOWN

  1. ข้อผิดพลาดทางสถาปัตยกรรม: เมื่อคุณสั่งให้ Arduino เข้าสู่โหมด "Sleep" มันจะหยุดทำงานโดยสมบูรณ์ มันจะหยุดประมวลผลโค้ดทั้งหมด!
  2. ตัวจับเวลา millis() ทั่วไปจะหยุดทำงาน เพราะฮาร์ดแวร์ Timer ถูกปิดเพื่อประหยัดพลังงาน!
  3. การประมวลผลแบบ LowPower:
    #include <LowPower.h>
    
    void loop() {
      readSensorAndSaveToSDCard();
      // ปิด CPU ทั้งหมดอย่างรวดเร็วเป็นเวลา 8 วินาทีเป๊ะ!
      LowPower.powerDown(SLEEP_8S, ADC_OFF, BOD_OFF);
      // โค้ดจะทำงานต่อจากจุดนี้ เป๊ะๆ หลังจาก 8 วินาที!
    }
    
  4. ด้วยการปิด Analog-to-Digital Converter (ADC_OFF) และ Brown-Out Detector (BOD_OFF) ทำให้ Arduino ลดการใช้พลังงานจาก 50,000 uA ลงเหลือเพียง 8 uA ที่น่าทึ่ง!

การปลุกด้วย Hardware Interrupts

บางครั้ง 8 วินาทีก็อาจจะนานเกินไป หากมีคนกดปุ่มหรือมีการแจ้งเตือนเกิดขึ้น CPU จะต้องตื่นขึ้นทันทีจากภาวะหลับลึก!

  • คุณต้องใช้ attachInterrupt(0, wakeUpCore, LOW)
  • เมื่อ CPU หลับลึก มันจะรับฟังเฉพาะ Pin 2 ทางกายภาพเท่านั้น
  • หาก Pin 2 ถูกต่อลงกราวด์ (มีการกดปุ่ม) โปรเซสเซอร์จะตื่นขึ้นมาในระดับนาโนวินาทีทันที รัน wakeUpCore interrupt และกลับมาประมวลผล loop() หลักต่อ!

ชุดอุปกรณ์หลักสำหรับการเพิ่มประสิทธิภาพพลังงาน

  • Arduino Pro Mini หรือ C33 (ห้ามใช้ Uno หรือ Mega! บอร์ดเหล่านี้มี 5V linear regulators ที่ใหญ่และแย่มาก ซึ่งดึงพลังงาน 20mA อย่างต่อเนื่อง ทำให้ฟังก์ชัน Sleep เสียหายโดยสิ้นเชิง Pro Mini แทบจะไม่มีส่วนประกอบเพิ่มเติมเลย!)
  • LowPower.h Library (การทำให้ง่ายขึ้นอย่างชาญฉลาดจาก avr/sleep.h registers ดั้งเดิมที่ซับซ้อนอย่างมาก)
  • Multi-meter ทั่วไป ที่สามารถวัด MicroAmps (uA) หลักเดียวได้
  • Coin Cell CR2032 หรือ แบตเตอรี่ AA สองก้อน

ข้อมูล Frontmatter ดั้งเดิม

title: "Low Power library for Arduino C33"
description: "Micro-Ampere conservation! Obliterate the terrible default power consumption of standard Arduinos by manually commanding the silicon processor registers to violently go to sleep and shut down clock cycles."
category: "Tools & Equipment"
difficulty: "Advanced"