Échantillonner à plus de 10 bits avec une Arduino Uno

Sur les expériences et manipulations, buts, pertinence, déroulement, explication scientifique, organisation pratique et trucs et astuces... Pour les documents pédagogiques, merci de les placer dans la section du niveau concerné.

Échantillonner à plus de 10 bits avec une Arduino Uno

Messagede physicus » 04 Juil 2022, 15:35

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.

exemple-N4-.png
temperature_surechantillonage.ino
Vous n’avez pas les permissions nécessaires pour voir les fichiers joints à ce message.
physicus
 
Messages: 812
Inscription: 13 Aoû 2012, 16:48
Académie: Académie de Strasbourg
Poste: Enseignant en Lycée

Re: Échantillonner à plus de 10 bits avec une Arduino Uno

Messagede Czamb » 04 Juil 2022, 18:10

Merci pour le partage!
Super travail et idée de séance!
:-)
Czamb
 
Messages: 5
Inscription: 21 Avr 2021, 17:49
Académie: Créteil
Poste: Enseignant en Lycée/Collège


Retourner vers Les manipulations, les TP et autres activités expérimentales

Qui est en ligne

Utilisateurs parcourant ce forum: Aucun utilisateur enregistré et 1 invité