- Control de voltaje de la batería a tu Arduino
- Comprobar si se está ejecutando power aire acond.
- Mejorar la precisión de analogRead() en muchas situaciones
La manera de realizar estas hazañas es utilizar la referencia interna para medir Vcc. En el siguiente código, medir la referencia de tensión interna y luego usar este valor para calcular nuestra realidad Vcc. Aquí está el código:
long readVcc() { // Read 1.1V reference against AVcc // set the reference to Vcc and the measurement to the internal 1.1V reference #if defined(__AVR_ATmega32U4__) || defined(__AVR_ATmega1280__) || defined(__AVR_ATmega2560__) ADMUX = _BV(REFS0) | _BV(MUX4) | _BV(MUX3) | _BV(MUX2) | _BV(MUX1); #elif defined (__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); // Wait for Vref to settle ADCSRA |= _BV(ADSC); // Start conversion while (bit_is_set(ADCSRA,ADSC)); // measuring uint8_t low = ADCL; // must read ADCL first - it then locks ADCH uint8_t high = ADCH; // unlocks both long result = (high<<8) | low; result = 1125300L / result; // Calculate Vcc (in mV); 1125300 = 1.1*1023*1000 return result; // Vcc in millivolts }
Existen algunas limitaciones en la precisión debido a las tolerancias de la referencia de tensión interna. Sin embargo, usted puede calibrar el factor de escala para obtener mayor precisión. Este código ejecuta en todas las variantes de Arduino, así como la serie de ATtinyx4 fichas.
Para un artículo más detallado, que incluye cálculo de datos, aplicaciones y procedimientos, calibración ver Secreto Arduino voltímetro, medir el voltaje de la batería.