Voltmetro e suoi valori

Ciao a tutti,
ho provato a realizzare un banalissimo voltmetro: ho collegato un polo di una duracell plus al GND, l'altro al pin A3. Poi ho usato uno dei tanti sketch che si trovano su internet a riguardo e sulla seriale mi dà valori molto vicini a 1,95. Possibile? La pila dovrebbe essere intorno a 1,5... Ho sbagliato qualcosa? Ho letto di imprecisioni causate da un'alimentazione non proprio 5V... ma mi sembra che siano errori esagerati.

int analogPin = 3;                          
float val = 0.00;        
float val2 = 0.00;
void setup()
{
  Serial.begin(9600);          
}

void loop()
{
val = analogRead(analogPin); //leggo il valore sul pin3
val2 = (val*5)/1023;  //lo trasformo in valore di tensione

  Serial.println(val2);            
  delay (1000);
}

Grazie a tutti :wink:

Vedi il modello della pila e cerca il datasheet su internet, quando sono completamente cariche le batterie hanno una tensione superiore a quella nominale (1,5V) che alla fine è la media della tensione durante tutta la fase di scarica.

0.45V in più mi sembra troppo ma la procedura è essenzialmente corretta.
Prova a gestire meglio i vari tipi di dato o a lasciare tutto implicito, del tipo

Serial.println((analogRead(3) * 5.0) / 1024.0);

in modo che se la sbriga il compilatore.
Ciao

Si sembrano anche me troppi ma forse sono dovuti anche al calcolo, potresti anche provare cosi:

Serial.println(analogRead(3) * 4,9);

[/quote]
ed ottieni il risultato in mV

@ypkdani: questa è una pila molto simile a quella che ho io, eppure questo parte da 1,6, non 1,95....
@MGuruDC e @ypkdani: ciò mi fa risparmiare ram, giusto? ma per la precisione?
Grazie mille

Si vero 1.95 sono troppi. Per il mio conto semplicemente ti risparmi un divisione quindi hai meno tempo di esecuzione ma qui il problema è che non vorrei che l’errore sia dovuto ad arrotondamenti fatti dalla ALU. Ovviamente ci sarà anche una componenti di offset del convertitore.

ma varia? provato a fare una media salvando il tutto in array?

poi provato magari con un tester vero il vero voltaggio della pila? provato con le pile da orologio a vedere quanta corrente danno? insomma se l'errore è costante.

prova a collegare su a3 i 3.3V di arduino

infine è inutile salvare un valore di analogread in float perchè non ha decimali, ti fa solo sprecare ram

No, non varia, una volta collegata la pila il valore è stabile. Al momento non ho un tester :grin: . Mi procurerò la pila da orologio, intanto ho fatto la prova con i 3.3 V di arduino e mi dà 3702-3706... Posso provare con i 5V di arduino o è troppo rischioso ]:D?
Grazie mille superlol :grin:

Nonostante l'uso improprio dei float, con spreco di memoria e tempo di calcolo, lo sketch è corretto e deve fornirti i giusti valori di tensione.
Il fatto che al posto di 3.3V misuri 3.7V è in accordo con i 1.95V invece di 1.7V (valore medio di una batteria carica), la quantità d'errore è praticamente la stessa.
Questo errore si spiega in un solo modo, la tensione di alimentazione del micro non sono 5V, sono solo 4.4 - 4.5 V, dato che il calcolo parte dal presupposto che il riferimento sono 5V se tale tensione è inferiore il valore misurato diventa maggiore di quanto atteso.
Verifica la tensione della USB se stai alimentando tramite questa, non è raro che sia nettamente inferiore a 5V, altrimenti verifica la batteria/alimentatore con cui stai alimentando Arduino e dove l'hai collegato.

Volevo scrivere quello che ha scritto astrobeed. :frowning:
Ciao Uwe

Grazie astrobeed, il punto è che con la pila dà 0.25V in più, con i 3,3 dà 0.4 V in più. Dato che non ho al momento nessun voltmetro potrei sottrarre ad ogni misurazione una quantità x, ma come faccio se un errore è quasi il doppio dell’altro?
Grazie ancora. Non ho bisogno di una grandissima precisione, andrebbe bene anche un errore di 0.15V.

arduaudio:
Grazie astrobeed, il punto è che con la pila dà 0.25V in più, con i 3,3 dà 0.4 V in più. Dato che non ho al momento nessun voltmetro potrei sottrarre ad ogni misurazione una quantità x, ma come faccio se un errore è quasi il doppio dell’altro?

L’errore lo devi valutare come percentuale e non come valore assoluto, il 10% di 100 è 10, il 10% di 50 è 5, è normale che una tensione maggiore dia un valore assoluto dell’errore maggiore rispetto ad una tensione minore.
Prova ad impostare il calcolo con 4.46 al posto di 5 e vedrai che le cose vanno a posto da sole, devi comunque verificare la reale tensione di alimentazione dell’ATmega.

val2 = (val*4.46)/1023

Ciao arduaudio
Questo calcolo vale solo per quel computer che Ti da alla fine 4,46V di alimentazione sui 5V. Se lo colleghi ad un altro computer o lo colleghi a un alimentatore esterno la tensione dei 5V puó essere diverso e misuri di nuovo qualcosa che non sai cos’é.

Come soluzione definitiva potresti usare il riferimento interno di 1,1 V e mettere un partitore resistivo per ridurre le tensioni da misurare a un valore sotto i 1,1V usa un partitore con una resistenza complessiva intorno ai 5 kOhm. oppure uno con resistenza maggiore e un amplificatore messo come seguitore di tensione (uscita sul entrata - e la tensione che arriva dal partitore sul entrata + del operazionale). puoi usare un LM357.
figura B del http://it.wikipedia.org/wiki/Amplificatore_operazionale

http://arduino.cc/en/Reference/AnalogReference

Ciao Uwe

Grazie, ho giocato con quel valore finchè non mi è venuto 3.30 preciso sul 3.3 di arduino. La pila ora mi dà 1.42 e se prendo in mano i due cavetti mi dà 0.00, quindi potrebbe andare... Ho fatto bene a prendere quel 3.3 come riferimento? Quel valore è stabile?
Grazie a tutti
P.S.= ti ringrazio uwe, ma per i piccoli esperimenti che devo fare può andar bene anche così :wink: