Düşük Batarya Göstergesi


22

Bir mikro denetleyiciyle birlikte kullanabileceğim bir pil ömrü göstergesi yapmak istiyorum. Daha sonra kalan mevcut pil ömrünü okuyabileceğimi ve pil ömrünü korumak için mikro denetleyiciyi giderek uykuya geçireceğimi umuyorum.


1
Hangi mikrodenetleyici?
Brian Carlton

Yanıtlar:


13

Birincil soruya göre, bir bataryanın voltajını nasıl ölçeceğinize göre, en basit yöntem arduino üzerindeki ADC pimlerinden birini kullanmaktır.

Aküden 5v veriyorsanız (olası değilse), + işaretini analogdaki pinlerden birine doğrudan çalıştırabilir ve analogRead () işlevini kullanabilirsiniz - değerdeki her artış (0-1023 arasında) 4,9mV'yi temsil eder. Bu yüzden voltları okumak için okuma değerini .0049 ile çarpın.

Eğer 5v'den daha yüksek çalışıyorsanız (daha muhtemel), analog girişe gönderdiğiniz voltajı getirmek için bir voltaj bölücü devresi kullanabilirsiniz (bakınız: http://en.wikipedia.org/wiki/Voltage_divider ). <= 5v. 12V kullanıyorsanız, voltajı kabaca 1/3'e bölmek istersiniz. Ardından, ADC değerini çarptıktan sonra, gerçek gerilimi elde etmek için 3 ile çarpın.

Bu nedenle eğer 12V ve 1/3 voltaj bölücü kullanıyorsanız:

#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


2
Buna ekleyecek iki önemli şeyim var. İlk olarak, çoğu 12 V pil 0V'da ölmez, bunun yerine tam şarj voltajınızın en az 5 V'sinde oldukça yakın bir şeyde ölür. Çalışma aralığında daha yüksek çözünürlük ölçümleri elde etmek için kullanılan yaygın bir teknik, voltajı bir zener diyoduyla düşürmektir. Bir zener ile seri bir direnç ve direnç boyunca ölçersiniz. İkincisi, çoğu insan, kalan güç hakkında iyi bir fikir edinmek için bir bataryadan akım çekmeniz gerektiğini fark etmiyor.
Kortuk

@Kortuk: Öğrenmem için iki açıklama yapabilir misin: (1) Pin tarafından kabul edilen voltaj aralığına girmek için, zener diyot yaklaşımının voltaj bölücü yönteminden daha yüksek çözünürlük vereceğini mi söylüyorsunuz? (2) Burada neden “akım çekmeniz gerektiğine” dikkat çekiyorsunuz, vb.?
boardbite

22

tinker.it, Atmega168 / atmega328’de bir "gizli" voltaj seviyesi ölçer yayınladı. Küçük bir numara ile bir Arduino, VCC'yi dahili hassasiyet 1.1v referansı ile karşılaştırabilir. Açıklama ve kod burada: https://provideyourown.com/2012/secret-arduino-voltmeter-measure-battery-voltage/


mükemmel, piller üzerinde atmega kullanıyorum ve güvenilir bir vref değerine sahip olamadım. Bunu gönderdiğiniz için teşekkürler, sihir gibi sorunumu çözdü!
radhoo

10

deklanşörün önerisi çok iyidir, ancak analog voltaj referansının ölçülen voltaj ile aynı olduğu anlamına geldiğinden (açıkça belirtilmediği şekilde bir Arduino kullanıldığını varsaymanın dışında) bir detayı eksiktir.

UC'nize veya harici bir bileşene ayrılmaz bir ADC'ye ihtiyacınız olacak. ADC, girişi karşılaştırmak için bir analog voltaj referansına (ARef) ihtiyaç duyar. ARef'in algıladığınız voltajla aynı olmasını istemezsiniz, çünkü ADC her zaman giriş ve referans voltajlarını eşit olarak görür, böylece algılanan voltajın analog değeri her zaman maksimum olur. İhtiyacınız olan şey, güç kaynağı voltajı değiştikçe değişmeyecek olan çok hassas bir analog voltaj referansıdır. ADC bu referans voltajını akü voltajıyla karşılaştıracaktır; ARef'in aralığında algılanan akü voltajını azaltmak için bir voltaj bölücü kullanabilirsiniz.

Arduino (Atmega8 / 168/328 / etc.) Dahili bir ADC'ye ve dahili bir 1.1V analog referansa sahiptir, bu nedenle ihtiyacınız olan tek harici bileşenler voltaj bölücüsü için dirençlerdir. Ayrıca bataryadaki akım tüketimini azaltmak için dirençler için çok yüksek değerler kullanmak isteyebileceğinizi düşünüyorum.


2
Mükemmel noktalar - ve sen (yanlış) karışımda bir Arduino aldığımı doğru söylüyorsun. =)! c
shutterdrone
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.