IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)

Arduino à l'école

Cours pour l'apprentissage des bases de l'électronique et de la programmation sur Arduino
Image non disponible


précédentsommairesuivant

XIX. Projet 11 : construire une station météo

Objectif : utiliser un capteur température/humidité et afficher les données sur un écran LCD.

Ce projet est la synthèse des inputs analogiques, avec comme bonus l'utilisation d'un écran pour l'affichage des données.

Connaître la température et l'humidité est une information utile pour vivre confortablement, pour stocker des aliments ou du matériel, pour des prévisions météo… Avec ce projet nous apprendrons comment mesurer ces deux données et à les afficher sur un écran LCD.

Avec les projets précédents, nous avons appris à mesurer des valeurs (intensité lumineuse et température) avec des capteurs analogiques grâce aux entrées analogiques de la carte Arduino qui sont munies d'un composant qui transforme les valeurs analogiques mesurées en valeurs numériques. Mais il existe aussi de nombreux capteurs qui transforment eux-mêmes, les valeurs analogiques mesurées en valeurs digitales exploitables par des moyens informatiques. C'est le cas d'un capteur de température et d'humidité très répandu et bon marché, le DHT11 que l'on va utiliser pour ce projet.

Image non disponible
En bas à droite, de couleur bleue, le capteur DHT11, au-dessus l'afficheur LCD de deux lignes de 16 caractères qui indique la température et l'humidité actuelle. On remarque aussi un potentiomètre (résistance variable) sur la partie droite du breadboard dont le rôle est de régler la luminosité de l'écran.

Le capteur DHT11 est fourni avec de nombreux kits pour Arduino, autrement on peut l'acheter pour quelques francs. Le DHT11 ne mesure que des températures positives, entre 0 °C et 50 °C avec une précision de ±2 °C et des taux d'humidité relative de 20 à 80 % avec une précision de ±5 %. Pour des besoins plus pointus ou s'il s'agit de mesurer aussi des températures négatives, il faut se munir de son grand frère, le DHT22, deux fois plus onéreux, mais dont la plage de mesure s'étend de -50 °C à +125 °C, avec une précision de 0,5 °C et de 0 à 100 % (précision ±2 %) pour la mesure de l'humidité relative.

Image non disponible
Attention : il existe des versions des capteurs DHTxx qui ne sont pas prémontés sur un petit circuit comme le modèle de gauche ci-dessus utilisé dans ce projet. Si c'est le cas, il faut ajouter une résistance de tirage de 5 à 10 kOhms et un condensateur de 100 nF entre les broches 1 (alimentation 5 V) et 4 (GND). Un schéma du câblage est disponible par ici : https://www.carnetdumaker.net/.

Circuit 15

Utilisation du capteur de température et d'humidité
Quand on tient le capteur avec la grille en face de nous, la broche centrale est l'alimentation, elle doit être reliée au 5 V de l'Arduino. La broche la plus à droite sera reliée au – (GND). Quant à la broche la plus à gauche, c'est la broche de données, elle sera connectée à l'entrée digitale utilisée pour lire les données.
Une fois ces données connues, le montage est un jeu d'enfant et un schéma est ici inutile, nous allons choisir le Pin7 pour les données :

Image non disponible

XIX-A. Code 21 : acquérir les données du capteur et les afficher

L'objectif de ce code est d'acquérir via l'une des broches digitales de l'Arduino, les données de température et d'humidité transmises par le capteur DHT11, puis de les afficher sur l'écran de l'ordinateur. Pour communiquer avec le capteur, il faut dans un premier temps télécharger et installer la bibliothèque spécifique à ce capteur (ou plutôt l'une des bibliothèques pour ce capteur, car il y en a plusieurs versions). Les bibliothèques sont des ensembles de fonctions qui s'ajoutent aux fonctions de base du logiciel Arduino.IDE. Certaines bibliothèques sont préinstallées, par exemple celle intitulée LiquidCrystal dont nous aurons besoin plus tard pour l'affichage sur l'écran LCD, d'autres doivent être installées par l'utilisateur au fur et à mesure de ses besoins. La bibliothèque DHTLib que nous allons utiliser pour ce projet fait partie de cette dernière catégorie et doit donc être installée « à la main ».

Depuis la version 1.6.0 de l'IDE Arduino, un gestionnaire de bibliothèque a permis de grandement simplifier l'installation et la mise à jour des bibliothèques. Le gestionnaire est accessible via le menu CroquisInclure une bibliothèqueGérer les bibliothèques. Une fenêtre de gestion des bibliothèques apparaît dans laquelle il est possible de rechercher une nouvelle bibliothèque en tapant son nom dans le champ de recherche en haut à gauche ou de faire des mises à jour des bibliothèques existantes.

Image non disponible

Ci-dessus, en tapant « dht » dans le champ de recherche, on obtient en seconde position la bibliothèque DHTLib que nous allons utiliser. Il ne reste plus qu'à l'installer en cliquant sur le bouton qui apparaît sur la droite quand on la sélectionne.

Une autre solution pour installer une bibliothèque consiste à télécharger le fichier .zip de la bibliothèque désirée, puis de l'installer via le menu CroquisInclure une bibliothèqueAjouter une bibliothèque.zip.

La bibliothèque DHTLib peut être téléchargée ici : http://www.circuitbasics.com/wp-content/uploads/2015/10/DHTLib.zip.

Note : sur les postes élèves, les bibliothèques supplémentaires sont installées dans le dossier personnel de l'utilisateur et ne seront donc accessibles que pour ce seul utilisateur, il faut disposer d'un accès administrateur pour installer une bibliothèque pour tous les utilisateurs d'un ordinateur.

Attention, pour que la bibliothèque nouvellement installée soit utilisable, il faut quitter puis relancer Arduino.

La bibliothèque ad hoc étant maintenant installée, on peut passer au code :

Code 21
Sélectionnez
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
/*
   Code 21 - Edurobot.ch, destiné à l'Arduino
   Objectif: Afficher la température et l'humidité sur un écran
*/

//***** EN-TÊTE DÉCLARATIF *****
#include <dht.h> // on charge la bibliothèque

dht DHT;            // on crée l'objet du capteur DHT11
#define DHT11_PIN 7 // on définit le Pin qui sera utilisé pour recevoir les données
 
void setup() // début de la fonction setup()
{
    Serial.begin(9600); // Pour une fois, l'ouverture du port série et la définition de 
                        // sa vitesse en bauds est utile, même indispensable puisque l'on
                        // va utiliser ce port pour afficher les valeurs du capteur.
}

//***** FONCTION LOOP = Code d'initialisation *****
// La fonction setup() est exécutée en premier et une seule fois, au démarrage du programme

void loop()  // début de la fonction loop()
{
    int chk = DHT.read11(DHT11_PIN);    // on lit l'état du capteur
    Serial.print("Temperature = ");     // on écrit le mot Température sur le moniteur
    Serial.println(DHT.temperature);    // on affiche sur la même ligne la température lue
    Serial.print("Humidite = ");        // on écrit le mot Humidité sur le moniteur
    Serial.println(DHT.humidity);       // on affiche sur la même ligne l'humidité lue
    delay(1000);    // on fait une pause de 1 seconde entre 2 interrogations du capteur
}

Pour visualiser les données transmises par le capteur, il faut encore ouvrir une fenêtre du moniteur série sur votre ordinateur : Menu OutilsMoniteur série.

Image non disponible
Tant que le moniteur série est ouvert, la température et l'humidité mesurées s'affichent une fois par seconde

Circuit 16

Affichage des valeurs mesurées sur un écran LCD

Afficher le résultat des mesures sur le moniteur série est bien sympathique, mais si l'on veut faire une installation de mesure permanente et autonome, cette solution ne convient pas, car il faut que l'ordinateur soit en permanence allumé et branché à la carte. L'affichage sur un petit écran LCD est une solution bien plus élégante et pratique. L'un des écrans LCD les plus répandu dans le monde Arduino et qui est souvent fourni avec les kits de base est le modèle dit 16x2 LCD (il est capable d'afficher deux lignes de 16 caractères chacun). À l'achat un tel écran coûte entre 7 et 15 €.

Image non disponible

Note : le but final étant d'afficher la température et l'humidité transmise par le capteur DHT11, il est conseillé de laisser le circuit 9 en place (sur un côté ou une extrémité de la breadboard , autrement il faudra le recâbler plus tard. Les images ci-dessous ne comprennent volontairement pas le DHT11, toujours branché à la Pin7 afin d'améliorer leur lisibilité.

Liste des composants :

  • 1 écran LCD 2x16 ;
  • 1 potentiomètre (résistance variable) ;
  • 1 résistance de 220 Ω ;
  • 1 capteur DHT11 (déjà câblé depuis le circuit 9).
Image non disponible

Il existe une grande variété de modèles d'écran LCD, certains forts pratiques ayant déjà des pins qui dépassent à la face inférieure et qui s'encastrent directement dans la breadboard, d'autres nécessitant l'usage de connecteurs mâle-mâle pour pouvoir se connecter à la breadboard ou directement à la carte Arduino via des câbles de liaisons.

Tous les modèles d'écran LCD sont dotés de 16 Pins dont le câblage est le suivant :

Image non disponible
  • Les deux premiers pins tout à gauche servent à l'alimentation de l'écran. Pôle négatif ou GND pour le premier et pôle positif (5 V) pour le 2e
  • Le 3epin est connecté à un potentiomètre et sert à régler le contraste de l'écran LCD
  • Le 4e, noté RS pour Register Select, est connecté au pin 12 de l'Arduino. Il sert à sélectionner la zone mémoire de l'écran LCD dans laquelle nous allons écrire
  • Le 5e doit être connecté au ground (GND)
  • Le 6e, noté E pour Enable, est connecté au pin 11 de l'Arduino. Il permet de lancer ou non l'écriture dans les zones mémoire
  • Les quatre suivants (7, 8, 9 et 10e) sont reliés au ground (GND)
  • Les quatre qui suivent (11e à 14e, notés 5, 4, 3, 2 sur le schéma ci-dessus, car ils se connectent sur les Pins 5, 4, 3, 2 de l'Arduino. Ils servent pour la transmission des données à afficher
  • Les deux pins tout à droite (15 et 16e) servent pour alimenter la LED du rétroéclairage de l'écran LCD. Attention, l'avant-dernier (pôle positif 5 V) doit impérativement être protégé par une résistance d'environ 220 Ω. Le dernier est relié au pôle négatif (GND)

Une fois le montage effectué et l'Arduino branché au port USB de l'ordinateur, vous pouvez tourner le potentiomètre et vous verrez le contraste de l'écran se modifier.

XIX-B. Code 22 : afficher les données sur l'écran LCD

Contrairement à la bibliothèque « DHTLib » utilisée auparavant, la bibliothèque « LiquidCrystal » est incluse avec le logiciel Arduino IDE, mais il faut tout de même l'installer avant de pouvoir l'utiliser.

Menu : CroquisInclure une bibliothèqueGérer les bibliothèques.

Dans l'onglet de recherche, tapez : « LiquidCrystal ». Si la bibliothèque est déjà installée, vous verrez noté « INSTALLED » à côté de son nom, autrement cliquez sur Install.

Attention, pour que la bibliothèque nouvellement installée soit utilisable, il faut quitter puis relancer Arduino IDE.

Code 22
Sélectionnez
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
/*
   Code 22 - Edurobot.ch, destiné à l'Arduino
   Objectif: Afficher la température et l 'humidité sur un écran LCD
*/

//***** EN-TÊTE DÉCLARATIF *****
#include <dht.h>            // on inclut la bibliothèque pour le capteur DHT11
#include <LiquidCrystal.h>  // on inclut la bibliothèque pour l'écran LCD

LiquidCrystal lcd(12, 11, 5, 4, 3, 2); // on crée l'objet LCD et on définit les Pins utilisés

dht DHT;        // on crée l'objet du capteur DHT11

#define DHT11_PIN 7     // on définit le Pin utilisé pour les données du DHT11
 
void setup(){
    lcd.begin(16, 2);   // on initialise la communication avec l'écran LCD
}
void loop()
{
    int chk = DHT.read11(DHT11_PIN); // on lit les données du capteur DHT
    lcd.setCursor(0,0);              // on place le curseur de l'écran LCD au début de la 1ère ligne
    lcd.print("Temp: ");             // on écrit le mot "Temp: " à l'emplacement du curseur
    lcd.print(DHT.temperature,1);    // on écrit la température lue par le capteur, avec 1 chiffre derrière la virgule
    lcd.print((char)223);            // on ajoute le symbole ° après la valeur de la température
    lcd.print("C");                  // on ajoute la lettre C pour degré Celsius
    lcd.setCursor(0,1);              // on déplace le curseur de l'écran LCD au début de la 2eligne
    lcd.print("Humidity: ");         // on écrit le mot "Hum. rel: " à l'emplacement du curseur
    lcd.print(DHT.humidity,1);       // on écrit l'humidité relative lue par le capteur, avec 1 chiffre derrière la virgule
    lcd.print("%");                  // on ajoute le symbole "%" après la valeur de l'humidité
    delay(1000);                     // on attend une seconde avant de procéder à la lecture suivante
}

précédentsommairesuivant

Ce cours est publié pour la communauté Arduino d'Edurobot.ch via son site https://arduino.education/. Il s'agit d'une ressource éducative libre, sous licence CC BY-NC-SA. L'utilisation gratuite de ce cours dans le cadre d'une formation payante est tolérée. Un avis à l'auteur est néanmoins bienvenu. Les écoles publiques, lycées, gymnases, universités, les associations et les FabLab peuvent demander gratuitement une version Word de ce document, afin de l'adapter plus aisément à leurs besoins ou celui d’élèves dys.