Misura tensione Arduino

Buon pomeriggio a tutti, spiego brevemente il problema che ho. Io vorrei misurare ogni 15 s o 30 s la tensione che ho in uscita dalle batterie del mio impianto solare, fino a qua non ci sono problemi, ho realizzato un partitore di tensione( ho trovato molti esempi su internet) utilizzo una resistenza da 7.5kohm e una da 30kohm. Ho notato che la precisione della misurazione e abbastanza scadente, ogni tanto arrivo a 0.05v dalla misura esatta fatta col multimetro e a volte sbaglia di 0.5 quindi possiamo dire che e' abbastanza scadente. Come posso fare a rendere più precisa questa misurazione? Misuro dai 10v ai 12.5v circa, uno dei problemi possibili e la tolleranza delle resistenze, variano i valori anche con le temperatura...
Non c'e modo di utilizzare dei condensatori oppure delle bobine? Sto diventando matto,ho provato a prendere 1000 valori e fare la media per essere più preciso ma niente...

Questo e il mio codice:

int analogInput = A1;
float vout = 0.0;
float vin = 0.0;
float R1 = 29200.0; //  
float R2 = 7500.0; // 
int value = 0;
float valori[1000]={};
float media = 0;
void setup(){
   pinMode(analogInput, INPUT);
   Serial.begin(9600);
   Serial.print("DC VOLTMETER");
}
void loop(){
   // read the value at analog input
   for(int i = 0;i < 1000; i++){
   value = analogRead(analogInput);
   vout = (value * 5.0) / 1024.0; // see text
   vin = vout / (R2/(R1+R2)); 
   valori[i] = vin;
   }
   for(int k = 0; k<1000 ; k++){
   media += valori[k];
   }
Serial.print("INPUT V= ");
media = media/1000;
Serial.println(media,2);
delay(1000);
}

Grazie mille a tutti

Compera resistenze di precisione allo 0,5% di errore contro le comuni resistenze del 5%

... anche il riferimento 5V di Arduino è piuttosto instabile; se vuoi veramente misure precise devi usare o un generatore di tensione di precisione collegato all'ingresso AREF o, se riesci a fare un partitore che ti da in uscita un segnale da 0 a 1V, puoi usare il riferimento interno a 1.1V che, è piuttosto stabile.

Ricorda inoltre che gli ingressi analogici prevedono un impedenza sull'ingresso <= 10KΩ, se è superiore metti tra pin analogico e GND un condensatore da un 100 nF (dovrebbe bastare).

Guglielmo

mozzini97:
ho provato a prendere 1000 valori e fare la media per essere più preciso

Hai provato anche a prendere coppie di valori esattamente distanziati di 10ms l'uno dall'altro?

Facendo riferimento alla risposta di gpb01, per il condensatore devo mettere il piedino del meno sul GND dell'Arduino e il positivo del condensatore posso metterlo su un pin analogico a caso oppure su quello che utilizzo(nel mio caso A0)?
Se il condensatore e' superiore ai 100nF va bene comunque?

Se voglio utilizzare il riferimento interno a 1.1V come devo fare? bisogna cambiare il codice?
Io uso un Arduino Mega ADk, ha un pin speciale che devo usare?

Se compro il modulo B25 potrei risolvere il problema?
Lascio il link del modulo: https://it.aliexpress.com/item/32851155810.html?spm=a2g0s.9042311.0.0.38a54c4dUTNt4W

Grazie mille a tutti

Il condensatore (100 nF) NON polarizzato va tra GND ed il pin analogico utilizzato se l'impedenza di ciò che si collega è > 10KΩ altrimenti non occorre.

Se vuoi utilizzare il riferimento interno a 1.1V (quindi in ingresso NON puoi dare più di 1.1V) devi selezionarlo con l'apposito comando analogReference() ... studia il reference.

Il modulo linkato non serve a nulla, e un normale partitore resistivo che puoi fare da solo con delle buone resistenze di precisione.

Guglielmo