Pic
shadow

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.

Sensor de Teperatura

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:

Pic

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:

  • Protoboard Ampliar
    Esquema Ampliar
				//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); 
				  }