Vídeo
A continuación, encontrará el vídeo en donde se explica el funcionamiento del circuito.
Acerca del proyecto
El LM35 es un sensor que puede medir temperatura, donde su salida de voltaje es proporcional a la temperatura del ambiente, el cual requiere para su lectura que el controlador tenga la capacidad de realizar la conversión de análogo a digital. En este artículo vamos a crear el proyecto Arduino LM35, explicaremos su funcionamiento, la conexión para obtener la temperatura.
Conocimiento previo
Para realizar este proyecto se requiere conocimiento previo de los siguientes temas, si aun no has trabajado con lo que se menciona en la siguiente tabla, allí están los enlaces a los post para que puedas dar un repaso adicional o puedas recordar el conocimiento necesario para poder realizar este proyecto.
Proyecto | Descripción |
---|---|
Conversor análogo a digital | Este post proporciona una breve panorámica del procesamiento digital de la señal, donde vamos a centrarnos principalmente en las características del sistema ideal y también mencionaremos algunos métodos de conversion A/D. |
LM35 datasheet | En este post encontrara la hoja de datos del lm35, describimos el elementos, sus características y la forma de conexión |
arduino analogRead() | Arduino contienen un convertidor de analógico a digital multicanal de 10 bits. Esto significa que mapeará voltajes de entrada entre 0 y el voltaje de operación (5V o 3.3V) en valores enteros entre 0 y 1023. |
ATmega328P | Hoja de datos del ATmega328P. |
Conversión análogo a digital
He creado un post completo en donde realizamos la explicación de Conversor análogo a digital, damos los conceptos básicos y el paso a paso teórico en donde mostramos como de una señal análoga creamos los valores digitales, recomiendo leer un poco de este tema antes de continuar
Resumen de lectura ADC
Cuando se lee un voltaje analógico desde uno de los pines del arruino, el converso de análogo a digital (ADC) realiza una conversión de ese voltaje en un número que podamos manipular con el programa. El voltaje que soporta el arduino es de 0 a 5V y su valor de conversión va a hacer entre 0 a 1023 a 10bit de resolución.
Si realizamos la gráfica con los datos de voltaje y el valor de conversión, podemos observar que nos genera una gráfica lineal, en donde los resultados son proporcionales, observemos la siguiente imagen.
Si deseamos obtener el valor del voltaje de la entrada analógica teniendo en cuenta los parámetros mencionados en el párrafo anterior, podemos multiplicar el valor leído del pin analógico por 5 voltios que es lo máximo que puede llegar y dividirlo por 1023 que es el mas grande dentro del rango de 10 bits.
De este modo, tenemos relacionada el voltaje de salida del sensor con los valores digitales de Arduino.
LM35
La serie LM35 son dispositivos de temperatura de circuito integrado de precisión con un voltaje de salida linealmente proporcional a la temperatura centígrada. El dispositivo LM35 tiene una ventaja sobre los sensores lineales de temperatura calibrados en Kelvin, ya que no se requiere que el usuario reste un voltaje constante grande de la salida para obtener una escala centígrada conveniente.
Para mas detalles, tenemos la hoja de datos de este componente para que tambien le den un repaso antes de seguir con el circuito.
Variable del sensor
Vamos a obtener la variable de conversión del sensor lm35, para ello nos dirigimos al datasheet, en las características vamos a buscar algo como escala del factor lineal el cuan nos indica que es 10mV/°C, esto se explica mejor con una gráfica.
Con esto, tenemos que multiplicar el voltaje obtenido en el paso anterior por el valor de la relación voltaje-variable (en este caso 100) y obtendremos la variable de medida del sensor.
ADC en ATmega328P
El Atmel® ATmega328P presenta un ADC de aproximación sucesiva de 10 bits. El ADC está conectado a un multiplexor analógico de 8 canales que permite ocho entradas de voltaje de un solo extremo construidas a partir de los pines del puerto A. Las entradas de voltaje de un solo extremo se refieren a 0 V (GND).
El ADC contiene un circuito de muestreo y retención que asegura que el voltaje de entrada al ADC se mantenga a un nivel constante durante la conversión.
El ADC convierte una tensión de entrada analógica en un valor digital de 10 bits mediante aproximaciones sucesivas. El valor mínimo representa GND y el valor máximo representa el voltaje en el pin AREF menos 1 LSB. Opcionalmente, se puede conectar AVCC o un voltaje de referencia interno de 1.1V al pin AREF escribiendo en los bits REFSn en el registro ADMUX. Por lo tanto, la referencia de voltaje interno puede desacoplarse mediante un capacitor externo en el pin AREF para mejorar la inmunidad al ruido.
El canal de entrada analógica se selecciona escribiendo en los bits MUX en ADMUX. Cualquiera de los pines de entrada del ADC, así como GND y una referencia de voltaje de banda prohibida fija, se pueden seleccionar como entradas de un solo extremo al ADC. El ADC se habilita configurando el bit de habilitación de ADC, ADEN en ADCSRA. Las selecciones de canal de entrada y referencia de voltaje no entrarán en vigencia hasta que se configure ADEN. El ADC no consume energía cuando se borra ADEN, por lo que se recomienda apagar el ADC antes de ingresar a los modos de suspensión de ahorro de energía.
Materiales
Los materiales los describimos en la siguiente tabla:
Material | Cantidad | Descripción |
---|---|---|
Arduino | 1 | Nos sirve cualquier arduino con un conversor ADC |
LM35 | 1 | Sensor de temperatura |
Cables de conexión | 3 | Cables macho a macho |
Circuito
La conexión que realizamos desde el sensor a la placa arduino es por medio del puerto análogo, como se observa ademas de la alimentación, en la siguiente tabla describimos los pines que conectamos:
Arduino | LM35 |
---|---|
+5 | 1 |
Pin 2 | 2 |
VCC | 3 |
Este es un ejemplo de conexión con una breadboard.
Código
El código que vemos a continuación no requiere mucho análisis, solo es aplicar las formulas vistas anteriormente y podemos obtener los datos de temperatura.
//Paso 1
const int sensorPin = A0;
void setup()
{
Serial.begin(9600);
}
void loop()
{
//Paso 2
float valueAdc = analogRead(sensorPin);
Serial.println(valueAdc);
//Paso 3
float volts = (valueAdc / 1023.0) * 5;
Serial.println(volts);
//Paso 4
float celsius = volts * 100.00;
//Paso 5
Serial.print(celsius);
Serial.println(" C");
delay(1000);
}
- Declaramos una constante
sensorPin
con el pin analógico que vamos a usar. - Leemos el valor del análogo con
analogRead()
usando la constante declarada al inicio. - Realizamos la conversión a de análogo a digital y lugo con la primera formula obtenemos el voltaje de entrada.
- Realizamos la conversión del voltaje a grados celsius usando la variable del factor lineal.
- Por ultimo mostramos en terminal el resultado.
Finalizamos mostrando una imagen de como se ve el resultado de medir la temperatura del ambiente.