11/04/2024
0

Sử dụng chế độ ngủ của Arduino/AVR (Arduino/AVR sleep mode)

Bạn đang thực hiện một dự án với board arduino và đang vướng mắc ở khâu tiết kiệm pin để có thể sử dụng lâu dài. Có thể tăng thời gian sử dụng pin lên con số gấp chục lần với cách sử dụng chế độ ngủ của arduino hay chế độ sleep mode trên board arduino.

Bảng dưới cho thấy kết quả đáng kinh ngạc khi sử dụng chế độ ngủ của arduino

CHẾ ĐỘ NGỦ CỦA ARDUINO LÀ THẾ NÀO?

Tiêu thụ điện năng là một vấn đề quan trọng đối với một thiết bị chạy liên tục trong một thời gian dài mà không bị tắt. Vì vậy, để khắc phục vấn đề này, hầu hết mọi bộ điều khiển đều có chế độ ngủ, giúp các nhà phát triển thiết kế các thiết bị điện tử để tiêu thụ năng lượng tối ưu nhất. Chế độ ngủ đặt thiết bị ở chế độ tiết kiệm năng lượng bằng cách tắt mô-đun không sử dụng.

Hôm nay chúng ta sẽ tìm hiểu về chế độ ngủ Arduino và kiểm chứng mức tiêu thụ năng lượng bằng cách sử dụng Ampe kế để so sánh giữa hai lần hoạt động bình thường và khi vào chế độ ngủ của arduino. Chế độ ngủ Arduino cũng được gọi là chế độ tiết kiệm năng lượng Arduino hoặc chế độ chờ Arduino.

Có 6 chế độ ngủ trong các dòng vi điều khiển ATmega328P (Arduino UNO, Arduino Nano và Pro-mini)

Để vào bất kỳ chế độ ngủ nào, chúng ta cần kích hoạt bit ngủ trong thanh ghi điều khiển chế độ ngủ (SMCR.SE).

Sau đó, ADC Noise ReductionPower-down, Power-saveStandby.

Để đánh thức arduino chúng ta có thể dùng các ngắt trong, ngắt ngoài hoặc reset lại arduino.

Idle Mode

Chế độ này cho phép dừng CPU nhưng vẫn có thể sử dụng SPIUSARTWatchdogTimerbộ so sánh tương tự vẫn có thể hoạt động.

CODE:

LowPower.idle(SLEEP_8S, ADC_OFF, TIMER2_OFF, TIMER1_OFF, TIMER0_OFF, SPI_OFF, USART0_OFF, TWI_OFF);

Trước tiên hãy tải về thư viện cho Arduino và viết một đoạn code có sử dụng đoạn code trên để trải nghiệm chế độ ngủ của arduino nhé. Bạn sẽ thấy arduino ngủ trong 8s và sau đó tỉnh dậy.

ADC Noise Reduction Mode

Trong chế độ này, nó dừng CPU nhưng cho phép ADCngắt ngoàiUSART,  Watchdog và Timer hoạt động. Chúng ta có thể đánh thức arduino bằng cách:

  • External Reset
  • Watchdog System Reset
  • Watchdog Interrupt
  • Brown-out Reset
  • 2-wire Serial Interface address match
  • External level interrupt on INT
  • Pin change interrupt
  • Timer/Counter interrupt
  • SPM/EEPROM ready interrupt

Power-Down Mode

Trong chế độ này, bộ tạo dao động ngoài TẮT, nhưng ngắt ngoài vẫn tiếp tục hoạt động. Nó chỉ có thể bị đánh thức bởi một trong các phương pháp dưới đây:

  • External Reset
  • Watchdog System Reset
  • Watchdog Interrupt
  • Brown-out Reset
  • 2-wire Serial Interface address match
  • External level interrupt on INT
  • Pin change interrupt

Hàm để sử dụng chế độ ngủ này:

CODE:

 LowPower.powerDown(SLEEP_FOREVER, ADC_OFF, BOD_OFF);

Tiến hành dùng thử:

CODE:

void loop()
{
 // Allow wake up pin to trigger interrupt on low.
attachInterrupt(0, wakeUp, LOW);
 LowPower.powerDown(SLEEP_FOREVER, ADC_OFF, BOD_OFF);
 // Disable external pin interrupt on wake up pin.
detachInterrupt(0);
 // Do something here
}

Power-Save Mode

Chế độ ngủ này của arduino tương tự như chế độ Power-down, nếu bộ hẹn giờ hoặc bộ đếm được bật, nó sẽ vẫn ở trạng thái chạy ngay cả khi ngủ. Thiết bị có thể được đánh thức bằng cách sử dụng bộ đếm thời gian đến lúc nó bị tràn.

Nếu bạn không sử dụng bộ hẹn giờ hoặc bộ đếm, bạn nên sử dụng chế độ Power-down thay vì chế độ Power-save.

Standby Mode

Chế độ chờ giống hệt với chế độ Power-down, sự khác biệt duy nhất giữa chúng là bộ dao động ngoài tiếp tục chạy ở chế độ này.

Extended Standby Mode

Chế độ này tương tự như chế độ Power-save chỉ với một ngoại lệ là bộ dao động tiếp tục chạy. Thiết bị sẽ mất 6 chu kỳ để thức dậy từ chế độ Standby.

TIẾN HÀNH THỰC HIỆN

Yêu cầu:

  • Arduino UNO
  • DHT11
  • USB Ammeter (có thể mua ở đây)
  • Breadboard
  • Dây cắm

Kết nối giữa Arduino Uno với module DHT11

Sử dụng module USB Tester để kiểm tra dòng và áp nhằm so sánh giữa lúc arduino uno vào chế độ ngủ và lúc hoạt động bình thường

Tiếp theo sơ đồ trên ta sẽ tiến hành nối cổng USB tester này vào cổng usb máy tính và cắm cổng của arduino vào đầu còn lại để có thể đo được dòng áp.

Code Đo Dòng Arduino Lúc Vào Chế Độ Ngủ

Xem chi tiết

Code Lúc Arduino Hoạt Động Bình Thường

Xem chi tiết

Nguồn: https://www.truongcongly.com/2020/08/su-dung-che-o-ngu-cua-arduinoavr.html

Đăng nhập