Une platine Arduino Uno numérise un signal analogique entre 0 et 5V sur 10 bits, on a donc 2^10 = 1024 niveaux possibles.
Dans certains cas, cette résolution n'est pas suffisante. Par exemple, beaucoup de kits Arduino sont livrés avec un capteur de température analogique TMP36 ( https://www.analog.com/media/en/technical-documentation/data-sheets/TMP35_36_37.pdf ) qui fournit une tension V entre 0 et 2 volts qui permet ensuite de calculer la température T en Celsius via une formule T = (V - 500 ) / 10 avec V en mV.
On a alors une résolution en température DT = 0.49 degrés Celsius qui est insuffisante pour faire de la calorimétrie.
Mais il est possible d'améliorer cette résolution grâce à la technique du "sur échantillonnage" dont la mise en œuvre est décrite notamment dans ce document de ATMEL https://ww1.microchip.com/downloads/en/appnotes/doc8003.pdf.
On va sur échantillonner la mesure analogique puis calculer une valeur moyenne et permettre ainsi statistiquement de diminuer l'incertitude sur la mesure. Comme on utilise des valeurs numériques codées en binaire, l'astuce pour calculer très vite est d'utiliser le fait que multiplier ou diviser par deux se résume à décaler d'un bit vers la gauche ou vers la droite un nombre binaire. Cette opération de décalage est classique dans un micro contrôleur (registre à décalage) et est très rapide (un cycle d'horloge).
Une autre hypothèse importante pour que cette méthode fonctionne bien, est que le signal soit légèrement bruité avec un bruit gaussien (fluctuations aléatoires). Certains systèmes réels ajoutent ainsi un bruit blanc au signal mesuré.
La démonstration mathématique des formules n'est pas faite mais doit se trouver sur le WWW.
Le principe du sur échantillonnage est le suivant:
si on veut augmenter de N bits la résolution de la numérisation ( exemple si N=5, on numérise avec une Arduino Uno sur 10+5 = 15 bits) alors on doit sommer 4^N mesures (ici 1024 mesure pour N=5) puis diviser par 2^N c'est à dire décaler de N bits vers la droite le résultat
La table 3-1 du document ATMEL résume les valeurs pour différents N.
En pièce jointe, vous trouverez une implémentation de cet algorithme avec une comparaison de deux mesures sur le même capteur TMP36: mesure par sur échantillonnage et mesure simple. Une copie d'écran de la console graphique de l'IDE Arduino illustre le gain de précision obtenu lors de la numérisation. Le capteur a été chauffé simplement en le pinçant entre deux doigts.
Cette technique du sur échantillonnage peut être exploitée dans l'enseignement supérieur (BTS, IUT, CGPE) ou utilisée pour améliorer des protocoles ou matériels fabriqués au laboratoire. Elle peut aussi illustrer en terminale spécialité PC l'amélioration de la précision d'une mesure par calcul d'une moyenne.