Affichage de la température d'un LM35 sur un LCD1602 en Celsius, Fahrenheit et Kelvin
Dans ce tutoriel, nous allons apprendre à utiliser un capteur de température LM35 pour mesurer la température et afficher les résultats sur un module LCD1602 dans trois unités différentes : Celsius, Fahrenheit et Kelvin. Ce projet est un excellent moyen de combiner les lectures de capteurs avec une sortie visuelle, renforçant ainsi votre compréhension de la manière dont les capteurs et les écrans fonctionnent ensemble dans des projets Arduino. Vous verrez comment câbler correctement les composants et comment implémenter le code nécessaire pour cette tâche.
Pour commencer, nous allons utiliser le capteur de température LM35, qui est un dispositif à trois broches. Il fournit une tension analogique qui correspond à la température en degrés Celsius. Le LCD1602 sera utilisé pour afficher les lectures de température. À la fin du tutoriel, vous disposerez d'un système d'affichage de température entièrement fonctionnel. Pour plus de précisions, regardez la vidéo à (dans la vidéo à 00:55).
Matériel expliqué
Les principaux composants de ce projet incluent le capteur de température LM35 et l'afficheur LCD1602. Le LM35 fonctionne en fournissant une sortie de tension qui est proportionnelle de manière linéaire à la température en Celsius, spécifiquement 10 mV/°C. Cela facilite la conversion de la lecture de la tension en une lecture de température en utilisant de simples calculs dans le code.
Le LCD1602 est un affichage de caractères 16x2 qui peut afficher deux lignes de texte. Il est contrôlé via une interface I2C, ce qui simplifie le câblage en utilisant seulement quatre connexions : VCC, GND, SDA (ligne de données) et SCL (ligne d'horloge). Cette configuration minimise le nombre de broches nécessaires sur l'Arduino, permettant des connexions et une gestion plus faciles.
Détails de la fiche technique
| Fabricant | Texas Instruments |
|---|---|
| Numéro de pièce | LM35 |
| Tension logique/IO | 3-30 V |
| Tension de sortie | 10 mV/°C |
| Plage de température | -55 à +150 °C |
| Précision | ±0,5 °C (typ.) |
| Colis | TO-46, TO-220 |
- Assurez une alimentation électrique appropriée, minimum 4V pour le LM35.
- Utilisez une résistance de tirage si nécessaire pour les lignes SDA/SCL.
- Gardez le câblage court pour minimiser le bruit.
- Découpler l'alimentation avec des condensateurs pour la stabilité.
- Testez chaque connexion avant d'alimenter le système.
Instructions de câblage

Pour câbler le capteur de température LM35, connectez la broche de gauche à une source d'alimentation de 5V provenant de l'Arduino, qui est définie dans le code commeVCC2Le pin du milieu, qui est le pin de sortie, devrait être connecté au pin d'entrée analogique.A0sur l'Arduino. Enfin, connectez la broche droite du LM35 à la terre.
Pour le module LCD1602, connectez la broche de masse à la masse de l'Arduino. La broche VCC doit être connectée à la sortie 5V de l'Arduino. La ligne de données (SDA) doit être connectée à la broche analogique.A4, tandis que la ligne d'horloge (SCL) devrait se connecter àA5Cette configuration permet à l'Arduino de communiquer avec l'écran LC en utilisant le protocole I2C.
Exemples de code et guide étape par étape
Dans le code, nous définissons la broche d'entrée pour le capteur LM35 et configurons l'écran LCD avec son adresse I2C. La fonction de configuration initialise la communication série et l'affichage LCD. L'extrait suivant montre comment initialiser les broches :
const int inPin = A0; // Pin for LM35 output
const int VCC2 = 2; // Pin for LM35 VCC
const int iteration = 1000; // Number of readings for averaging
Ici,inPinest réglé surA0, où la sortie du LM35 est lue. LeVCC2le pin est défini pour alimenter le LM35, etiterationest utilisé pour faire la moyenne des relevés de température.
Ensuite, nous avons la boucle principale qui gère les relevés de température et les affiche sur l'écran LCD. Chaque type de température est affiché successivement avec un délai :
lcdDisplay(getTemperature('C'),'C');
delay(2000);
lcdDisplay(getTemperature('F'),'F');
delay(2000);
lcdDisplay(getTemperature('K'),'K');
delay(2000);
Ce bloc de code appelle lelcdDisplayfonction pour afficher la température en Celsius, Fahrenheit et Kelvin, en faisant une pause de 2 secondes entre chaque affichage.
Le code complet se chargera sous cet article, où vous pourrez voir toutes les fonctions et la logique mises en œuvre pour lire la température et l'afficher en conséquence.
Démonstration / À quoi s'attendre
Lorsque vous exécutez le projet terminé, l'écran LCD doit afficher les relevés de température en degrés Celsius, Fahrenheit et Kelvin, en faisant défiler chaque affichage. Vous pouvez tester la réponse du capteur en appliquant de la chaleur, par exemple avec un pistolet à chaleur, et en observant les changements de température affichés (dans la vidéo à 09:15). Si le capteur est connecté à une source d'alimentation inférieure à la tension recommandée, les relevés peuvent être inexactes, assurez-vous donc qu'il fonctionne à un minimum de 4V.
Horodateurs vidéo
- 00:00- Introduction
- 00:55- Aperçu du matériel
- 03:30- Instructions de câblage
- 06:15- Vue d'ensemble du code
- 09:15- Démonstration
/*
* This Arduino sketch is to use LM35 to measure temperature.
* Prints the temperature as C, F, or K on the LCD1602 or LCD2004 with I2C module (4 wires).
*
* Watch video instructions for this code: https://youtu.be/XpMtQVCMIRA
*
* Written by Ahmad Shamshiri on May 12, 2020 at 19:53 in Ajax, Ontario, Canada
* in Ajax, Ontario, Canada. www.robojax.com
*
or make a donation using PayPal: http://robojax.com/L/?id=64
* * This code is "AS IS" without warranty or liability. Free to be used as long as you keep this note intact.*
* This code has been downloaded from Robojax.com
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see <https://www.gnu.org/licenses/>.
*/
const int inPin =A0;//can change
const int VCC2 =2;
const int iteration = 1000; //can change (see video)
const float LM35_FACTOR =0.01;// do not change
// start of settings for LCD1602 with I2C
#include <LiquidCrystal_I2C.h>
// Set the LCD address to 0x27 for a 16 chars and 2 line display
LiquidCrystal_I2C lcd(0x26, 16, 2);
// end of settings for LCD1602 with I2C
// the setup routine runs once when you press reset:
void setup() {
// initialize serial communication at 9600 bits per second:
Serial.begin(9600);
Serial.println("Robojax LM35 with LCD for Arduino");
pinMode(VCC2,OUTPUT);
digitalWrite(VCC2, HIGH);
lcd.begin();
lcd.backlight();
lcd.print("Robojax LM35");
lcd.setCursor(0,1);
lcd.print("Temp: ");
}
// the loop routine runs over and over again forever:
void loop() {
//robojax.com LM35 with LCD Code for Arduino
lcdDisplay(getTemperature('C'),'C');
delay(2000);
lcdDisplay(getTemperature('F'),'F');
delay(2000);
lcdDisplay(getTemperature('K'),'K');
delay(2000);
if(getTemperature('C') >87)
{
// do something here (watch video)
}
// printTemperature('C');
// Serial.println();
// printTemperature('F');
// Serial.println();
// printTemperature('K');
// Serial.println();
// Serial.println();
// Serial.print(" Temperature: ");
// printDegree();
// Serial.print(getTemperature('C'));
// Serial.println();
delay(100);
}
/*
* getTemperature()
* @brief gets the average temperature
* @param average temperature
* @param "type" is character
* C = Celsius
* K = Kelvin
* F = Fahrenheit
* @return returns one of the values above
* Written by Ahmad Shamshiri for robojax.com
* on May 08, 2020 at 02:36 in Ajax, Ontario, Canada
*/
float getTemperature(char type)
{
float value;
float averageTemperature =0;
int sensorValue = analogRead(inPin);
float voltage = sensorValue * (5.0 / 1023.0);
float temperature = voltage / LM35_FACTOR;
for(int i=0; i< iteration; i++)
{
averageTemperature += temperature;
}
averageTemperature /=iteration;
if(type =='F')
{
value = averageTemperature *9/5 + 32;//convert to Fahrenheit
}else if(type =='K')
{
value = averageTemperature + 273.15;//convert to Kelvin
}else{
value = averageTemperature;// return Celsius
}
return value ;
}//getTemperature()
/*
* printTemperature()
* @brief prints temperature on serial monitor
* @param charact type
* @param "type" is character
* C = Celsius
* K = Kelvin
* F = Fahrenheit
* @return none
* Written by Ahmad Shamshiri for robojax.com
* on May 08, 2020 at 02:45 in Ajax, Ontario, Canada
*/
void printTemperature(char type)
{
float value;
float temp = getTemperature(type);
Serial.print(temp);
printDegree();
if(type =='F')
{
Serial.print("F");
}else if(type =='K')
{
Serial.print("K");
}else{
Serial.print("C");
}
}//printTemperature()
/*
* @brief prints degree symbol on serial monitor
* @param none
* @return returns nothing
* Written by Ahmad Shamshiri on July 13, 2019
* for Robojax Tutorial Robojax.com
*/
void printDegree()
{
Serial.print("\\xC2");
Serial.print("\\xB0");
}
/*
* lcdDisplay(float value,char symbol)
* displays value and title on LCD1602
* How to use:
* lcdDisplay(35.3,'C');
*/
void lcdDisplay(float value,char symbol)
{
// Robojax.com LCD1602 for LM35 Demo
for(int i=7; i<16;i++)
{
lcd.setCursor(i,1);
lcd.write(254);
}
lcd.setCursor (7,1); //
lcd.print(value);
lcd.print((char)223);
if(symbol =='F')
{
lcd.print("F");
}else if(symbol =='K')
{
lcd.print("K");
}else{
lcd.print("C");
}
// Robojax.com LCD1602 for LM35 Demo
}
Ce dont vous pourriez avoir besoin
-
AmazonPurchase LM35 from Amazonamzn.to
-
eBayPurchase LM35 from eBayebay.us
Ressources et références
-
Fiche techniqueLM35 Datasheetti.com
-
ExterneFiche technique LM35 (PDF)ti.com
-
Interne
Fichiers📁
Aucun fichier disponible.