Code de recherche

Affichage de la température BMP180 sous forme de graphique à barres sur LCD

Affichage de la température BMP180 sous forme de graphique à barres sur LCD

Afficher la température sous forme de graphique à barres sur un écran LCD est un moyen pratique de rendre les données lisibles d'un coup d'œil, surtout de loin. Au lieu de plisser les yeux devant une valeur numérique, un graphique à barres vous donne une représentation visuelle immédiate de la température actuelle par rapport à un maximum défini. Ce projet combine un capteur de pression barométrique et de température BMP180 avec un écran LCD I2C 16x2 pour créer un affichage de température clair et proportionnel. Le graphique à barres se remplit à mesure que la température augmente, et lorsque la lecture dépasse le maximum que vous avez défini, l'affichage passe à "Max" pour éviter tout débordement.

Cette configuration est idéale pour une variété d'applications où un retour visuel rapide est plus important que des chiffres précis :

  • Construire un thermomètre visuel pour une maison ou un bureau.
  • Créer un moniteur de température pour un enclos de reptile ou un terrarium de plantes.
  • Affichage de la température d'une imprimante 3D ou de la carte de contrôle d'une machine CNC.
  • Créer une station météo simple avec un affichage de la température à première vue.
  • Ajout d'un thermomètre visuel à une configuration PC personnalisée ou à un amplificateur audio.

Ce guide vous expliquera comment câbler le capteur et l'affichage, configurer le code fourni et comprendre comment le personnaliser pour vos propres projets. Ce tutoriel suppose que vous êtes familiarisé avec les notions de base du capteur BMP180 et du module LCD I2C, car il se concentre sur leur combinaison avec une bibliothèque de graphiques à barres.

Matériel requis

  • Arduino Uno (ou carte similaire)
  • Capteur de pression barométrique/température BMP180
  • Écran LCD 16x2 avec module I2C
  • Fils de connexion
  • Plaque d'essai (optionnelle)

Guide de câblage

Ce projet utilise le protocole I2C pour l'écran LCD et le capteur BMP180, ce qui simplifie considérablement le câblage. Les deux dispositifs se connectent aux mêmes deux lignes de données et rails d'alimentation. Le câblage est simple, et les connexions codées par couleur ci-dessous correspondent à la démonstration dans la vidéo.

Tout d'abord, connectez le module LCD. Le module I2C sur le LCD a quatre broches : VCC, GND, SDA et SCL.

  • LCD VCCfil blanc) à Arduino5V
  • GND LCDà ArduinoGND
  • LCD SDAfil (fil gris) à ArduinoA4(pin SDA)
  • LCD SCLfil rose) à ArduinoA5(pin SCL)

Ensuite, connectez le capteur BMP180. Il est crucial de noter que ce capteur n'est pas tolérant à 5V sur sa pin VIN et doit être alimenté par le rail de 3,3V.

  • BMP180 VINfil gris à Arduino3.3V(AVERTISSEMENT : Ne pas connecter à 5V ou le capteur sera endommagé !)
  • BMP180 GNDfil de (violet) à ArduinoGND
  • BMP180 SDAfil vert) à ArduinoA4(pin SDA)
  • BMP180 SCLfil bleu) à ArduinoA5(SCL pin)

Comme les deux dispositifs sont sur le même bus I2C, vous pouvez connecter leurs broches SDA et SCL aux mêmes broches Arduino (A4 et A5, respectivement).

LCD Bargraph BMP180 LCD1602 wiring

Explication du code

Le code est conçu pour être facilement configurable. Les paramètres clés sont tous situés en haut du croquis, vous permettant d'ajuster le comportement sans creuser dans la logique de base. Voici les principaux paramètres que vous pouvez modifier :

#define UNIT 'C' // unit type C for Celsius F for Fahrenheit
#define maxTemperature 40 // is the value in Celsius or Fahrenheit set in line above

Ces deux lignes contrôlent l'unité et l'échelle de votre affichage. LeUNITconstant accepte soit une majuscule'C'pour Celsius ou une majuscule'F'pour Fahrenheit. LemaxTemperaturela valeur définit la limite supérieure de votre graphique à barres. Par exemple, si vous réglez cela sur50et l'unité est Celsius, alors 25°C apparaîtra comme une barre à moitié remplie, et 50°C la remplira complètement. Si la température dépasse cette valeur, l'affichage affichera "Max" au lieu d'un graphique. (dans la vidéo à 05:49)

LiquidCrystal_I2C lcd(0x3f,lcdNumCols,lcdLine); //0x3f is address for I2C

Cette ligne initialise l'écran LCD. Le0x3fest l'adresse I2C de votre module LCD spécifique. Cette adresse peut varier selon les fabricants. Pour trouver la vôtre, vous pouvez exécuter un croquis de scanner I2C, qui est souvent inclus avec la bibliothèque LCD ou disponible en ligne. Il vous suffit de télécharger le scanner, d'ouvrir le Moniteur Série, et il indiquera l'adresse de tout appareil I2C connecté. (dans la vidéo à 07:13)

LcdBarGraphRobojax robojax(&lcd, 16, 0, 0);  // -- creating 16 character long bargraph starting at char 0 of line 0 (see video)

Cette ligne configure le graphique à barres lui-même. Le premier paramètre (&lcd) passe une référence à votre objet LCD. Le deuxième paramètre (16) est la longueur du graphique en barres en caractères. Les troisième et quatrième paramètres (0, 0) définir la position de départ : la première0est la colonne (position du caractère), et la deuxième0est la ligne. Pour placer le graphique sur la deuxième ligne, vous devriez changer la dernière valeur en1. (dans la vidéo à 09:24)

Il existe également une fonction personnalisée appeléegetTemp()dans le code. Cette fonction gère la communication avec le capteur BMP180. Elle lit la température, la convertit en Fahrenheit si vous avez définiUNITà'F', et renvoie la valeur. Si le capteur ne parvient pas à communiquer, la fonction renvoie999comme un code d'erreur, que la boucle principale vérifie et affiche un message "Erreur" sur l'écran LCD. (dans la vidéo à 15:31)

Démonstration de projet en direct

Dans la vidéo, le projet est démontré en utilisant un pistolet à chaleur. Lorsque le pistolet à chaleur est dirigé vers le capteur BMP180, la lecture de la température sur l'écran LCD augmente. À mesure que la température grimpe, le graphique à barres se remplit visuellement de manière proportionnelle. Lorsque la température dépasse le maximum défini (50°C dans la démonstration), le graphique à barres disparaît et l'affichage montre "Max" ainsi que la lecture de la température réelle. Une fois que la source de chaleur est retirée et que la température redescend en dessous du maximum, le graphique à barres réapparaît et fonctionne normalement à nouveau. Cela montre clairement comment le graphique évolue avec la température et comment fonctionne la protection contre le débordement "Max". (dans la vidéo à 17:34)

Vous pouvez également changer l'unité en Fahrenheit en réglant#define UNIT 'F'et en ajustant lemaxTemperatureen conséquence. La démonstration montre qu'avec un maximum de 100°F, l'affichage fonctionne tout aussi efficacement, montrant la température et le graphique à barres dans l'unité sélectionnée.

Chapitres

  • Introduction à l'affichage de la température BMP180 sous forme de graphique à barres
  • Pourquoi utiliser un graphique à barres pour l'affichage de la température ?
  • [02:34] Câblage de l'écran LCD et du capteur BMP180
  • [03:34] Explication du code et des bibliothèques requises
  • [07:13] Trouver l'adresse I2C de votre LCD
  • [09:24] Configuration de la position et de la longueur du graphique à barres
  • [15:31] Comprendre la fonction getTemp()
  • [17:34] Démonstration en direct avec un pistolet à chaleur

Images

LCD1602-I2C display module with 4 wires
LCD1602-I2C display module with 4 wires
LCD Bargraph BMP180 LCD1602 wiring
LCD Bargraph BMP180 LCD1602 wiring
BMP180 module 1
BMP180 module 1
BMP180 module 2 back
BMP180 module 2 back
BMP180 module 3 with pin
BMP180 module 3 with pin
195-Display BMP180 temperature as a bar graph on an LCD using Arduino
Langue: C++
/* Display temperature from BMP180 as bargraph on LCD 
 *  Original Sources: 
 *  BMP180 library from https://www.sparkfun.com/products/11824
 *  LCD library: https://github.com/fdebrabander/Arduino-LiquidCrystal-I2C-library
 *  Bargraph library from https://playground.arduino.cc/Code/LcdBarGraph/
 *  
 *  
 *  Written and updated by Ahmad Shamshiri on June 05, 2019
 *  for Robojax in Ajax, Ontario
  Watch video tutorial for this code: https://youtu.be/0IojNYgDD7U
  If you need the schematic diagram of this circuit, please visit  http://bit.ly/rj-udemy

* Robojax Arduino Course on Udemy where you get the schematic diagram of this sketch 
 * and many other robotics-related lectures and codes. Purchase the course here: http://bit.ly/rj-udemy


- (GND) to GND
+ (VDD) to 3.3V

(WARNING: Do not connect + to 5V or the sensor will be damaged!)

*/

#include <SFE_BMP180.h>
#include <Wire.h>


SFE_BMP180 rjt;// creating object called "rjt" (robojax temperature)
#define UNIT 'C' // unit type C for Celsius F for Fahrenheit
#define maxTemperature 40 // is the value in Celsius or Fahrenheit set in line above

// LCD settings
#include <LiquidCrystal_I2C.h>
byte lcdNumCols = 16; // -- number of columns in the LCD
byte lcdLine = 2; // -- number of lines in the LCD

LiquidCrystal_I2C lcd(0x3f,lcdNumCols,lcdLine); //0x3f is address for I2C
                  // to get I2C address, run I2C Scanner. 
                  //Link is provided (in same page as this code) at http://robojax.com/learn/arduino
// bargraph settings
#include <LcdBarGraphRobojax.h>
LcdBarGraphRobojax robojax(&lcd, 16, 0, 0);  // -- creating 16 character long bargraph starting at char 0 of line 0 (see video)



void setup()
{
  Serial.begin(9600);//initialize serial monitor
 // -- initializing the LCD
  lcd.begin();
  lcd.clear();
  lcd.print("Robojax"); 
   
 
  // Initialize the sensor (it is important to get calibration values stored on the device).

  if (rjt.begin())
  {
   lcd.setCursor (0,1); //  
    lcd.print("BMP180 Bargraph");  
  }else {
    lcd.setCursor (0,1); //  
    lcd.print("BMP180 Failed"); 
    while(1); // Pause forever.
  }
  // -- give use some time to read the text above
  delay(2000);
  lcd.clear();  
}// setup

void loop()
{
 // Robojax BMP180 Bargraph main loop

 robojax.clearLine(1);// clear line 1 to display fresh temperature
 float T = getTemp();// get the temperature
 float Tgraph=T;
 if(T !=999){
     if( Tgraph > maxTemperature){   
        Tgraph =0;
     }
        robojax.drawValue( Tgraph, maxTemperature);// draw the bargraph     
      // Print out the measurement:
      Serial.print("temperature: ");
      Serial.print(T,2);


      lcd.setCursor (0,1); //
      if(T< maxTemperature){       
       lcd.print("Temp.:"); 
      }else{
       lcd.print("Max.:"); 
      }
      lcd.setCursor (7,1); //
      lcd.print(T); // print  
      lcd.print((char)223);// prints degree symbol
      if(UNIT =='C'){
        lcd.print("C");//
        Serial.println(" deg C");         
      }else{
        lcd.print("F");
        Serial.println(" deg F");         
      }
      
   



  }else{
    Serial.print("Status error");
      lcd.setCursor (0,1); //
      lcd.print("Error ");     
  }

delay(500);
}


/*
 * 
 * @brief gets the temperature in Celsius or Fahrenheit
 * @param unit, should be capital C or capital F, C=Celsius F=Fahrenheit
 * @return temperature in Celsius or Fahrenheit
 * Written by Ahmad Shamshiri for Robojax.com 
 * on Wednesday, June 5th, 2019 at 22:30 in Ajax, Ontario, Canada
 * 
 */
 ////////////////////////////////////////////
double getTemp(){
    char status;
  double Temp,newTemp;
 
status = rjt.startTemperature();
  if (status != 0)
  {
    // Wait for the measurement to complete:
    delay(status);

    // Retrieve the completed temperature measurement:
    // Note that the measurement is stored in the variable T.
    // Function returns 1 if successful, 0 if failure.

    status = rjt.getTemperature(Temp);
    if (status != 0)
    {  
      if (UNIT =='F')
      {
        newTemp = (9.0/5.0)*Temp+32.0;// convert to degrees Fahrenheit
      }else{
        newTemp = Temp;// keeps degree Celsius
      }
    }
    return newTemp;    
  }else{
    return 999;// if error, then return 999
  }
}//getTemp/////////////////////////////

Ce dont vous pourriez avoir besoin

Ressources et références

Fichiers📁

Bibliothèques Arduino (zip)