Skenario
Saya telah membuat kunci pintu elektronik yang bagus untuk kamar asrama saya. Saat ini merupakan Arduino Diecimila dengan servo [un] mengunci pintu. Ini memiliki keypad numerik dengan tombol 3x4 dan 5 LED (2 pasang seri dan satu LED tunggal). Saat ini juga berjalan pada pengisi daya ponsel.
Saya sekarang telah mendesain ulang untuk berjalan pada Arduino mandiri (ATmega328), tetapi benar-benar ingin menjalankannya pada baterai AA atau bahkan baterai 9V.
Untuk bagian perangkat lunak, saya pikir saya bisa melakukan sleep
panggilan untuk waktu-waktu tertentu di dalam metode loop untuk menjaga konsumsi daya ATmega serendah mungkin. Dan biarkan LED "flash" dengan waktu istirahat selama mungkin.
pertanyaan 1
Ketika sebuah tombol ditekan selama beberapa milidetik dimana papan tidur, apakah akan "diingat" / "ditahan" sampai keluar dari tidur dan kemudian diambil sebagai tombol tekan?
Apa cara terbaik untuk menangani tombol ini saat tidur? Dapatkah saya mengkodekannya untuk bangun setelah aktivitas tombol, atau haruskah saya membiarkannya tidur misalnya 10m.s. di setiap loop?
Pertanyaan 2
Bagaimana saya mendekati matematika menghitung berapa banyak baterai AA yang diperlukan untuk menjalankan perangkat ini selama 10 bulan?
Juga, saya tidak tahu bagaimana mengukur penggunaan daya rata-rata per menit, karena ia berganti dengan cepat dll.
Saya memiliki Arduino Pro Mini di meja saya sekarang yang kehabisan 2 baterai AA dan dapat berjalan selama lebih dari setahun jika diperlukan.
Ada tiga aspek desain yang telah mencapai ini.
1. Regulator yang berbeda
Saya menggunakan penguat penguat LTC3525. Ini memiliki arus diam sangat rendah (7uA) dan efisiensi tinggi (> 90% @ 0,2mA). Sesuatu seperti papan sparkfun ini https://www.sparkfun.com/products/8999 harus melakukan pekerjaan serupa. Pastikan untuk menghubungkannya ke pin 5V pada Arduino, bukan VIN, sehingga regulator Arduino tidak digunakan.
2. Sleeeeeeep
Proporsi waktu perangkat aktif akan menjadi kecil. Selama sisa waktu perangkat harus tertidur di SLEEP_MODE_POWER_DOWN. Anda dapat mendasarkan rutinitas tidur Anda dari Rocketscreem Low Power Library . Menurut tautan itu Anda harus bisa turun ke 1.7uA dengan ADC, BOD dan WDT mati dan dalam mode power down.
3. Mengganggu
Setengah lainnya tidur terganggu untuk membangunkannya. Dalam mode Power Down sleep, hanya level yang mengganggu INT1 dan INT2, TWI cocok, dan WDT akan membangunkannya. Jadi, Anda harus memiliki tombol yang terhubung ke INT1 atau INT2 sehingga menekan tombol akan membangunkannya.
Hal-hal lain:
Matikan semua LED kecuali benar-benar diperlukan. Jika kunci di dalam ruangan, LED tidak harus cerah, menghemat lebih banyak daya. Juga jika Anda perlu membuat MCU melakukan beberapa tugas secara teratur, gunakan pengawas waktu untuk membangunkannya secara berkala.
Sunting:
Salah satu metode yang dapat bekerja adalah dengan menggunakan perpustakaan Low Power di atas, dan tidur untuk mengatakan 60 ms setiap loop berkat pengawas waktu. Saat bangun periksa untuk tombol tekan. Fungsi yang akan dipanggil
sumber
Semua komentar ini tepat. Saya ingin menambahkan beberapa saran lagi:
1) Untuk LED, gunakan LED 20 mA output tinggi. Inilah logikanya. Katakanlah Anda menginginkan LED status redup yang berkedip setiap 8 detik. Anda tidak ingin itu cerah, jadi Anda menggunakan beberapa LED acak. Masalahnya, LED redup masih menggunakan 20 mA (atau lebih) untuk output hanya 100 mcd. Alih-alih, dapatkan LED output tinggi yang masih memiliki rating 20 mA tetapi dapat menghasilkan 4000 mcd (pastikan Anda melihat pada sudut output, Anda mungkin masih menginginkannya 30 derajat atau lebih). Dengan LED 4000 mcd ini, Anda menghubungkannya dengan sesuatu seperti resistor 3,3 k Ohm dan Anda mendapatkan output cahaya sekitar 100 mcd, tetapi menggunakan kurang dari 1 mA. Jadi, alih-alih menggunakan 20 mA untuk status LED, Anda menggunakan sebagian kecil dari satu mA. Saya juga biasanya mengatur status lampu kilat LED tepat waktu hanya 5-15 ms, yang juga dapat menghemat banyak daya jika sebelumnya Anda memiliki lampu kilat tepat waktu pada 100 ms.
2) Pengatur tegangan pilihan saya adalah Microchip MCP1700. Hanya menggunakan 1,6 μA arus diam dan super murah (sekitar $ 0,30 dalam jumlah kecil). Satu-satunya batasan adalah tegangan input maksimum hanya 6 volt, jadi Anda tidak bisa menggunakan baterai 9 volt. Tapi, ini sempurna untuk 4 baterai AA, satu sel LiPo atau dua sel koin lithium.
3) Untuk menyalakan rangkaian ATmega dengan 4 baterai AA, saya biasanya menggunakan dioda 1N4001 pada VCC untuk menjatuhkan maksimum 6 volt dari 4 baterai menjadi 5,5 volt. Selain itu, dioda melindungi ATmega dari tegangan balik, sehingga melayani dua tujuan yang bermanfaat. Melakukan ini, saya dapat membuat sirkuit bertenaga baterai yang dapat menggunakan hanya 0,1 μA saat tidur karena tidak ada regulator tegangan memakan arus sepanjang waktu.
sumber
Saya melakukan tes pada atmega328P-PU telanjang di papan tempat memotong roti menggunakan perpustakaan RocketScream LowPower
Gunakan sketsa ini:
Dengan uCurrent Gold, saya mengukur 7,25 uA saat dalam mode mati.
sumber
Ada dua pertanyaan di sini, tetapi hanya yang kedua yang benar-benar bagian dari judul pertanyaan, jadi mungkin lebih baik jika Anda membuka satu lagi untuk pertanyaan pemrograman Arduino. Saya akan menjawab pertanyaan kedua di sini.
Baterai 1.5V AA alkaline top-end tunggal memiliki kapasitas sekitar 2600mAh. Jika Anda menggunakan baterai lithium, Anda bisa mendapatkan sekitar 3400mAh jika beruntung. Mari kita gunakan angka itu sebagai dasar untuk kasus terbaik mutlak.
Cara Anda menghitung waktu berjalan maksimum teoretis untuk suatu beban cukup dengan kapasitas dibagi dengan beban. Jika beban Anda adalah 1mA, Anda dapat menjalankannya selama 3400/1 = 3400 jam = 141 hari = ~ 5 bulan. Namun, ini hanya maksimum teoretis , karena Anda akan mulai mendapatkan tegangan signifikan terkulai sekitar 65% pada waktu itu. Jika Anda mengatur output, Anda akan mendapatkan efek pelarian di mana semakin rendah tegangan baterai, semakin tinggi arus yang dibutuhkan untuk mempertahankan tegangan yang diatur, yang menguras baterai lebih cepat. Saya akan terkejut jika Anda bisa mendapatkan lebih dari 80% kapasitas yang diiklankan dengan tegangan yang cukup tinggi untuk menjalankan perangkat Anda.
Jadi, katakanlah Anda mendapatkan 80% dari waktu setelah tegangan terkulai dan ketidakefisienan regulator. Kami akan menganggap bahwa Anda berjalan pada 3.3V dari tiga baterai secara seri. Ini masih akan memberi Anda kapasitas yang sama, tetapi tegangan akan cukup untuk regulator. Jika perangkat Anda berjalan pada 15mA (itu perkiraan yang agak konservatif) angkanya akan terlihat seperti ini:
Jadi Anda membutuhkan sekitar 144 baterai lithium (48 set 3) untuk menjalankannya selama setahun. Tidak begitu baik!
Saya sarankan menggunakan pasokan DC yang diatur dari listrik sebagai gantinya. Cadangan baterai dapat dimasukkan, yang mudah diatur dengan relai SPDT - cukup sambungkan koil ke DC utama dan sambungkan kontak "off" ke baterai. Ketika DC gagal, kontak jatuh dan baterai digunakan sebagai gantinya.
sumber
Sesuatu yang belum pernah disebutkan: Anda harus memiliki cara untuk mematikan pasokan + 5V yang menyalakan servo, saat Anda tidak menggunakannya. Bahkan ketika itu tidak bergerak, servo masih akan menarik daya.
FET dengan gerbang yang dikendalikan oleh pin I / O dari Arduino adalah cara yang baik untuk melakukannya.
sumber
Anda mungkin mempertimbangkan untuk menggunakan pengontrol-mikro yang khusus dioptimalkan untuk konsumsi daya rendah untuk desain Anda berikutnya. Untuk konsumsi daya yang rendah perlu untuk mengambil daya yang sangat rendah saat tidur. Apa yang sering diabaikan adalah penting juga seberapa cepat ia dapat bangun dari tidur ini.
Yang penting adalah berapa banyak biaya yang diperlukan dari tidur yang paling dalam untuk menangani interupsi secepat mungkin (karena kekuatan ledakan akan sangat singkat) dan kembali tidur lagi.
Salah satu contoh pengendali mikro semacam itu adalah MSP430 dari Texas Instruments. Di situs web mereka, Anda akan menemukan catatan aplikasi cara menghemat energi dan aplikasi pemanenan energi.
sumber