Visualizzazione della temperatura da un LM35 su un LCD1602 in Celsius, Fahrenheit e Kelvin
In questo tutorial, impareremo a utilizzare un sensore di temperatura LM35 per misurare la temperatura e visualizzare i risultati su un modulo LCD1602 in tre diverse unità: Celsius, Fahrenheit e Kelvin. Questo progetto è un ottimo modo per combinare le letture dei sensori con un output visivo, migliorando la tua comprensione di come funzionano insieme i sensori e i display nei progetti Arduino. Vedrai come collegare correttamente i componenti e come implementare il codice necessario per questo compito.
Per iniziare, utilizzeremo il sensore di temperatura LM35, che è un dispositivo a tre pin. Esso fornisce una tensione analogica corrispondente alla temperatura in gradi Celsius. Il LCD1602 sarà utilizzato per visualizzare le letture di temperatura. Alla fine del tutorial, avrai un sistema di visualizzazione della temperatura completamente funzionante. Per ulteriori chiarimenti, dai un'occhiata al video (nel video a 00:55).
Hardware spiegato
I componenti principali di questo progetto includono il sensore di temperatura LM35 e il display LCD1602. L'LM35 funziona fornendo un'uscita di tensione che è linearmente proporzionale alla temperatura in Celsius, specificamente 10 mV/°C. Questo rende semplice convertire la lettura della tensione in una lettura della temperatura utilizzando semplici calcoli nel codice.
L'LCD1602 è un display a caratteri 16x2 che può visualizzare due righe di testo. È controllato tramite un'interfaccia I2C, che semplifica il cablaggio utilizzando solo quattro connessioni: VCC, GND, SDA (linea dati) e SCL (linea di clock). Questa configurazione riduce al minimo il numero di pin richiesti sull'Arduino, consentendo connessioni e gestione più semplici.
Dettagli della scheda tecnica
| Produttore | Texas Instruments |
|---|---|
| Numero di parte | LM35 |
| Tensione di logica/IO | 3-30 V |
| Tensione di uscita | 10 mV/°C |
| Intervallo di temperatura | -55 a +150 °C |
| Accuratezza | ±0,5 °C (tip.) |
| Pacchetto | TO-46, TO-220 |
- Assicurati di avere un'alimentazione adeguata, minimo 4V per LM35.
- Utilizzare una resistenza di pull-up se necessario per le linee SDA/SCL.
- Mantieni i cablaggi corti per ridurre al minimo il rumore.
- Decouple l'alimentazione con condensatori per stabilità.
- Testa ogni connessione prima di accendere il sistema.
Istruzioni di cablaggio

Per collegare il sensore di temperatura LM35, collegare il pin sinistro a una fonte di alimentazione di 5V dall'Arduino, che è definita nel codice comeVCC2Il pin centrale, che è il pin di uscita, dovrebbe essere collegato al pin di ingresso analogico.A0sull'Arduino. Infine, collega il pin destro del LM35 a terra.
Per il modulo LCD1602, collegare il pin di terra al terra dell'Arduino. Il pin VCC dovrebbe essere collegato all'uscita di 5V dell'Arduino. La linea dati (SDA) dovrebbe essere collegata al pin analogico.A4, mentre la linea di clock (SCL) dovrebbe collegarsi aA5Questo setup consente all'Arduino di comunicare con il LCD utilizzando il protocollo I2C.
Esempi di codice e guida passo-passo
Nel codice, definiamo il pin di ingresso per il sensore LM35 e impostiamo l'LCD con il suo indirizzo I2C. La funzione di impostazione inizializza la comunicazione seriale e il display LCD. Il seguente estratto mostra come inizializzare i pin:
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
Qui,inPinè impostato aA0, dove viene letto il segnale di uscita del LM35. IlVCC2il pin è definito per alimentare l'LM35, eiterationviene utilizzato per fare la media delle letture di temperatura.
Successivamente, abbiamo il ciclo principale che gestisce le letture della temperatura e le visualizza sul LCD. Ogni tipo di temperatura viene visualizzato in sequenza con un ritardo:
lcdDisplay(getTemperature('C'),'C');
delay(2000);
lcdDisplay(getTemperature('F'),'F');
delay(2000);
lcdDisplay(getTemperature('K'),'K');
delay(2000);
Questo blocco di codice chiama illcdDisplayfunzione per mostrare la temperatura in Celsius, Fahrenheit e Kelvin, facendo una pausa di 2 secondi tra ogni visualizzazione.
Il codice completo sarà caricato sotto questo articolo, dove puoi vedere tutte le funzioni e la logica implementate per leggere la temperatura e visualizzarla di conseguenza.
Dimostrazione / Cosa Aspettarsi
Quando esegui il progetto completato, il LCD dovrebbe visualizzare le letture della temperatura in gradi Celsius, Fahrenheit e Kelvin, alternando ciascuna visualizzazione. Puoi testare la risposta del sensore applicando calore, ad esempio da una pistola termica, e osservando le variazioni di temperatura visualizzate (nel video alle 09:15). Se il sensore è collegato a una fonte di alimentazione al di sotto della tensione raccomandata, le letture potrebbero essere imprecise, quindi assicurati che funzioni a un minimo di 4V.
Video Timestamps
- 00:00- Introduzione
- 00:55- Panoramica dell'hardware
- 03:30- Istruzioni per il cablaggio
- 06:15- Panoramica del Codice
- 09:15- Dimostrazione
/*
* 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
}
Cose di cui potresti avere bisogno
-
AmazonPurchase LM35 from Amazonamzn.to
-
eBayPurchase LM35 from eBayebay.us
Risorse e riferimenti
-
Scheda tecnicaLM35 Datasheetti.com
-
EsternoDatasheet LM35 (PDF)ti.com
-
Interno
File📁
Nessun file disponibile.