Apa (atau bagaimana saya menggunakan) opsi hemat daya dari Arduino untuk memperpanjang usia baterai?

40

Untuk proyek bertenaga surya & baterai, mengurangi konsumsi daya adalah suatu keharusan.

Saya tahu sedikit tentang menggunakan timer dan menyela untuk membuat mikrokontroler tidur ketika tidak melakukan apa-apa.

Saya juga membaca bahwa Anda dapat menonaktifkan beberapa periferal untuk menghemat daya lebih lanjut.

Berikut adalah halaman yang menjelaskan ini: Teknik Hemat Daya

Pertanyaan saya:

  • Apa teknik lain yang ada untuk menghemat daya?
  • Apakah ada perpustakaan yang membuat penggunaan fitur AVR ini lebih mudah?
sachleen
sumber

Jawaban:

33

Catatan: Saya ingin menunjukkan bahwa, meskipun jawaban saya diterima, pembaca (Anda) harus benar-benar membaca jawaban Anindo terlebih dahulu jika Anda benar-benar ingin menghemat energi dengan papan Arduino mana pun. Setelah Anda mengatasi item-item itu dalam desain Anda, maka Anda harus membaca jawaban saya dan khawatir tentang bagaimana mengatur MCU ke mode daya rendah.

Karena itu, ada beberapa teknik untuk membuat Arduino menghemat daya. Saya akan daftar beberapa dan kemudian mengarahkan Anda ke halaman yang menjelaskan semuanya secara lebih rinci.

  1. Sementara controller tidak melakukan hal-hal penting (antara membaca sensor dan berikutnya, misalnya), Anda dapat menempatkan controller ke salah satu mode sleep di bawah ini, dengan perintah set_sleep_mode (SLEEP_MODE_PWR_DOWN). Di sebelah setiap mode adalah perkiraan konsumsi daya dari setiap mode.

    • SLEEP_MODE_IDLE: 15 mA
    • SLEEP_MODE_ADC: 6,5 mA
    • SLEEP_MODE_PWR_SAVE: 1,62 mA
    • SLEEP_MODE_EXT_STANDBY: 1,62 mA
    • SLEEP_MODE_STANDBY: 0,84 mA
    • SLEEP_MODE_PWR_DOWN: 0,36 mA
  2. Nonaktifkan deteksi brown-out (sirkuit yang mematikan controller ketika tegangan rendah terdeteksi).

  3. Matikan ADC (konversi analog ke digita)

  4. Gunakan jam internal

Kemudian, ketika Anda meletakkan pengontrol tidur, Anda perlu menggunakan satu atau lebih mekanisme di bawah ini untuk membangunkan pengontrol dan melakukan sesuatu dengannya:

  • Bangun dengan sinyal

  • Bangun dengan penghitung waktu

Ini adalah ringkasan yang saya buat dari -

Artikel itu sebagian besar berlaku untuk ATmega328P, tetapi teknik ini berlaku untuk pengontrol yang kompatibel dengan Arduino lainnya. Seperti yang dikatakan TheDoctor dengan baik, Anda perlu memeriksa lembar data untuk memastikan pengontrol Anda mendukung semua teknik itu dan bagaimana melakukannya dengan lebih tepat.

Ricardo
sumber
2
Terima kasih telah merujuk halaman saya www.gammon.com.au/power . Menggunakan semua teknik yang disebutkan di atasnya akan memungkinkan Anda untuk mengkonsumsi sekitar 100 nA (0,1 μA). Teknik lain yang dapat memiliki dampak besar adalah berjalan pada frekuensi yang lebih rendah, dan tegangan yang lebih rendah. Ditambah apa yang dikatakan Anindo Ghosh tentang tidak menggunakan regulator tegangan. Saya membuat sensor Suhu dan kelembaban - bertenaga baterai yang menggunakan banyak teknik ini, yang masih kuat, setelah beberapa tahun menggunakan baterai.
Nick Gammon
@NickGammon - Agar adil, saya pikir artikel Anda yang sangat bagus layak mendapatkan referensi yang lebih baik, jadi saya mengedit jawaban saya sejauh itu. Terima kasih atas artikelnya - sangat jelas dan lengkap! Dan selamat datang di Arduino.SE. Senang memiliki Anda di sini.
Ricardo
24

Secara realistis, pembuang daya terbesar pada papan Arduino adalah regulator tegangan linier di atasnya.

  1. Selama mikrokontroler di papan tulis, LED, atau periferal lainnya, menarik arus, regulator linier menghabiskan daya sama dengan difference between supply and board voltagex current drawn.

    Jadi, perbaikan pertama adalah untuk melepaskan LED indikator daya di papan, dan tidak menggunakan LED lain sejauh mungkin. Kedua, sediakan voltase serendah mungkin yang cukup untuk menyalakan regulator.

  2. Pada desain aslinya, regulator tegangan yang digunakan tidak memiliki arus diam yang rendah. Ini berarti bahkan tanpa menarik daya apa pun di papan, regulator itu sendiri menyia-nyiakan daya yang adil sepanjang waktu.

    Perbaikan yang mudah adalah dengan mengganti regulator terpasang dengan LDO (regulator drop-out rendah) yang diperingkat untuk arus diam yang sangat rendah. Pencarian parametrik di berbagai situs vendor akan menghasilkan kemungkinan pengganti.

  3. Bahkan dengan langkah-langkah di atas, papan Arduino tidak menyediakan mekanisme untuk mengatur LDO ke mode daya rendah, jika LDO yang dipilih mendukung ini. Desain hemat daya biasanya menggunakan pin "mode tidur" pada regulator tegangan untuk menghemat sedikit energi - bukan pilihan di sini.

Bahkan dengan semua kemungkinan mode dan trik penghematan daya yang diterapkan pada tingkat mikrokontroler, Arduino tidak dirancang untuk menjadi perangkat berdaya sangat rendah di luar kotak. Setelah bereksperimen dengan beberapa aplikasi non-sepele, saya telah menemukan bahwa yang terbaik yang dapat dicapai secara realistis adalah penghematan daya 10% hingga 30% tergantung pada aplikasi, karena pengatur tegangan dan LED akan tetap menggunakan sisanya.

Anindo Ghosh
sumber
2
menyediakan papan dengan tegangan serendah mungkin yang hanya cukup untuk menyalakan regulator on-board atau memasok 5V melalui kabel USB yang diretas.
Penguin Anonim
13

Anda dapat membaca lembar data 200 halaman, dan kemudian mengacaukan dengan beberapa shift dan register bit yang membingungkan, tetapi saya merekomendasikan perpustakaan ini: http://playground.arduino.cc/Code/Enerlib

Juga, jika Anda menggunakan Uno atau yang lain dengan chip usb-to-serial, Anda bisa menonaktifkannya atau menghapusnya.

Dokter
sumber
3
Anda harus membaca lembar data apa pun yang Anda lakukan.
Connor Wolf
9

Setelah proyek Anda berhasil dan Anda perlu menggunakan lingkungan "produksi", Anda dapat memilih untuk mengganti Arduino dengan ATMega328 meta kosong atau chip keluarga ATTiny. Ini akan menyingkirkan semua pemakan daya di papan Arduino yang tidak Anda butuhkan. Saya menemukan:

  • Papan Arduino baterai 9V blok - 56 mA
  • ATTiny85 telanjang pada 8 MHz tanpa mode tidur dll - 10 mA
  • ATTiny85 telanjang pada 8 MHz dalam mode tidur - 0,03 mA

Beberapa informasi lebih lanjut

Program ATtiny dengan Arduino

ATTiny file untuk Arduino IDE

maarten
sumber