La démarche scientifique avec Arduino au secondaire

Mesure et affichage de la température avec Arduino


Avertissement : Cet article n'est pas un tutoriel Arduino. Vous devriez avoir quelques notions de base pour bien appréhender cette activité, vous devriez en particulier être à l'aise avec les variables et l'utilisation basique de l'écran LCD avec Arduino.
Je vous invite à consulter le site officiel d' Arduino pour vous familiariser avec le matériel.
N'hésitez pas à poster des commentaires.
Bonne activité !


SECONDAIRE | DIFFICULTÉ MOYENNE | 2 À 4 HEURES

Résumé de l'activité


Dans cette activité la démarche scientifique est mise en avant. Pas besoin de savoir bien programmer ou de connaître l'électronique sur le bout des doigts pour mener à bien ce travail pratique.
Ici on se familiarise avec la prise de mesures expérimentales, leur traitement mathématique et leur application concrète. À la fin, nous aurons construit et programmé notre thermomètre numérique à affichage digital !


  • Étape 1 : Concevoir et construire la partie électronique
  • Étape 2 : Lire le signal analogique de la thermo-résistance dans différentes conditions de température
  • Étape 3 : Tracer la fonction f(signal)=température
  • Étape 4 : Afficher la température en degrés Celsius dans le moniteur série
  • Étape 5 : Afficher la température en degrés Celsius sur un écran LCD

Matériel


  • Arduino
  • Thermo resistance (modèle Keyes KY-013 dans ce TP)
  • Écran LCD
  • Resistance 220 Ohm
  • Potentiomètre 10 kOhm
  • Breadboard
  • Fils
  • Thermomètre 0-100˚C
  • Bouilloire
  • Glace
  • Un verre

L’utilisation du module Keyes KY-013 vous dispense de monter un pont diviseur de tension avec une résistance de 10kOhm. Celle-ci est déjà montée sur le PCB et le module est prêt à l’emploi. Pour plus d’information voir ici


Mise en place du protocole expérimental

Montage electronique

schéma

Vous remarquerez que la thermo-résistance est ici branchée à l’envers (- sur +5V et + sur GND). En effet, selon la fiche de donnée de Keyes, une élévation de la température provoque une chute de tension à la sortie signal. Intuitivement nous préférons que le signal augmente proportionnellement avec la température et avons donc branché intentionnellement le capteur à l’envers.
Mis-à-part cette particularité le câblage est très simple. Il s'agit de brancher la pin "signal" de la thermo resistance sur la pin analogique A0 de l'Arduino.


Un peu de code...


C'est le moment de rendre les choses un peu plus concrètes ! Démarrez le logiciel Aduino et tapez le code suivant. Nous nous attarderons par la suite à comprendre chaque ligne !


//Déclaration des variables

int thermo=A0;                  //Thermo-résistance branchée sur la pin A0
int valTemp=0;                  //Variable dans laquelle sera stockée la valeur du signal 
                                //analogique de la thermo-résistance

//Initialisation du programme

void setup() {
  pinMode(thermo, INPUT);       //Initialisation de la pin A0 en ENTRÉE
  Serial.begin (9600);          //Initialisation de la communication série à 9600 bauds
}

//Boucle principale

void loop() {
  valTemp=analogRead(thermo);   //lecture de la valeur du signal analogique de la 
                                //thermo-résistance et stockage dans valTemp
  Serial.println(valTemp);      //Affichage de la valeur de valTemp
  delay(200);                   //Pause de 0,2 seconde
}


Dans un premier temps nous déclarons les variables.

  • la valeur A0 est associée à la variable thermo et représente la thermo-résistance branchée sur la pin A0.
  • la variable valTemp dans laquelle sera stockée la valeur du signal analogique lu aux bornes de la thermo-resistance.


Puis vient la partie d'initialiation : le void setup.
Très simple, il ne comporte que 2 lignes :

  • Déclaration de la pin thermo [A0] en entrée.
  • Initialisation de la communication série qui nous permettra de lire la valeur du signal analogique de la thermo-resistance.


Et pour finir, la boucle principale : le void loop.
Trois étapes :

  • lecture du signal analogique de la pin thermo et stockage dans la variable valTemp.
  • Affichage à la ligne ("println") de valTemp dans le moniteur série.
  • Pause de 200ms.


Vous pouvez maintenant brancher votre arduino et téléverser le programme.
Cliquez sur la loupe en faut à droite de la fenêre Arduino pour faire apparaître le moniteur série. Par défaut il sera réglé sur le débit de 9600 bauds. Vous verrez alors dans la nouvelle fenêtre un signal analogique compris entre 450 et 500 (température ambiante) (voir images ci dessous).


Si vous mettez votre doigt sur la sonde, la température, ainsi que le signal, augmente.

Dans la suite de cette activité nous allons relever le signal obtenu lorsque la sonde est à différentes températures de référence.


Mise en place de l'expérience

Versez un peu d'eau bouillante dans un récipient (verre ou becher). Pas trop car nous allons prendre des mesures au fur et à mesure que la température redescend, et on veut qu'elle descende tout de même assez vite ! Plongez le thermomètre dans l'eau ainsi que la thermo-résistance.
Pas besoin de plonger tout le PCB, juste le petit composant qui dépasse !
Vous devriez observer une élévation du signal dans le moniteur série. Notez le signal obtenu à différentes température.

Pour les besoins de cette activité, j'ai relevé le signal à 80˚C, 60˚C, 40˚C, 30˚C, la température ambiante (24˚C) et la température d'un glaçon dans l'eau (0˚C).
Passons maintenant au traitement des données !


Analyse des résultats


Les valeurs de signal analogique relevées à différentes températures figurent dans le tableau suivant.


Température (Celsius) 0 24 30 40 50 60 80
Signal 325 520 593 642 713 757 867
Tableau : Relevé du signal à différentes températures

Vous pouvez maintenant ouvrir votre tableur favori et saisir les données. Représentez les données graphiquement sous forme de nuage de point. Tous les tableurs vous permettent d'ajouter une courbe de tendance et obtenir l'équation de la fonction.
Ici nous voulons obtenir le fonction f(signal) = température, fonction qui nous permettra de trouver la température quelque soit le signal analogique lu. La température devra donc figurer en ordonnées et le signal analogique en abcisses.


schéma

Nous obtenons donc la fonction température = 0,1463 x signal - 51,713, avec un coefficient de corrélation sommes toutes acceptable (0,98046).


Retournons maintenant au code pour programmer dans un premier temps un thermomètre avec affichage dans le moniteur (nous n'aurons alors pas à toucher au montage électronique), puis dans un deuxième temps avec un affichage LCD (après avoir fait bien sur un petit peu d'electronique pour câbler l'écran).

Affichage de la température dans le moniteur série


int thermo=A0;                      
int valTemp=0;   
                       
/*varible dans laquelle sera stocké le résultat de la fonction f(signal)=temperature */                                    
int temp=0;                            

void setup() {
  pinMode(thermo, INPUT);            
  Serial.begin(9600);           
}

void loop() { 
  valTemp=analogRead(thermo);  
                          
  /*Fonction f(signal)=température et stockage   du résultat dans la variable temp*/
  temp = 0.1463 * valTemp - 51.713;   
  
  /*Affiche à cette position la valeur de 'temp'*/                
  Serial.println(temp); 
    
  /*Attend 5 secondes avant de relever une   nouvelle température */            
  delay(5000);                         
}


Ce programme est identique au précedent à quelques exceptions près :

  • Nous déclarons une nouvele variable temp: c'est la température que nous allons calculer grâce à la fonction que nous avons trouvé expérimentalement
  • Nous appliquons dans le void loop la fonction f(signal)=température, soit temp = 0,1463 x valTemp - 51,713.
  • Nous affichons la valeur de temp, c'est à dire la température, dans le moniteur série



Montage et programmation du thermomètre électronique à affichage digital


Montage électronique


schéma affichage lcd température ky-013

Quelques précisions au sujet de ce montage :

  • Le potentiomètre est monté sur la pin V0 du LCD : il sert à régler le contraste de l'affichage.
  • Une résistance de 220 Ohm permet de protéger le rétro-élairage à LED de l'éctran LCD.
  • Si vous suivez attentivement tous les fils, ceci devrait se monter comme un Lego !


Encore un peu de code...


//Importation de la bibliothèque 'LCD'
#include <LiquidCrystal.h>             

//Déclaration des pins du LCD
LiquidCrystal lcd(12, 11, 5, 4, 3, 2); 

//Thermo-résistance branchée sur la pin A0
int thermo=A0;
//Variable dans laquelle sera stockée la valeur du signal analogique de la thermo-résistance                        
int valTemp=0;                          
//varible dans laquelle sera stocké le résultat de la fonction f(signal)=temperature                                     
int temp=0;                            

void setup() {
  //Initialisation de la pin A0 en ENTRÉE
  pinMode(thermo, INPUT); 
  
  //Initialisation de l'écran LCD : 16 colonnes et 2 lignes             
  lcd.begin(16, 2);  
  
  //Affiche 'température' sur l'écran LCD                  
  lcd.print("temperature :");          
}

void loop() {
  //Lecture de la valeur du signal analogique de la thermo-résistance et stockage dans valTemp 
  valTemp=analogRead(thermo);  
                          
  //Fonction f(signal)=température et stockage du résultat dans la variable temp
  temp = 0.1463 * valTemp - 51.713;   
  
  //Positionne le curseur de l'écran LCD sur la colonne 0, ligne 1
  lcd.setCursor(0, 1); 
  
  //Affiche à cette position la valeur de 'temp'                
  lcd.print(temp); 
  
  //Affiche 'degres C' à la suite de 'temp'                    
  lcd.print(" degres C"); 
   
  //Attend 5 secondes avant de relever une nouvelle température            
  delay(5000);                         
}


Voilà vous avez presque fini, félicitations !
Je ne prétend pas vous faire ici un cours de programmation de l'écran LCD, le site d'Arduino est riche en ressources, mais voici tout de même quelques petites précisions au sujet de ce code :

  • Nous importaons tout d'abord la bibliothèque LCD, puis déclarons ses pins
  • le LCD est initialisé dans le void setup, puis on demande à afficher le mot "Temperature" (nous nous attarderons pas ici sur l'affichage des accents et des caractères spéciaux)
  • les commandes "lcd.print" dans le void loop permettent d'afficher le résultat de la fonction f(signal)=température en temps réel. La prise de mesure et l'affichage sont mis à jour toutes les 5000 ms ("delay" que vous pouvez ajuster à votre guise).


Résultat final

thermomètre électronique avec Arduino et KY-013

BRAVO, VOUS AVEZ FINI ! ;)
C'est quand même un projet sympa, facile et qui marche bien !
Et il fait tout de même frais à Montréal l'hiver !
Laissez un commentaire ci-dessous si vous avez aimé / pas aimé / compris / rien compris !


Commentaires ?