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.
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.
Yanıtlar:
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
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/
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.