Température et humidité avec Arduino
Mesurez la température et l’humidité puis affichez les sur un écran OLED avec votre carte Arduino.
Nous allons décomposer ce projet Arduino de mesure de la température et de l’humidité en 2 étapes, une première pour l’affichage utilisant l’écran OLED et une deuxième pour l’acquisition des données.
Le matériel nécessaire
Pour cette réalisation, vous avez besoin:
Câblage de l’écran OLED avec votre carte Arduino
L’écran OLED 0.96 de ce montage utilise le protocole I2C qui ne nécessite que 2 fils pour échanger des données:
- la broche SDA de l’écran OLED reliée à la sortie A4 de l’Arduino
- la broche SCL reliée à la sortie A5.
Pour l’alimentation, de l’écran vous reliez:
- la broche VCC de l’écran au 3,3V de la carte Arduino
- les deux masses ensemble (GND).
Installation d’une bibliothèque pour l’écran OLED
Afin de nous faciliter la gestion de l’écran OLED, nous allons installer la bibliothèque Arduino lcdgfx. Pour cela, dans le menu “Outils”, choisir “Gérer les bibliothèques”.
La fenêtre des bibliothèques s’ouvre alors. En saisissant “lcdgfx” dans la zone de recherche, vous ne verrez plus que la bibliothèque “lcdgfx by Alexey Dynda” d’affichée.
Vous pouvez alors réaliser sa mise en place en cliquant sur le bouton “Installer” correspondant.
Le message “INSTALLED” confirme que l’opération d’installation s’est bien déroulée.
Vous pouvez fermer la fenêtre, nous allons passer à la programmation proprement dite.
Code logiciel pour le pilotage de l’écran OLED
Nous allons partir de l’ossature du code Arduino suivante:
// Fonction de démarrage, s'exécute une seule fois: void setup() { } // Fonction principale du programme, s'exécute en boucle: void loop() { }
Nous commençons par indiquer au compilateur Arduino que nous utilisons la bibliothèque lcdgfx.
La première ligne démarrant par “//” est une ligne de commentaires non exécutée par le processeur. La deuxième ligne déclare le nom du fichier installé servant de porte d’entrée à la bibliothèque.
// Déclaration des librairies utilisées #include "lcdgfx.h"
Cette librairie utilise la programmation objet, aussi nous déclarons un objet globale de type “DisplaySSD1306_128x64_I2C” permettant de gérer l’afficheur en utilisant le protocole I2C. Vous allez nommer cette classe “Afficheur_G” à l’aide des instructions suivantes:
// Déclaration globales DisplaySSD1306_128x64_I2C Afficheur_G(-1);
Ensuite, vous allez ajouter les instructions de réglage de l’écran dans la fonction “setup” pour sélectionner une fonte de caractère de 6 points de large par 8 points de hauts:
/* Sélection de la fonte de 6x8 */ Afficheur_G.setFixedFont( ssd1306xled_font6x8 );
Ajoutez les 3 lignes suivantes pour initialiser initialise l’écran et l’effacer:
// Initialisation et effacement de l'écran Afficheur_G.begin(); Afficheur_G.clear();
Nous allons pouvoir maintenant passer à l’affichage proprement dit des valeurs mesurées. Comme ces valeurs évoluent au cours du temps, elles s’écrivent dans la fonction “loop“.
L’écran OLED 0.96 est composé de 64 lignes de 128 points. L’origine des coordonnées des points est située sur le sommet gauche.
La fonction de la librairie permettant d’écrire une chaine de caractères est la fonction printFixed. Cette fonction prends 4 paramètres: les coordonnées X et Y de l’écran, la chaîne de caractères à afficher ainsi que le style de caractères à utiliser. Écrivez les 2 lignes suivantes pour avoir un affichage de la température et de l’humidité au centre de l’écran:
Afficheur_G.printFixed (5, 16, "Temperature: xxC", STYLE_NORMAL); Afficheur_G.printFixed (5, 42, "Humidite: xx%", STYLE_NORMAL);
Afin de laisser le temps de lire la valeur affichée, nous allons utiliser la fonction “delay” qui demande au microcontrôleur d’attendre une durée exprimée en millisecondes. Puis nous effacerons l’écran par la fonction “clear” afin de nettoyer l’écran avant le nouvel affichage. Voici les 4 lignes à ajouter:
// Attente de 2 secondes delay(2000); // Effacement de l'écran Afficheur_G.clear();
Voici à quoi devrait ressembler votre programme maintenant:
// Déclaration des librairies utilisées #include "lcdgfx.h" // Déclaration globales DisplaySSD1306_128x64_I2C Afficheur_G(-1); // Fonction de démarrage, s'exécute une seule fois: void setup() { /* Sélection de la fonte de 6x8 */ Afficheur_G.setFixedFont( ssd1306xled_font6x8 ); // Initialisation et effacement de l'écran Afficheur_G.begin(); Afficheur_G.clear(); } // Fonction principale du programme, s'exécute en boucle: void loop() { Afficheur_G.printFixed (5, 16, "Temperature: xxC", STYLE_NORMAL); Afficheur_G.printFixed (5, 42, "Humidite: xx%", STYLE_NORMAL); delay(2000); Afficheur_G.clear(); }
Afin de le vérifier, vous pouvez maintenant compiler cette première partie du programme puis le transférer dans l’Arduino avant de poursuivre notre projet. Vous devez obtenir le résultat suivant.
Maintenant, que nous avons préparé l’affichage de nos données, nous allons pouvoir passer à leur acquisition (page 2).
merci beaucoup pour le partage , ca fonctionne parfaitement 🙂