Indikator Baterai Rendah

22

Saya ingin membuat indikator usia baterai yang dapat saya gunakan bersama dengan micro-controller. Saya berharap bahwa saya dapat membaca sisa masa pakai baterai saat ini dan semakin mengaktifkan micro-controller untuk menjaga masa pakai baterai.

littlebirdceo
sumber
1
Mikrokontroler yang mana?
Brian Carlton

Jawaban:

13

Untuk pertanyaan utama, seperti bagaimana mengukur tegangan baterai, metode paling sederhana adalah dengan menggunakan salah satu pin ADC pada arduino.

Jika Anda menyediakan 5v dari baterai (tidak mungkin), maka Anda dapat menjalankan + langsung ke salah satu analog dalam pin, dan menggunakan analogRead () - setiap kenaikan nilai (dari 0-1023) akan mewakili 4,9mV. Jadi gandakan nilai baca dengan 0,0049 untuk mendapatkan volt dibaca.

Jika Anda menjalankan lebih tinggi dari 5v (lebih mungkin), Anda dapat menggunakan sirkuit pembagi tegangan (lihat: http://en.wikipedia.org/wiki/Voltage_divider ) untuk membawa tegangan yang Anda kirim ke input analog ke <= 5v. Jika Anda menjalankan 12V, Anda ingin membagi tegangan menjadi sekitar 1/3. Kemudian, setelah mengalikan nilai ADC, kalikan dengan 3 untuk mendapatkan tegangan aktual.

Jadi, jika menggunakan 12V, dan pembagi tegangan 1/3:

#define BAT_PIN 14

float read_batt_volts(void) {

  int val = analogRead(BAT_PIN);

  float volts = (float) val * (float) 0.0049 * (float) 3;

  return(volts)
}

! c

rana
sumber
2
Saya punya dua hal utama untuk ditambahkan ke ini. Pertama, sebagian besar baterai 12V tidak mati pada 0V, tetapi sebaliknya pada sesuatu yang cukup dekat, setidaknya dalam 5 V, dari tegangan pengisian penuh Anda. Teknik umum untuk mendapatkan pengukuran resolusi yang lebih tinggi dalam kisaran operasi adalah dengan mengecilkan tegangan dengan dioda zener. Sebuah resistor secara seri dengan zener dan Anda mengukur melintasi resistor. Kedua, kebanyakan orang tidak menyadari Anda perlu menarik arus dari baterai untuk mendapatkan ide bagus tentang daya yang tersisa.
Kortuk
@Kortuk: Bisakah Anda membuat dua klarifikasi untuk pembelajaran saya: (1) Untuk mendapatkan dalam rentang tegangan yang diterima pin, apakah Anda menyarankan bahwa pendekatan zener-diode akan memberikan resolusi lebih tinggi daripada metode pembagi tegangan? (2) Mengapa Anda menyebutkan secara khusus di sini bahwa "Anda perlu menggambar arus ...", dll.?
boardbite
22

tinker.it menerbitkan pengukur level tegangan "rahasia" di Atmega168 / atmega328. Dengan sedikit trik, Arduino dapat membandingkan VCC dengan referensi presisi internal 1.1v. Penjelasan dan kode ada di sini: https://provideyourown.com/2012/secret-arduino-voltmeter-measure-battery-voltage/

bpijl
sumber
luar biasa, saya menjalankan atmega pada baterai, dan tidak dapat memiliki nilai vref yang dapat diandalkan. terima kasih telah memposting ini, itu menyelesaikan masalah saya seperti sulap!
radhoo
10

Saran shutterdrone sangat bagus, tetapi tidak memiliki detail, karena ini menyiratkan bahwa referensi tegangan analog sama dengan tegangan yang diukur (selain dari asumsi bahwa Arduino sedang digunakan, yang tidak secara eksplisit dinyatakan).

Anda akan memerlukan ADC, apakah itu integral dengan UC Anda atau komponen eksternal. ADC membutuhkan referensi tegangan analog (ARef) untuk membandingkan input. Anda tidak ingin ARef sama dengan tegangan yang Anda rasakan karena ADC akan selalu melihat tegangan input dan referensi sama, sehingga nilai analog untuk tegangan indra akan selalu menjadi maksimum. Yang Anda butuhkan adalah referensi tegangan analog yang sangat akurat yang tidak akan berubah seiring perubahan tegangan catu daya. ADC akan membandingkan tegangan referensi dengan tegangan baterai; Anda dapat menggunakan pembagi tegangan untuk mengurangi tegangan baterai yang dirasakan ke dalam kisaran ARef.

Arduino (Atmega8 / 168/328 / etc.) Memiliki ADC built-in dan referensi analog 1.1V built-in, jadi satu-satunya komponen eksternal yang Anda perlukan adalah resistor untuk pembagi tegangan. Saya pikir Anda juga ingin menggunakan nilai yang sangat tinggi untuk resistor untuk mengurangi daya baterai saat ini.

blalor
sumber
2
Poin luar biasa - dan Anda benar bahwa saya (secara tidak benar) mengasumsikan Arduino dalam campuran. =)! c
shutterdrone