En este fragmento de código os voy a mostrar cómo debemos leer el sensor de temperatura LM35 en Arduino. En cualquier proyecto que se precie es muy recomendable tener un sensor de temperatura para monitorear. En este caso hemos optado por un sensor bastante normal que detecta temperaturas desde -55ºC a 150ºC, 1ºC equivale a 10mV y soporta voltajes de entre 4V y 30V. Todo esta información se ha obtenido de la ficha técnica del LM35. Cuando leemos un sensor analógico con Arduino lo hacemos a través de la función analogRead que nos da un valor entre 0 y 1023, 1024 valores posibles. Si tenemos 0V a la entrada nos devolverá 0 y si tenemos 5V nos devolverá 1023.
A partir de esta información podemos obtener una fórmula matemática que nos calcule la temperatura en función del voltaje que nos facilita el LM35.
Temperatura = Valor * 5 * 100 / 1024
Para más detalle de cómo se obtiene esta fórmula puedes leer y escuchar el capítulo 48. Sensor de temperatura en Arduino.
Lo primero es ver cómo se conecta el LM35 con Arduino y aquí os dejo el esquema eléctrico que vamos a seguir.
El código que debemos de subir a nuestra placa sería el siguiente.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 |
/* Creado: Luis del Valle (ldelvalleh@programarfacil.com) https://programarfacil.com */ // Declaracion de variables globales float tempC; // Variable para almacenar el valor obtenido del sensor (0 a 1023) int pinLM35 = 0; // Variable del pin de entrada del sensor (A0) void setup() { // Configuramos el puerto serial a 9600 bps Serial.begin(9600); } void loop() { // Con analogRead leemos el sensor, recuerda que es un valor de 0 a 1023 tempC = analogRead(pinLM35); // Calculamos la temperatura con la fórmula tempC = (5.0 * tempC * 100.0)/1024.0; // Envia el dato al puerto serial Serial.print(tempC); // Salto de línea Serial.print("\n"); // Esperamos un tiempo para repetir el loop delay(1000); } |
Dos cosas a tener en cuenta son la utilización del monitor serie y de la función delay. El puerto serie nos permite ver el resultado de una forma rápida a través del entorno de desarrollo de Arduino. Se utiliza la función begin para iniciar la comunicación con el monitor serie y para escribir cada línea utilizamos la función print. Una vez cargado el código en nuestra placa, puedes ver el monitor serie si accedes a Herramientas/Monitor serie o con el atajo de teclaco Ctrl+Mayús+M. Te dejo una imagen de donde se encuentra esta opción y como es el monitor serie de Arduino.
Por otro lado utilizamos la función delay para esperar 1 segundo a volver a tomar la temperatura. Si no esperáramos este tiempo se producirían muchas lecturas en 1 segundo y para este ejemplo no es necesario.
En esta segunda parte del fragmento de código vamos a cambiar la resolución. Si utilizas la fórmula que hemos detallado antes te darás cuenta que podemos medir temperaturas de 500ºC con 5V. Esto nunca se va a producir ya que se encuentra fuera del rango de temperaturas del sensor. Para ello vamos a utilizar la función analogReference que nos permite establecer el valor de referencia para la entrada 1023. Hasta ahora hemos trabajado con 5V pero si utilizamos INTERNAL podremos tener más resolución, 1.1V. Esto equivale a poder medir temperaturas de hasta 110ºC, dentro del rango de operación del LM35. Para ello solo debemos utilizar la siguiente fórmula:
Temperatura = Valor * 1.1 * 100 / 1024
El código que debemos cargar es el siguiente.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 |
/* Creado: Luis del Valle (ldelvalleh@programarfacil.com) https://programarfacil.com */ // Declaracion de variables globales float tempC; // Variable para almacenar el valor obtenido del sensor (0 a 1023) int pinLM35 = 0; // Variable del pin de entrada del sensor (A0) void setup() { // Cambiamos referencia de las entradas analógicas analogReference(INTERNAL); // Configuramos el puerto serial a 9600 bps Serial.begin(9600); } void loop() { // Con analogRead leemos el sensor, recuerda que es un valor de 0 a 1023 tempC = analogRead(pinLM35); // Calculamos la temperatura con la fórmula tempC = (1.1 * tempC * 100.0)/1024.0; // Envia el dato al puerto serial Serial.print(tempC); // Salto de línea Serial.print("\n"); // Esperamos un tiempo para repetir el loop delay(1000); } |
Como puedes comprobar los únicos cambios son la inclusión de la función analogReference y el cambio en la fórmula para pasar de 5V a 1.1V.
Ya sabéis, hay que practicar con los fragmentos de código, cualquier duda, sugerencia o mejora nos las podéis hacer llegar a través del formulario de contacto.