回答:
バッテリの電圧を測定する方法に関する主な質問に対する最も簡単な方法は、arduinoのADCピンの1つを使用することです。
バッテリーから5vを供給している場合(ほとんどありません)、アナログ入力ピンの1つに対して+を直接実行し、analogRead()を使用します。値の増分(0〜1023)は4.9mVを表します。そのため、読み取り値に.0049を掛けて、ボルトを読み取ります。
5vより高い(可能性が高い)を実行している場合、分圧回路(http://en.wikipedia.org/wiki/Voltage_dividerを参照)を使用して、アナログ入力に送信している電圧をもたらすことができます<= 5v。12Vを実行している場合、電圧を約1/3に分割する必要があります。次に、ADC値を乗算した後、3を乗算して実際の電圧を取得します。
したがって、12Vと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
tinker.itは、Atmega168 / atmega328に「秘密の」電圧レベルメーターを公開しました。Arduinoは少しのトリックを使用して、VCCを内部の精度1.1vリファレンスと比較できます。説明とコードはこちら:https : //provideyourown.com/2012/secret-arduino-voltmeter-measure-battery-voltage/
シャッタードローンの提案は非常に優れていますが、アナログ電圧リファレンスが測定されている電圧と同じであることを示唆しているため、詳細が欠落しています(明示的に述べられていないArduinoが使用されていると仮定することは別として)。
uCに不可欠なものであれ外部コンポーネントであれ、ADCが必要です。ADCは、入力と比較するためにアナログ電圧リファレンス(ARef)を必要とします。ADCは常に入力電圧と基準電圧が等しいと見なすため、ARefを検出する電圧と同じにしたくないため、検出された電圧のアナログ値は常に最大になります。必要なのは、電源電圧が変化しても変化しない非常に正確なアナログ電圧リファレンスです。ADCはその基準電圧をバッテリー電圧と比較します。分圧器を使用して、検出されるバッテリー電圧をARefの範囲に減らすことができます。
Arduino(Atmega8 / 168/328 /など)にはADCと1.1Vアナログリファレンスが組み込まれているため、必要な外部コンポーネントは分圧器の抵抗だけです。また、抵抗器に非常に高い値を使用して、バッテリーの電流消費を減らしたいと思います。