Lezione 42: Utilizzo del sensore di temperatura LM35 | Corso Arduino passo per passo
In questa lezione, impareremo a utilizzare il sensore di temperatura LM35 con un Arduino per misurare e visualizzare la temperatura in Celsius, Fahrenheit e Kelvin. Questo sensore emette una tensione proporzionale alla temperatura, permettendoci di leggere e elaborare facilmente i dati nel nostro programma Arduino. Entro la fine di questo tutorial, sarai in grado di implementare azioni basate sulla temperatura nei tuoi progetti.

Il sensore di temperatura LM35 ha tre pin: il pin sinistro è per l'alimentazione, il pin centrale fornisce una tensione corrispondente alla temperatura e il pin destro è per il terreno. Il sensore opera all'interno di un intervallo di tensione da 4 a 30 volt e fornisce un'uscita di 10 millivolt per grado Celsius. Questa precisione consente letture di temperatura accurate in varie applicazioni.
Hardware Spiegato
Il componente principale di questo progetto è il sensore di temperatura LM35. È progettato per fornire un'uscita di tensione analogica che è linearmente proporzionale alla temperatura in gradi Celsius. Il sensore è adatto per un ampio intervallo di temperature, da -55°C a +150°C, rendendolo versatile per differenti ambienti.
Il LM35 richiede una potenza minima (60 microampère) e opera su un ampio intervallo di tensione. La sua impedenza di uscita è bassa, consentendogli di interfacciarsi direttamente con i pin di ingresso analogici dell'Arduino senza circuiti aggiuntivi. Questa semplicità nel design rende il LM35 un'ottima scelta per compiti di misurazione della temperatura.
Dettagli del datasheet
| Produttore | Texas Instruments |
|---|---|
| Numero di parte | LM35 |
| Tensione logica/IO | 4-30 V |
| Corrente di uscita (per canale) | 1 mA max |
| Intervallo di temperatura | -55 a +150 °C |
| Tensione di uscita | 10 mV/°C |
| Accuratezza | ±0,5 °C a 25 °C |
| Pacchetto | TO-92 |
- Assicurati di fornire un'alimentazione adeguata tra 4V e 30V per letture accurate.
- La tension di uscita è direttamente proporzionale alla temperatura (10 mV/°C).
- Utilizzare condensatori di disaccoppiamento vicino al pin di alimentazione per la stabilizzazione.
- Mantenere la polarità corretta durante il collegamento per evitare danni.
- Assicurati di avere buone connessioni per evitare ingressi flottanti, che possono causare letture errate.
Istruzioni per il cablaggio

Per collegare il sensore di temperatura LM35, connetti il pin sinistro (VCC) all'uscita 5V dell'Arduino. Il pin centrale (Output) deve essere collegato al pin di ingresso analogico.A0, che utilizzeremo per leggere la temperatura. Infine, collega il pin corretto (Terra) a uno dei pin di terra sull'Arduino. Assicurati che tutte le connessioni siano sicure per prevenire eventuali problemi durante il funzionamento.
Quando cabli, ricorda che l'LM35 può essere alimentato con una tensione di alimentazione compresa tra 4V e 30V, ma utilizzare 5V è sufficiente per le applicazioni Arduino. Se noti letture di temperatura inattese, ricontrolla le connessioni e assicurati che il sensore sia alimentato correttamente.
Esempi di codice e guida passo passo
Nel codice Arduino, definiamo il pin di ingresso analogico per leggere la tensione di uscita dell'LM35 con l'identificatore.inPin, che è impostato perA0. Inoltre, definiamo una costanteLM35_FACTORimpostare a 0,01 per rappresentare l'output del sensore per grado Celsius.
const int inPin = A0; // can change
const float LM35_FACTOR = 0.01; // do not change
Questa configurazione ci consente di leggere la temperatura in modo semplice. Successivamente, inizializziamo la comunicazione seriale nelsetup()funzione per iniziare a trasmettere i dati di temperatura al monitor seriale.
void setup() {
Serial.begin(9600);
Serial.println("Robojax LM35 for Arduino");
}
Dentro illoop()funzione, leggiamo continuamente la temperatura e la stampiamo in diverse unità. LaprintTemperature()La funzione accetta un parametro di tipo carattere per specificare il formato della temperatura desiderato, permettendoci di visualizzare la temperatura in Celsius, Fahrenheit o Kelvin.
void loop() {
printTemperature('C');
printTemperature('F');
printTemperature('K');
delay(1000); // Wait for 1000ms
}
Per intraprendere azioni in base alla temperatura, possiamo verificare se la temperatura supera una certa soglia utilizzando ilgetTemperature()funzione. Questa funzione calcola la temperatura media su un numero specificato di campioni.
Per ulteriori dettagli, guarda il video associato per una completa spiegazione del codice (nel video alle 10:15).
Dimostrazione / Cosa Aspettarsi
Quando il sensore LM35 è correttamente collegato e il codice Arduino è caricato, dovresti vedere la temperatura visualizzata in Celsius, Fahrenheit e Kelvin sul monitor seriale. Se applichi calore al sensore, osserverai che le letture della temperatura aumentano di conseguenza.
Tieni presente che un cablaggio errato può portare a letture di temperatura erratiche, come valori estremamente alti o bassi. Assicurati sempre che il sensore sia collegato correttamente per evitare tali problemi (nel video alle 12:30).
Timestamp video
- 00:00- Introduzione al LM35
- 02:30- Istruzioni di cablaggio
- 05:00- Spiegazione del codice
- 10:15- Dimostrazione delle Letture di Temperatura
- 12:30- Problemi comuni e risoluzione dei problemi
++
/*
* Robojax Arduino Step-by-Step Course
* Part 4: Temperature Sensors
* Lesson 42: Introduction to LM35
* This Arduino sketch is to use LM35 to measure temperature
* This code has two ways to get temperature
* 1-To print the temperature either in C, F or K on the serial monitor
* 2-To return the value in C, F and K
*
Please watch video instruction here https://youtu.be/DRIC4wDu878
This code is available at http://robojax.com/course1/?vid=lecture37
with over 100 lectures free on YouTube. Watch it here http://robojax.com/L/?id=338
Get the code for the course: http://robojax.com/L/?id=339
* Written by Ahmad Shamshiri on May 08, 2020 at 02:45 in Ajax, Ontario, Canada
* in Ajax, Ontario, Canada. www.robojax.com
*
* * 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 iteration = 1000; //can change (see video)
const float LM35_FACTOR =0.01;// do not change
// the setup routine runs once when you press reset:
void setup() {
// initialize serial communication at 9600 bits per second:
// Robojax.com Code YouTube Watch it here http://robojax.com/L/?id=338
Serial.begin(9600);
Serial.println("Robojax LM35 for Arduino");
delay(500);
}
// the loop routine runs over and over again forever:
void loop() {
//robojax.com LM35 Code for Arduino
printTemperature('C');
Serial.println();
printTemperature('F');
Serial.println();
printTemperature('K');
Serial.println();
Serial.println();
// Serial.print(" Temperature: ");
// printDegree();
// Serial.print(getTemperature('C'));
if(getTemperature('C') >87)
{
// do something here (watch video)
}
// Serial.println();
delay(1000);//Wait for 1000ms (change it if you want)
}
/*
* 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)
{
// Robojax.com Code YouTube Watch it here http://robojax.com/L/?id=338
float value,voltage,temperature;//define variables
int sensorValue;
float averageTemperature =0;
for(int i=0; i< iteration; i++)
{
sensorValue = analogRead(inPin);//read analog value
voltage = sensorValue * (5.0 / 1023.0); //convert it to voltage
temperature = voltage / LM35_FACTOR; //convert voltage to temperature
averageTemperature += temperature;//add
}
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)
{
// Robojax.com Code YouTube Watch it here http://robojax.com/L/?id=338
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");
}
Cose di cui potresti avere bisogno
-
AmazonPurchase LM35 from Amazonamzn.to
-
eBayPurchase LM35 from eBayebay.us
Risorse e riferimenti
-
Scheda tecnicaLM35 Datasheetti.com
File📁
Nessun file disponibile.