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

กิจวัตรการเข้าสู่โหมด Sleep (Avr/Sleep.h & LowPower.h)
ในการสร้างอุปกรณ์ที่ใช้แบตเตอรี่และใช้งานได้นาน 2 ปีด้วยแบตเตอรี่ AA สองก้อน คุณต้องทำให้โปรเซสเซอร์เข้าสู่ SLEEP_MODE_PWR_DOWN
- ข้อผิดพลาดทางสถาปัตยกรรม: เมื่อคุณสั่งให้ Arduino เข้าสู่โหมด "Sleep" มันจะหยุดทำงานโดยสมบูรณ์ มันจะหยุดประมวลผลโค้ดทั้งหมด!
- ตัวจับเวลา
millis()ทั่วไปจะหยุดทำงาน เพราะฮาร์ดแวร์ Timer ถูกปิดเพื่อประหยัดพลังงาน! - การประมวลผลแบบ LowPower:
#include <LowPower.h> void loop() { readSensorAndSaveToSDCard(); // ปิด CPU ทั้งหมดอย่างรวดเร็วเป็นเวลา 8 วินาทีเป๊ะ! LowPower.powerDown(SLEEP_8S, ADC_OFF, BOD_OFF); // โค้ดจะทำงานต่อจากจุดนี้ เป๊ะๆ หลังจาก 8 วินาที! } - ด้วยการปิด 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 ถูกต่อลงกราวด์ (มีการกดปุ่ม) โปรเซสเซอร์จะตื่นขึ้นมาในระดับนาโนวินาทีทันที รัน
wakeUpCoreinterrupt และกลับมาประมวลผลloop()หลักต่อ!
ชุดอุปกรณ์หลักสำหรับการเพิ่มประสิทธิภาพพลังงาน
- Arduino Pro Mini หรือ C33 (ห้ามใช้ Uno หรือ Mega! บอร์ดเหล่านี้มี 5V linear regulators ที่ใหญ่และแย่มาก ซึ่งดึงพลังงาน 20mA อย่างต่อเนื่อง ทำให้ฟังก์ชัน Sleep เสียหายโดยสิ้นเชิง Pro Mini แทบจะไม่มีส่วนประกอบเพิ่มเติมเลย!)
- LowPower.h Library (การทำให้ง่ายขึ้นอย่างชาญฉลาดจาก
avr/sleep.hregisters ดั้งเดิมที่ซับซ้อนอย่างมาก) - Multi-meter ทั่วไป ที่สามารถวัด MicroAmps
(uA)หลักเดียวได้ - Coin Cell CR2032 หรือ แบตเตอรี่ AA สองก้อน