我正在寻找可以与微控制器一起使用的电池寿命指示器。我希望然后我可以读取当前剩余的电池寿命,并越来越多地让微控制器进入睡眠状态以保持电池寿命。
低电量指示灯
tinker.it 在 Atmega168/atmega328 中发布了一个“秘密”电压电平表。通过一个小技巧,Arduino 能够将 VCC 与内部精度 1.1v 参考进行比较。解释和代码在这里:https ://provideyourown.com/2012/secret-arduino-voltmeter-measure-battery-voltage/
对于第一个问题,关于如何测量电池的电压,最简单的方法是使用 arduino 上的 ADC 引脚之一。
如果您从电池提供 5v(不太可能),那么您可以将 + 直接运行到其中一个模拟输入引脚,并使用模拟读取()-值的每个增量(从 0-1023)将代表 4.9mV。因此,将读取值乘以 0.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
shutterdrone 的建议非常好,但缺少一个细节,因为它暗示模拟电压参考与被测量的电压相同(除了假设正在使用 Arduino,这没有明确说明)。
您将需要一个 ADC,无论它是集成到您的 uC 还是外部组件。ADC 需要一个模拟电压基准 (ARef) 来比较输入。您不希望 ARef 与您感测的电压相同,因为这样 ADC 将始终将输入电压和参考电压视为相等,因此感测电压的模拟值将始终为最大值。您需要的是一个非常精确的模拟电压基准,它不会随着电源电压的变化而变化。ADC 将该参考电压与电池电压进行比较;您可以使用分压器将感应到的电池电压降低到 ARef 的范围内。
Arduino (Atmega8/168/328/etc.) 有一个内置的 ADC 和一个内置的 1.1V 模拟基准,所以您需要的唯一外部组件是分压器的电阻器。我认为您还希望使用非常高的电阻值来减少电池的电流消耗。