Allora, io faccio così, ad es. per l'LM336 che ha un riferimento fisso a 2,5V, se guardi il datasheet a pagina 2, trovi le typical applications
Occhio che ci sono anche altri schemi a seconda delle necessità, quindi non limitarti a quello che ho riportato io, ma dai un'occhiata anche agli altri se possono fare al caso tuo.
Uso due pin analogici, il primo per l'LM336 e il secondo per il partitore della tensione che mi interessa misurare.
Faccio due letture sequenziali, la prima sull'LM336 e la seconda sul circuito da monitorare.
Ora, la lettura analogica va da 0 a 1023, il 1023 corrisponde alla tensione di alimentazione del tuo arduino, quindi in teoria i 5V stabili.
Assumendo che l'alimentazione sia perfetta a 5V dovresti trovare una lettura dell'LM336 pari a 1023/2 visto che il riferimento è a 2,5V.
Se non è così, non hai Vcc = 5V.
Io ad es. mi trovato una Vcc = 4V (arrotondo per semplicità), quindi il mio 1023 corrispondeva a 4V e non a 5V, facendo la semplice proporzione 1023 : 4V = x : 2,5V ricavi il valore atteso della lettura analogica del tuo l'LM336 che diventa 639 invece dei 512 attesi per l'alimentazione a 5V.
Assumiamo che invece leggi 600, da questo ti ricavi una Vcc di 1023 : Vcc = 600 : 2,5 => Vcc = 4,26V
Ora, se al posto dei 600 metti la lettura del tuo campione da monitorare, trovi la sua tensione con lo stesso calcolo fatto per Vcc.
Se non ricordo male, l'alimentazione è da pannello solare, quindi potrebbe variarti nel tempo, mi sa che ci hai messo un condensatore un po' corposetto per livellare un pelo le varie fluttuazioni, qualche centinaio di uF, giusto?
Questo ti dovrebbe garantire abbastanza stabilità tra le due letture per rendere il calcolo sufficientemente affidabile perchè la Vcc non dovrebbe cambiare troppo repentinamente tra le due letture, che se fai in rapida successione sono vicinissime.
E comunque, per migliorare le cose, io suggerisco sempre di fare un tot di letture e prenderne la media per evitare picchi spuri.
Ad es. 10 letture alternate dell'LM336 e del tuo campione.
Altro voltage reference che uso è il TL431.
Questo ha una Vref variabile da 2,5V-36V e la puoi decidere in base ad un partitore fatto con resistenze.
Trovi i circuiti da pag. 25.
La sua Vref interna è di 2,5V, ma in base alla tensione di alimentazione e allo schema di pagina 25 (Figura 27) puoi avere un riferimento differente in base alla formula
Vo = (1 + R1/R2) * Vref
Ovviamente la tensione di alimentazione Vsupp deve essere maggiore della Vo che vuoi ottenere.
Leggi quanto scritto da 10.2.1.1 in poi, che spiega come dimensionare le varie resistenze per garantire una corretta polarizzazione, altrimenti il dispositivo non si comporta come atteso.
Dovresti poter ottenere lo stesso risultato con il riferimento interno a 1,1V, però, per farlo, devi impostare il range di misura a 1,1V, riducendo a 1/5 la tensione massima che puoi leggere, a me non piace perchè diventa più difficile fare i partitori di tensione per ridurre tutti i punti da misurare a questa tensione massima a cui i vari disturbi assumono un peso 5 volte maggiore. E' fattibile, ma si hanno meno tolleranze e io non mi ci trovo molto bene, per cui preferisco usare i riferimenti esterni facendo le misure a 5V di fondo scala.
Quando ho adottato questo approccio mi sono fatto scorta su AliExpres di questi componenti e con pochi euro me ne sono presi a decinaia.
Quando ho iniziato a studiarmi un po' Arduino, dalle varie letture fatte mi sono estratto l'elenco dei componenti più comuni e interessanti che potevano servirmi in futuro e con pochissima spesa mi sono fatto una dotazione preventiva di sopravvivenza e in un paio di mesi mi son ritrovato ben fornito per poter sperimentare un po' di tutto.
Maurizio