BTS Mesure BTS Mesure
DébutTP 1UARTLED RGBBilanCapteursDataloggingStationUltrasonCAN seriePontRégulationCO2

Mise en œuvre d’un capteur analogique et affichage sur un écran LCD

Vous pouvez télécharger le texte du TP ici.

Objectifs du TP :

Mise en oeuvre d'un écran LCD avec liaison I2C
     Présentation de la liaison I2C
     Utilisation de bibliothèques
     Utilisation des exemples intégrés dans l'IDE Arduino

Mise en œuvre d’un capteur de température LM35
     Révision sur les CAN, le quantum et la tension de référence
     Calcul de l'incertitude d'une mesure
     Utilisation de la fonction analogRead(A0)
     Utilisation de la fonction analogReference(INTERNAL)

Mise en œuvre d’un capteur de pression MPX5100AP
       Lecture et exploitation d'un datasheet

Le bus I2C

Le bus I2C (Inter Integrated Circuit Bus) permet de connecter plusieurs équipements sur le même bus.

Nous pouvons connecter sur le même bus I2C de l’Arduino : un écran LCD, un capteur de pression (BMP180), un accéléromètre-gyroscope (MPU6050)… Ces 3 équipements peuvent-être reliés à un Arduino par un seul bus I2C alors qu’il faudrait 3 liaisons UART distinctes…

 Le protocole I2C ne requière que 3 fils pour fonctionner et est géré nativement sur la plupart des microcontrôleurs :

·         un signal de donnée ( SDA ), Pin A4 sur l’Arduino Uno

·         un signal d'horloge ( SCL ), Pin A5 sur l’Arduino Uno

·         un signal de référence électrique ( Masse ).

D'autre part, ce bus est multi-maître (plusieurs circuits peuvent prendre le contrôle du bus) et sa longueur peut atteindre 3 à 4 mètres à condition que la charge capacitive n'excède pas 400 pF. Les résistances de rappel doivent être comprises entre 2kΩ et 10 kΩ. Les avantages à utiliser ce bus :

·         Il dispose d'un mécanisme d'adressage simple, robuste et efficace permettant à plusieurs périphériques (device) de fonctionner sur un seul bus. Adresse sur 7 bits + 1 bit pour le mode Read/Write émise par le Master => 127 adresses possibles.
(Par exemple l’adresse de notre écran LCD est Ox27 en hexadécimal ou 39 en décimal)

·         Il est plus rapide que l’UART : 100 kbit/s en standard, 400 kbit/s en fast .

·         Arduino dispose d'une librairie pour I2C, ce qui rend la mise en œuvre très facile. Cette bibliothèque est appelée par l’instruction : #include <Wire.h>

Ci dessous le chronogramme des pattes I2C SDA (A4) et SCL (A5) pour qu'un Arduino pilote notre écran LCD I2C :

1) Prise en main rapide de l’écran LCD :

Pour limiter le nombre de sortie utilisée, nous allons utiliser un écran LCD associé à une interface I2C.

Tout d'abord vérifier si la bonne bibliothèque LiquidCrystal est installée : dans ce cas elle apparaît dans la liste des Fichiers/Exemples.

Si celle-ci n'est pas disponible sur votre poste, il faut l'importer après l'avoir téléchargée en cliquant sur LiquidCrystal_V1.2.1.zip

Pour importer : Croquis/Importer bibliothèque/Ajpouter bibliothèque  puis Téléchargements/LiquidCrystal_V1.2.1.zip

La programmation de cet écran sera facilitée par l’usage de la bibliothèque  LiquidCristal et les exemples associés :

Comme le montre l’exemple pour utiliser ces bibliothèques il faut commencer par les incorporer dans notre programme en mettant au tout début de notre programme (avant le setup) :

/* 1) Zone 1 : les déclarations */
// 1.a) Les bibliothèques et création d'objets  
#include <Wire.h>  // ajoute la bibliothèque pilotant le bus I2C
#include <LiquidCrystal_I2C.h>     // ajoute la bibliothèque pilotant l’écran LCD I2C

// crée l'objet LCD avec l'adresse 0x27 avec 16 colonnes et 2 lignes d'affichage 
LiquidCrystal_I2C lcd(0x27, 2, 1, 0, 4, 5, 6, 7, 3, POSITIVE);
// Adresses utilisées en J101 Adresse : 0x27

a) Branchement et test :

1-1. Après avoir alimenté l’écran avec GND et  5 V,
       relier la borne SDA sur la borne Analog In A4
       et la borne SCL sur la borne Analog In A5.

Sur l’Arduino Uno la borne A4 correspond à SDA et A5 à SCL.

1-2. Ouvrez  l’exemple : 
       vérifier l'adresse de votre écran (0x27 par défaut, ou 0x3F dans ce cas c'est écrit au dos de votre écran)
       changer si nécessaire l'adresse sur le programme : LiquidCrystal_I2C lcd(0x3F,...
       tester votre écran 16 colonnes, 2 lignes.

Quelques fonctions utiles dans cette bibliothèque :

		lcd.begin(16,2);	  // initialise l’écranen 16 colonnes et 2 lignes (dans le setup)
		lcd.noBacklight();   // Pas de rétro éclairage
		lcd.backlight();	 // Allume le rétroéclairage
		lcd.clear();	       // efface l’écran
		lcd.home();	       // Place le curseur à Colonne 0 , Ligne 0
		lcd.setCursor(colonne, ligne);
		lcd.print(" Arduino !");
		lcd.write(0xDF);	    // affiche le caractère correspondant au code 223 : ° (le code ASCII n’est pas respecté)
		lcd.noDisplay();       // Eteint l’afficheur
		lcd.display()	    // allume l’afficheur

b) Exercice :

La table des codes des caractères disponibles est ici.

On en déduit que le caractère ° a pour code 0b 1101 1111 soit 223 en décimal.

lcd.write(223); // affiche le caratère spécial °

Déclarer la variable T :  float T = 23.2 ;

1-3. Modifier le programme Hello world pour qu’il affiche :

- en première ligne (ligne 0) : " * Temperature *"  (attention les accents ne sont pas disponibles)
- en deuxième ligne (ligne 1) : "T=" la variable T avec un rafraichissement de une fois par seconde et une incrémentation de T de 0,1° par seconde (T=T+0.1)
- la température la variable T est affichée avec un chiffre après la virgule (soit ici 3 chiffres significatifs)
- Affichage souhaité ci-dessous :

Par défaut la fonction .print(T) affiche un réel (float) avec 2 chiffres après la virgule.
Par contre .print(T,1)  permet d'afficher un seul chiffre après la virgule.

c) Mesure Physique : le temps...

1-4.     Observer à l'aide de l'analyseur logique les échanges sur SDA et SCL.
           Sélectionner l'analyseur I2C et paramétrer-le.
           Mesurer la fréquence de l'horloge de SCL.
           Sur SDA, mettez en évidence l'adresse de l'écran I2C. 
           Mesurer le temps matériel nécessaire à la liaison I2C pour transmettre le message.
           Utiliser ce programme pour mesurer le temps logiciel pour l'exécution des routines d'affichage de l'écran LCD
           Faites une capture d'écran et la joindre à votre compte-rendu

Appel 1 : faites valider par le professeur la partie 1

2) Mise en œuvre d’un capteur de température LM35

Attention !!!   Le LM35 n'aime pas du tout être monté à l'envers (il part en fumée).
                        A la mise sous tension : tenez-le, s'il chauffe coupez l'alimentation.
                        La patte 5 V est à connecter à la borne 5 V  de la carte (au niveau de POWER).
                        La patte Sortie est à connecter à une entrée analogique A0 par exemple.
                        La patte GND est à connecter à la borne GND de la carte (au niveau de POWER).

Le LM35 de National Semiconductors :

·         pas très cher

·         mise en oeuvre très simple.

·         sa tension de sortie est linéairement proportionnelle à la température exprimée en degrés Celsius.

·         Sensibilité : s = 10 mV/°C.

·         Précision : LM35D: ± 1,5 °C (valeur garantie) et ± 0,6°C à 25°C

·         Gamme de mesure : 0 à 100 °C

Dans les calculs demandés ci-dessous nous supposerons que la précision correspond à
l'incertitude élargie U (Uncertainty)  pour un niveau de confiance de 95%.
Pour une mesure de 25°C avec une précision de ± 0,6°C, nous devrions écrire le résultat  sous cette forme :
T = 25 ± 0,6°C  ce qui revient à dire que T ∈ [24,4°C; 25,6°C] avec un niveau de confiance de 95%
                                                                                                           ou 5% de risque d'être en dehors de cet intervalle.

a) Calculs préliminaires

2-1.      D’après les données constructeur, calculer la tension délivrée par ce capteur à 25 °C.

2-2.      Quelle précision peut-on attendre à cette température ?

2-3.      Rappel : le CAN de l’arduino est de 10 bits, sa tension de référence est de 5 V. Que vaut le quantum de l’Arduino ?

2-4.      La résolution du CAN de l’Arduino est de 1 LSB. Cela représente quelle résolution en °C ?

2-5.      L'exactitude du CAN de l’Arduino est de ± 2 LSB. Cela représente quelle incertitude élargie à 95 % en °C ?
         L'exactitude est une appréciation qualitative des résultats, il est plus aisé de la quantifier par l'incertitude élargie U.
         Il est à noter que le terme « précision » n'est pas utilisé et constitue une erreur de langage en métrologie.
         Ce terme est en effet absent du Vocabulaire international de métrologie
1
extrait de Wikipédia

2-6.      Quelle est alors l'exactitude que l’on peut attendre de l’association LM35 – Arduino ?
         Propagation des incertitudes : permet de prendre en compte plusieurs sources d'incertitudes dans une chaîne de mesure.
         Nous avons ici 2 sources d'incertitudes élargies à 95 % : le capteur (ULM35) et l'Arduino (UArduino) qui mesure la tension de sortie du capteur
                                                                          

Pour améliorer cette précision on va utiliser la fonction :

			analogReference(INTERNAL)   INTERNAL: tension de référence intégrée de 1.1 volts	

2-7.      Calculer pour un VREF = 1,1 V, le nouveau quantum de l’Arduino.

2-8.      Cela représente quelle incertitude élargie à 95 % en °C ?

2-9.      Quelle est alors la nouvelle  incertitude élargie que l’on peut attendre de l’association LM35 – Arduino ?

b) Réalisation du programme

2-10. Réaliser un programme affichant la température sur votre écran LCD avec un taux de rafraichissement de 1 seconde.

2-11. A l’aide d’un transducteur piézoélectrique réaliser une alarme qui se déclenche si la température dépasse 30°C. (On pourra utiliser la fonction tone(pin, frequency)).

2-12. Vous pouvez aussi ajouter une LED RGB qui :

  • s'allume en bleu si T < 24°C

  • s'allume en vert si 24 < T < 26°C

  • s'allume en rouge si T > 26°C + alarme sonore

Arduino pour les nuls : structure du programme commenté à compléter.

Remarque : le capteur de pression MPX peut perturber les mesures du LM35.
Remède :    ajouter une résistance de charge de 10 k entre la sortie et la masse du LM35.

Appel 2 : faites valider par le professeur la partie 2

3) Mise en œuvre d’un capteur de pression MPX5100AP

Sur internet rechercher le datasheet du MPX5100AP.

Attention : ne pas inverser Vcc et GND, sinon destruction du composant (facturé 25 €)

3-1.        A l’aide de ce datasheet compléter :
            Gamme :                                      hPa
            Précision :                                   %
            Sensibilité :                                 mV/kPa
            Sortie amplifiée :                         V

3-2.        Exprimer la Pression en fonction de la tension de sortie Vout.

3-3.        Calculer la tension théorique Vout
         correspondant à une pression de 1015 hPa

3-4.        Ce capteur vous semble-t-il adapté à un Arduino ?

3-5.        Quelle référence de tension (5 V ou 1,1 V) doit-on utiliser ?

3-6.        Quelle va être la précision du CAN de l’Arduino en Pa ?

3-7.     Réaliser un programme affichant la température en °C et la pression en Pa
        sur votre écran LCD avec un taux de rafraichissement de 1 seconde.
        Attention aux références de tension ! (Si nécessaire demander conseil au professeur)

Appel 3 : faites valider par le professeur l'affichage des mesures P et T

3-8.  A l'aide d'une seringue faire varier la pression.
        Proposer un protocole afin de vérifier la loi de Boyle Mariotte
        (PV = cste si T= cste)
        Réaliser ce protocole (5 points minimum).
        Vous pouvez utiliser l'Interface Homme machine développée en Labview
        disponible sur cette page.

Joindre au compte-rendu les diagrammes de Clapeyron et P(1/V) de votre expérience.
Conclure sur la fiabilité de votre capteur.

Exemple d'une manipulation pour vérifier la loi de Boyle Mariotte

La courbe P(1/V) peut ne pas passer par l'origine.
Cela provient du fait que notre capteur n'est pas étalonné.
Durant une prochaine séance nous allons étalonner le MPX5100.
Cela nous permettra de déterminer :
    - la sensibilité de notre capteur et corriger son erreur de gain induite par le datasheet
    - l'offset de notre capteur et de corriger son erreur d'offset

Appel 4 : faites valider par le professeur la vérification de la loi de Boyle Mariotte

4) Pour aller plus loin : afficher les mesures sur son portable !

Pour continuer la découverte de  App Inventor et se préparer aux projets, je vous propose d'afficher la température et la pression mesurée sur votre portable.

Nous allons utiliser comme pour la LED RGB un module bluetooth pour transmettre les mesures.

Modifications sur le programme Arduino :

  • Initialiser la liaison série dans le Setup.

  • transmettre par la liaison série un message du type : Trans;i(numéro de mesure);T(température);P(pression);Fin

  • durée du cycle 500 ms précisément.

  t0=millis();  // top départ
  i++;
  Vout=q*analogRead(A0);
  T=100*Vout; 
  Vout=q*analogRead(A1);
  // MPX5100AP datasheet : VOUT = VS (P x 0.009 - 0.095)
  Pabs=10*((Vout/5.0)+0.095)/0.009; 
  Serial.print("Trans;");
  Serial.print(i);Serial.print(";");
  Serial.print(T,1);Serial.print(";");
  Serial.print(Pabs);Serial.print(";");
  Serial.println("Fin");
  while (millis()-t0<500);// attendre 500 ms  

Appel 5 : faites valider par le professeur votre application

Le design App Inventor :

Le programme principal :

La procédure Attente :

Le but de cette procédure est d'être sûr d'attendre la fin de transmission du message.

C'est utile pour les anciennes versions d'Android (notamment sur les veilles tablettes de la J101).

Elle est facultative pour les versions Android plus récentes.

Le Bluetooth :

Si vous avez gardé le programme de contrôle de la led RGB, vous pouvez récupérer cette partie de programme grâce au sac à dos...

Le sac à dos permet de copier des blocs d'un projet vers un autre projet...

Modif : créer une alarme

Modifier le programme comme ci-dessous :

  • Texte en bleu si T < 27°C

  • Texte en vert si 27 < T < 30°C

  • Texte en rouge si T > 30°C + alarme sonore

Vous pouvez télécharger le son de l'alarme ici. Ou prendre un fichier MP3 de votre choix (très court de préférence).

Autre amélioration : lorsque l'on appuie sur l'image (mise dans Button1), l'application TTS (Media/TextToSpeech) nous lit à haute voix la pression et la température.
Est-ce que la lecture empèche les nouvelles données de s'afficher ?

Modifier le programme ci-dessus :
Si aucune mesure de disponible, le texte lu devient : "Pas de mesure transmise".

Ajouter un bouton Fin à côté de Liste : lorsque l'on appuie dessus , le téléphone se déconnecte et le texte du bouton Liste redevient Liste (au lieu de Connecté).

Pour le reste, laissez parler votre imagination...

 

Rendre le compte rendu soit :

  • sur feuille

  • fichier word dans le répertoire de la classe 1MMesures/Mesures : Capteurs_Nom1_Nom2

  • fichier word Capteurs_Nom1_Nom2 par email à bts.mesure@free.fr