Answers:
对于主要问题,关于如何测量电池电压,最简单的方法是使用arduino上的ADC引脚之一。
如果您从电池提供5v电压(不太可能),则可以直接将+电压运至模拟输入引脚之一,并使用AnalogRead()-值的每个增量(从0-1023)将代表4.9mV。因此,将读取值乘以.0049即可读取伏特。
如果您的电压高于5v(更有可能),则可以使用分压器电路(请参阅:http : //en.wikipedia.org/wiki/Voltage_divider)将要发送到模拟输入端的电压带到<= 5v。如果您使用的是12V,则需要将电压分成大约1/3。然后,将ADC值乘以3,得到实际电压。
因此,如果使用12V和1 / 3rd分压器:
#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/
shutterdrone的建议非常好,但是缺少细节,因为它暗示模拟参考电压与被测电压相同(除了假设使用的是Arduino,没有明确说明)。
无论ADC是uC的必需部件还是外部部件,都需要一个ADC。ADC需要一个模拟参考电压(ARef)来与输入进行比较。您不希望ARef与您所感测的电压相同,因为那样ADC总是会看到输入电压和参考电压相等,因此所感测到的电压的模拟值将始终为最大值。您需要的是一个非常精确的模拟电压基准,该基准不会随电源电压的变化而变化。ADC会将参考电压与电池电压进行比较。您可以使用分压器将感测到的电池电压降低到ARef的范围内。
Arduino(Atmega8 / 168/328 / etc。)具有一个内置ADC和一个内置1.1V模拟基准,因此,您唯一需要的外部组件是分压器的电阻器。我认为您还希望对电阻使用非常高的值,以减少电池的电流消耗。