Hemliga Arduino Voltmeter
- Övervaka batterispänningen till din Arduino
- Kontroll för att se om A/C makt är igång
- Förbättra noggrannheten av analogRead() i många situationer
Sättet att utföra dessa bedrifter är använda interna referensen till att faktiskt mäta Vcc. I följande kod vi faktiskt mäta inre spänning hänvisningen, och sedan använda detta värde för att beräkna vår faktiskt Vcc. Här är koden:
lång readVcc() {
Läs 1.1v referens mot AVcc
Ange referensen till Vcc och mätning till den inre 1.1v referens
#if defined(__AVR_ATmega32U4__) || defined(__AVR_ATmega1280__) || defined(__AVR_ATmega2560__)
ADMUX = _BV(REFS0) | _BV(MUX4) | _BV(MUX3) | _BV(MUX2) | _BV(MUX1);
#elif definieras (__AVR_ATtiny24__) || defined(__AVR_ATtiny44__) || defined(__AVR_ATtiny84__)
ADMUX = _BV(MUX5) | _BV(MUX0);
#else
ADMUX = _BV(REFS0) | _BV(MUX3) | _BV(MUX2) | _BV(MUX1);
#endif
Delay(2); Vänta på Vref sedimentera
ADCSRA | = _BV(ADSC); Starta konvertering
samtidigt (bit_is_set(ADCSRA,ADSC)); mäta
uint8_t låg = ADCL; måste läsa ADCL första - det sedan Lås ADCH
uint8_t hög = ADCH; låser upp både
långa leda = (hög << 8) | låg;
resultat = 1125300L / leda; Beräkning av Vcc (mV); 1125300 = 1,1 * 1023 * 1000
returnera resultat; VCC i millivolt
}
Det finns vissa begränsningar i noggrannhet på grund av toleranser på inre spänning referensen. Du kan dock kalibrera skalfaktorn för större noggrannhet. Denna kod körs på alla Arduino varianter samt ATtinyx4 serien marker.
För en mer djupgående artikel, som omfattar beräkning detaljer, tillämpningar och kalibrering anvisningar, se Hemligheten Arduino Voltmeter-mäta batterispänningen.