Température en secondes ?

Comment calculer simplement une température avec une mesure en secondes ?

La théorie

Il suffit de se rappeler que la vitesse du son dépend de la température de l’air suivant la formule des gaz parfaits suivante : (gamma = coefficient de Laplace, Rs = constante spécifique du gaz parfait)

Pour l’air, l’approximation numérique donne (T en Kelvin. Rappel °C = °K – 273,15)

Une linéarisation à température ambiante se simplifie en :

L’idée est alors de mesurer le temps (t) que met un signal sonore à parcourir une distance connue (d) pour en déduire la vitesse du son, puis la température (T) à partir d’une des deux équations.

Implémentation avec un Arduino

Nous utilisons un capteur ultrason HC-SR04 fixé sur une planche de longueur connue (50 cm) qui envoie une impulsion (de 10 µs). Cette impulsion est réfléchie sur la planche en bois verticale.

Nous récupérons le temps mis par l’impulsion pour faire l’aller-retour (2*50cm) pour calculer la vitesse du son, puis en déduire la température à l’aide des formules ci-dessus.

Le branchement du capteur est direct (2 fils pour l’alimenter GND/5V, une entrée sur le pin 13, une sortie sur le pin 12). En revanche, je vous conseille de mettre un condensateur (autour de 220 µF) entre les deux bornes du capteur (GND/5V) afin de lisser la tension d’entrée. J’ai en effet remarqué que les mesures du capteur dépendent fortement des variations de la tension.

Comme je ne sais pas exactement où la mesure se fait dans le capteur (et que chaque mm est important), j’ai étalonné la distance avec une première mesure (voir la constante dans le code : d = 50 – 0.88)

Photo à l'extérieur
Dispositif à l’extérieur : un thermomètre donne 13,8°C
Dispositif à l’intérieur : un thermomètre donne 20,5 °C

Le programme fait 100 mesures espacées de 100 ms, puis moyenne le résultat. Nous observons qu’en intérieur, le résultat de la mesure est moins bruité (courants d’air ? sons parasites ?)

Extérieur : T° cible = 20,5°C, moyenne = 20,45°C, écart-type = 0,35

Intérieur : T° cible = 13,8°C, moyenne = 13,56°C, écart-type = 0,93

Enfin, astuce de présentation, je n’utilise pas Arduino IDE pour afficher les résultats de la console car on ne peut pas changer la taille de la police de caractères. J’utilise PuTTY (paramétré sur le port série /dev/ttyUSB0 sur Linux).

Code


/////////////////////////////////////////////////////////////
//Calcul de la témpérature en fonction de la vitesse du son
// Pierre Raufast - mars 2026
//////////////////////////////////////////////// e/////////////

int emetteur = 13;  // émission UltraSon: fil bleu
int recepteur = 12; //réception écho: fil vert
long duree;    // micro secondes renvoyées par le capteur US

// initialisation des connexions
void setup() {
  Serial.begin (9600);
  pinMode(emetteur, OUTPUT); 
  pinMode(recepteur, INPUT);
}

// boucle principale
void loop() {

  float TempMoy=0.0;      // formue 1
  float TempMoy2=0.0;  // formule 2
  float N = 100.0;  // nombre de mesures pour moyenner

  //série de N mesures pour moyenner
  for (int i=0; i<N; i++)
  {
    //Émission d'un pulse ultrason pendant 10 microsecondes
    digitalWrite(emetteur, HIGH);
    delayMicroseconds(10);
    digitalWrite(emetteur, LOW);

    //temps de reception de l'écho - appel bloquant
    duree = pulseIn(recepteur, HIGH);
    
    // correction de la distance, étalonnée pour T = 21,2 -> -0.88
    float dist = 50-0.88;  
    
    // calcul de la vitesse du son v = d/t (aller-retour)
    float v = 2.0*dist/duree*10000.0;
    
    // calcul de la temperature avec la loi v = 20.06*sqrt(temp)
    float t = ((v*v)/(20.06*20.06))-273.15;
    
    // calcul de la température avec la loi v = 331.5 + 0.607*T
    float t2=(v-331.5)/0.607;

    // ajout pour calculer les moyennes
    TempMoy += t;
    TempMoy2 += t2;
    // attente entre 2 mesures
    //Serial.print("*");
    delay (100);
  }
  Serial.println("");
  

  // affiche le résultat de la formule 2 
  Serial.print("  Temperature M1 = ");
  Serial.print(TempMoy/N);
  // affiche le résultat de la formule 2 
  Serial.print("  Temperature M2 = ");
  Serial.print(TempMoy2/N);
  Serial.println("°C");
  }

Conclusion

Voici un TP très simple pour vos stagiaires de 3eme ou de 2eme qui donne une façon simple, originale et amusante de calculer la température en fonction d’une durée !