

Vamos a mostrar el rango de temperaturas en el que nos encontramos de forma visual, mediante los colores
Para ello necesitaremos un sensor de temperatura LM35 que será el encargado de tomar las lecturas. Este sensor analógico nos devuelve 10mV por cada grado de temperatura. Por lo que la lectura debe hacerse con las entradas analógicas de Arduino.

Las patillas del sensor, mirando la imagen de izquierda a derecha son:
Patilla | Función |
---|---|
1 | Vcc |
2 | Output |
3 | GND |
El circuito es sencillo:

Tenemos un led RGB que cuenta en su interior con un led Rojo, uno verde y otro Azul, esto nos permite crear toda la gama de colores dependiendiendo de cual encendamos y con que intensidad.
Para poder regular la intesidad de los leds es necesario que estén conectados a una salida de Arduino que soporte PWM, por eso nos hemos decantado por la 9,10 y 11.
Las patillas del sensor de temperatura ya las hemos explicado, conectamos las de alimentación (la 1 y la 3) y la salida (la 2) a una entrada de Arduino. Cómo el LM35 nos da una lectura analógica (10mV por grado) necesitamos conectarla a una entrada analógica de Arduino, la A0, por ejemplo.
Ya solo queda el programar el Arduino. Lo que vamos a hacer es leer la medición del LM35, lo haremos mediante la funcion analogRead(), y cómo sabemos que el sensor nos entrega 10mV por cada grado que hace con una sencilla cuenta podemos leer la temperatura en grados celsius y lo almacenaremos en una variable a la que hemos llamado temperatura:
temperatura = (5.0 * analogRead(lm35)*100.0)/1023.0;
Ahora tenemos "traducir" eso a colores, el criterio para hacer esto es libre, nosotros en este ejemplo vamos a hacerlo de una forma decidida arbitrariamente, cualquier otra es igual de valida.
En este ejemplo haremos lo siguiente, en principio vamos a usar este circuito en interiores, la temperatura normal en este pais (España) para el interior de una estancia habitada podríamos decir que esta entre los 18C y los 30C (de media, en algunas regiones puede ser más extremo, pero movamonos en este margen.)
Si la temperatura es nuestro minimo (10C), encenderemos el led azul al máximo de su intensidad, según la temperatura suba este irá perdiendo intensidad y comenzaran a encenderse los demás, primero el verde y por ultimo el rojo.
Si la temperatura alcanza nuestro máximo (30C) veremos el led rojo al 100% de su intensidad.
¡vamos allá!
Lo primero es fijar en dos variables nuestro máximo y nuestro minímo, de esta forma será facil cambiar estos limites si en algún momento lo necesitamos (si pensamos usarlo en exteriores, por ejemplo.)
Creamos dos variables de tipo double para ello, realmente no necesitamos tanta precisión, pero de todos modos nos va a sobrar memoria en el Arduino, así que permitamonos el lujo de malgastarla.
int max = 30; int min = 18;
El PWM de arduino puede valor entre 0 y 255. Lo que necesitamos es pasar nuestra escala de temperatura a estos valores. Para eso existe la función map
Tenemos 3 leds y 12 grados celsus, así que cada 4 grados hay que cambiar de led. Cada led tendrá que representar con 255 valores (intensidades en este caso), la temperatura exacta en un marco de cuatro grados, veamoslo:
Empresaremos por el azul, que se encargará de los valores entre 18 y 21:
Usamos la función map para hacer una escala proporcionada entre esos cuatro grados y las 255 combinaciones.
salidaA = map (temperatura,0,21,255,0);
Lo que hace map es crear una escala de 255 combinaciones para unos valores entre 0 y 21
Lo siguiente será crear la escala para el led verde, que se encenderá cuando la temperatura este entre 22 y 26
salidaV = map (temperatura,22,26,0,255);
Y por ultimo el rojo, que empezará a iluminarse cuando la temperatura supere los 27
salidaR = map (temperatura,27,40,0,255);
Ahora solo hay que escribir estas variables en la salidas conectadas a los leds, para ello usaremos la función analogWrite()
analogWrite(ledA,salidaA); analogWrite(ledV,salidaV); analogWrite(ledR,salidaR);
Y listo! ya lo tenemos funcionando, por supuesto esto no es más que un ejemplo muy simple, se pueden hacer cosas mucho más vistosas trabajando un poco el código, por ejemplo haciendo que los cambios entre rangos no sean tan tajantes, de forma que se puede pasar por todo el espectro de color.
Si no se dispone de un led RGB se puede hacer con tres leds normales, el montaje ocupa algo más de espacio, pero es igual de simple:
//DECLARACIóN DE VARIABLES //pin de conexion del sensor int lm35 = A0; //variable para la temperatura int temperatura = 0; //Variables para almacenar la salida en funcion de la temperatura int salidaR, salidaV,salidaA; //Patilla a la que esta conectado el led Azul int ledA = 9; //Patilla a la que esta conectado el led Verde int ledV = 10; //Patilla a la que esta conectado el led Rojo int ledR = 11; void setup(){ //declara pin del LM de entrada pinMode(lm35, INPUT); /*Indicamos a que la patilla a la que esta conectada el led Azul es una salida*/ pinMode(ledA,OUTPUT); /*Indicamos a que la patilla a la que esta conectada el led Verde es una salida*/ pinMode(ledV,OUTPUT); /*Indicamos a que la patilla a la que esta conectada el led Rojo es una salida*/ pinMode(ledR,OUTPUT); } void loop(){ /*Leemos el sensor y hacemos las operaciones necesarias para pasarloa grados celsius*/ temperatura = (5.0 * analogRead(lm35)*100.0)/1023.0; /*damos a cada valor de nuestra escala del 0 al 21 un valor proporcional en una escala del 255 al 0*/ salidaA = map (temperatura,0,21,255,0); /*damos a cada valor de nuestra escala del 0 al 21 un valor proporcional en una escala del 0 al 255*/ salidaV = map (temperatura,22,26,0,255); /*damos a cada valor de nuestra escala del 0 al 21 un valor proporcional en una escala del 0 al 255*/ salidaR = map (temperatura,27,40,0,255); //pasamos el valor que hemos calculado a la salida para verlo en el led. analogWrite(ledA,salidaA); //pasamos el valor que hemos calculado a la salida para verlo en el led. analogWrite(ledV,salidaV); //pasamos el valor que hemos calculado a la salida para verlo en el led. analogWrite(ledR,salidaR); }