Código de búsqueda

Lección 42: Uso del sensor de temperatura LM35 | Curso de Arduino Paso a Paso

Lección 42: Uso del sensor de temperatura LM35 | Curso de Arduino Paso a Paso

En esta lección, aprenderemos cómo usar el sensor de temperatura LM35 con un Arduino para medir y mostrar la temperatura en Celsius, Fahrenheit y Kelvin. Este sensor emite un voltaje que es proporcional a la temperatura, lo que nos permite leer y procesar fácilmente los datos en nuestro programa de Arduino. Al final de este tutorial, podrás implementar acciones basadas en la temperatura en tus proyectos.

El sensor de temperatura LM35 cuenta con tres pines: el pin izquierdo es para la alimentación, el pin del medio emite un voltaje correspondiente a la temperatura, y el pin derecho es para tierra. El sensor opera dentro de un rango de voltaje de 4 a 30 voltios y proporciona una salida de 10 milivoltios por grado Celsius. Esta precisión permite lecturas de temperatura exactas en diversas aplicaciones.

Hardware Explicado

El componente principal de este proyecto es el sensor de temperatura LM35. Está diseñado para proporcionar una salida de voltaje analógico que es proporcional de manera lineal a la temperatura en grados Celsius. El sensor es adecuado para un amplio rango de temperaturas, desde -55°C hasta +150°C, lo que lo hace versátil para diferentes entornos.

LM35_pinout

El LM35 requiere una potencia mínima (60 microamperios) y funciona en un amplio rango de voltaje. Su impedancia de salida es baja, lo que le permite conectarse directamente con los pines de entrada analógica del Arduino sin circuitos adicionales. Esta simplicidad en el diseño hace que el LM35 sea una excelente opción para tareas de medición de temperatura.

Detalles de la hoja de datos

Fabricante Texas Instruments
Número de parte LM35
Voltaje de lógica/entrada/salida 4-30 V
Corriente de salida (por canal) 1 mA máx
Rango de temperatura -55 a +150 °C
Tensión de salida 10 mV/°C
Precisión ±0.5 °C a 25 °C
Paquete TO-92

  • Asegure un suministro de energía adecuado entre 4V y 30V para lecturas precisas.
  • La tensión de salida es directamente proporcional a la temperatura (10 mV/°C).
  • Utiliza capacitores de desacoplamiento cerca del pin de alimentación para estabilización.
  • Mantenga la polaridad correcta al conectar para evitar daños.
  • Asegúrate de buenas conexiones para evitar entradas flotantes, lo que puede causar lecturas erróneas.

Instrucciones de cableado

LM35_basic_wiring_bb

Para conectar el sensor de temperatura LM35, conecta el pin de la izquierda (VCC) a la salida de 5V en el Arduino. El pin del medio (Salida) debe conectarse al pin de entrada analógica.A0, que usaremos para leer la temperatura. Finalmente, conecta el pin correcto (Tierra) a uno de los pines de tierra en el Arduino. Asegúrate de que todas las conexiones estén seguras para evitar problemas durante el funcionamiento.

Al cablear, recuerda que el LM35 se puede alimentar con una tensión de suministro entre 4V y 30V, pero usar 5V es suficiente para aplicaciones de Arduino. Si ves lecturas de temperatura inesperadas, verifica las conexiones y asegúrate de que el sensor esté debidamente alimentado.

Ejemplos de código y guía paso a paso

En el código de Arduino, definimos el pin de entrada analógica para leer la tensión de salida del LM35 con el identificadorinPin, que está establecido paraA0. Además, definimos una constanteLM35_FACTORajustar a 0.01 para representar la salida del sensor por grado Celsius.

const int inPin = A0; // can change
const float LM35_FACTOR = 0.01; // do not change

Esta configuración nos permite leer la temperatura de manera sencilla. A continuación, inicializamos la comunicación serial en elsetup()función para comenzar a enviar datos de temperatura al monitor serie.

void setup() {
  Serial.begin(9600);
  Serial.println("Robojax LM35 for Arduino");
}

Dentro delloop()función, leemos continuamente la temperatura y la imprimimos en diferentes unidades. LaprintTemperature()la función toma un parámetro de carácter para especificar el formato de temperatura deseado, lo que nos permite mostrar la temperatura en Celsius, Fahrenheit o Kelvin.

void loop() {
  printTemperature('C');
  printTemperature('F');
  printTemperature('K');
  delay(1000); // Wait for 1000ms
}

Para tomar medidas basadas en la temperatura, podemos verificar si la temperatura supera un cierto umbral utilizando elgetTemperature()función. Esta función calcula la temperatura media a lo largo de un número especificado de muestras.

Para más detalles, mira el video asociado para un recorrido completo del código (en el video a las 10:15).

Demostración / Qué Esperar

Cuando el sensor LM35 está correctamente conectado y el código de Arduino se ha cargado, deberías ver la temperatura mostrada en grados Celsius, Fahrenheit y Kelvin en el monitor serie. Si aplicas calor al sensor, observarás que las lecturas de temperatura aumentan en consecuencia.

Tenga en cuenta que un cableado incorrecto puede resultar en lecturas de temperatura erráticas, como valores extremadamente altos o bajos. Asegúrese siempre de que el sensor esté conectado correctamente para evitar tales problemas (en el video a las 12:30).

Marcas de tiempo del video

  • 00:00- Introducción al LM35
  • 02:30- Instrucciones de Cableado
  • 05:00- Explicación del código
  • 10:15- Demostración de Lecturas de Temperatura
  • 12:30- Problemas Comunes y Solución de Problemas

Imágenes

LM35_basic_project
LM35_basic_project
LM35_basic_wiring_bb
LM35_basic_wiring_bb
LM35_pinout
LM35_pinout
503-Lesson 42: Using an LM35 Temperature Sensor with Arduino
Idioma: C++
++
/*
 * 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");
}

Cosas que podrías necesitar

Recursos y referencias

Archivos📁

No hay archivos disponibles.