Domande:
- La conversione dell'ADC conta in tensione dipende dalla tensione effettiva del pin +5 V?
- Se sì, qual è il metodo accettato per ottenere quella tensione dalla scheda?
Background / dettaglio:
Ho un circuito in cui ho un Arduino Nano (clone) in esecuzione da un connettore USB (da un hub). Il compito dell'Arduino è misurare la tensione di una batteria che guiderà un secondo circuito acceso / spento da Nano. Per riferimento è un tester batteria.
C'è uno schermo del Nokia 5110 che mostra la tensione dal semplice schizzo qui sotto.
void setup() {
Serial.begin(9600);
display.begin();
// Init done
// You can change the contrast around to adapt the display
// for the best viewing!
display.setContrast(50);
// Text display tests
display.setTextSize(1);
display.setTextColor(BLACK);
}
void loop() {
display.clearDisplay(); // Clears the screen and buffer
display.setCursor(0,0);
display.print("Vin=");
int rawVIN = analogRead(VIN);
float floatVin = (rawVIN*4.75)/1023.0;
display.println(floatVin);
Serial.println(rawVIN);
display.display();
delay(1000);
}
- Ho misurato la tensione della batteria usando un DVM ed è 4,13 V, ma il Nano riporta 4,35 V.
- Ho un terreno comune tra la batteria e Arduino.
- Poiché la connessione per testare la tensione può fluttuare, ho un resistore a discesa per arrestare le fluttuazioni selvagge (> 10 kΩ)
Dopo alcune indagini ho scoperto che il +5 V stava effettivamente producendo 4,75 V e ho cambiato il mio schizzo
float v = (rawVIN*5.0)/1024.0;
per
float v = (rawVIN*4.75)/1024.0;
e la lettura della tensione sull'Arduino era ora corretta. Non l'ho fatto perché ho capito cosa ho fatto, l'ho fatto perché avevo la sensazione che potesse cambiare il valore in quello corretto.