Ciao lesto, non voglio entrare nel merito "Arduino", quindi mi limito alle osservazioni sull'uso dell'ADC. Ho studiato l'argomento per il mio progetto del Frequenzimetro, quindi posso dirti che:
l'ADC andrebbe alimentato separatamente, mediante una impedenza da 10µH tra Vcc e AVcc, inoltre è necessario un C da 100nF tra Avcc e GND. C'è poi la questione ARef, in genere nessun ricorre alle possibili alternative e quindi il riferimento per il comparatore resta l'alimentazione, sulla cui "sporcizia" si interviene mediante un C da 100nF tra ARef e GND, ma sulla cui stabilità non c'è nulla da fare. I modi alternativi, come sappiamo sono:
- INTERNAL: un riferimento di precisione interno al micro, del valore di 1,1V±0,1V, che aumenta di molto la risoluzione ma obbliga al ricorso ad un partitore per ridurre la tensione massima in ingresso al pin analogico appunto a 1,1V;
- La versione INTERNAL, nel caso della MEGA e di altri micro ATMEL, esiste nella configurazione alternativa INTERNAL2V56 con riferimento di precisione a 2,56V (in questo caso l'altro valore si definisce con INTERNAL1V1), che dimezza il fondo scala ma raddoppia la risoluzione standard
-EXTERNAL: è possibile in questo caso far ricorso a quegli integrati di precisione, della serie REFZ, che appunto grarantiscono una stabilità eccezionale ed il cui valore (che comunque non può superare i 5V) viene applicato al pin ARef (presente su Arduino, collegato al pin 21 dell'ATmega328P); ovviamente si tende ad usare quello più confacente alle proprie esigenze in tensione, per evitare partitori in ingresso.
Stabilita la parte hardware si può lavorare ancora sul software: sappiamo che la risoluzione di 10 bit può essere portata, senza troppi rallentamenti a 11 o 12 bit, e ciò migliora risoluzione e precisione; sappiamo ancora di questa cosa di ignorare la prima lettura, soprattutto quando si leggono in seuqenza diversi ingressi analogici; abbiamo sperimentato che un'ottima cosa, che compensa abbastanza bene sia qualche valore strano sparato dal sensore che qualche valore strano restituito dall'ADC, consiste nell'effettuare un certo numero di letture in sequenza, sommarne i valori e poi dividere il totale per il numero stesso di letture, ottenendo così una media aritmetica; l'ideale in realtà sarebbe poter calcolare la mediana o meglio ancora la moda (mi perdonino gli statistici ma vado a memoria labile e lontana) che dovrebbero escludere automaticamente i valori estremi, calcolando quindi una media molto più affidabile.
Comunque con quell'amico siciliano residente a Torino, alcuni mesi fa (dicembre 2013...o 2012? :D), riuscimmo a raggiungere risultati eccellenti in riferimento ad un buon termometro, sia in termini di misura assoluta che di linearità nel range tra 0 e 30°C, poi gli si spezzò un pin dell'LM35 e forse anche il cuore, visto che è sparito nel nulla e per sempre dal Forum ![]()