viernes, 28 de junio de 2013

Arduino Tutorial 8: El sensor de temperatura TMP 36

Hola, hoy quiero hablaros de los sensores, en concreto del sensor de temperatura. Los sensores son los instrumentos que utilizan nuestros controladores para detectar las señales del mundo que nos rodea, y que nos sirven para conocer el estado del proceso en el que estemos trabajando.

Los sensores pueden ser de diferentes tipos(temperatura, posición, luminosidad...), aquí vamos a comenzar con el sensor de temperatura por su, a mi modo de ver mayor simplicidad.


En concreto en la práctica de hoy vamos a trabajar con un sensor de temperatura TMP 36, al que le vamos a acoplar una serie de diodos led que nos indicaran visualmente el estado del proceso y un zumbador que nos indicará un mensaje de alerta sonora.

Os adjunto el datasheet del sensor TMP36  aquí

Pensemos en un ejemplo de su uso: tenemos una máquina que tiene problemas de recalentamiento, se calienta con mucha facilidad, pues nuestro sensor será capaz de indicarnos por medio de leds el estado del calentamiento, verde si es bueno, rojo si es peligroso y amarillo, un estado intermedio.


El código de hoy va a tener funciones nuevas, asi que vamos a ir comentando el código poco a poco.
Quiero comentar que hoy vamos a realizar el llamamiento a una función. En prácticas anteriores, nos hemos acostumbrado a escribir todo nuestro código en las funciones "de serie" , la setup y la loop.

Hoy, en medio de la función loop vamos a hacer un llamamiento a la función z largo cuando nos encontremos a una temperatura superior a 25 º C, y a z corto cuando sea superior a 30ºC . Estas funciones van a tener la misión de mandar al zumbador una señal de alarma de pequeña o gran frecuencia.

Veamos  con el monitor serial algunas variaciones de medida, y veamoslo también cuando aumentamos la temperatura del sensor apretándolo con el dedo.

 









Sin más, os dejo con el vídeo para que veais los efectos de nuestro sensor en nuestro circuito.



Código del texto

/*  Ejemplo para probar el sensor de temperatura analógico TMP36
 Adaptado por Guille para su proyecto en e-elektronic-blogspot.com.es
 Me he basado principalmente en el ejemplo escrito por Regata para www.tallerarduino.wordpress.com*/


float voltaje ,tempM = 0, tempm = 100;  //Variables para ir comprobando maximos y minimos
int leds[] = {2,3,4,5,6};
int zumbador = 11;
int n;
void setup()
{
  for(n=0;n<5;n++)
  {
  pinMode(leds[n],OUTPUT);
  }
  pinMode(zumbador,OUTPUT);
  Serial.begin(9600);//Iniciamos la comunicación con el puerto serial

}
void zlargo()
{
  for(n=0;n<10;n++){
    digitalWrite(zumbador,HIGH);
    delay(200);
    digitalWrite(zumbador,LOW);
  }
}

void zcorto()
{
  for(n=0;n<200;n++){
    digitalWrite(zumbador,HIGH);
    delay(50);
    digitalWrite(zumbador,LOW);
  }
}
void loop()
{
  float grados;   //Utilizamos una variable float, que nos añade decimales.
  voltaje = analogRead(0) * 0.004882814;  

/*AnalogRead mide sus resultados entre 0 y 1023, para que nos salga un voltaje entre 0 y 5 voltios vamos a multiplicar el analogRead por 5/1024.*/
                                                                                      
  grados = (voltaje - 0.5) * 100.0;  

/* Con esta fórmula, que podeis encontrar en el datasheet que enlazo, transformamos los voltios en grados*/
                                       
 if(grados >= 10 && grados <= 15)
 {
 for(n=0;n<1;n++) 
 digitalWrite(leds[n],HIGH);
 for(n=1;n<5;n++)
 digitalWrite(leds[n],LOW);
 }                         
  if(grados >= 15 && grados <= 20)
 {
 for(n=0;n<2;n++) 
 digitalWrite(leds[n],HIGH);
 for(n=2;n<5;n++)
 digitalWrite(leds[n],LOW);
 }        
  if(grados >= 20 && grados <= 25)
 {
 for(n=0;n<3;n++) 
 digitalWrite(leds[n],HIGH);
 for(n=3;n<5;n++)
 digitalWrite(leds[n],LOW);
 }        
  if(grados >= 25 && grados <= 30)
 {
 for(n=0;n<4;n++) 
 digitalWrite(leds[n],HIGH);
 for(n=4;n<5;n++)
 digitalWrite(leds[n],LOW);
 zlargo();
 }        
  if(grados >= 30 )
 {
 for(n=0;n<5;n++) 
 digitalWrite(leds[n],HIGH);
 zcorto();
 }        
                                                        
  Serial.print("Temperatura\n");
  Serial.print("C: ");
  Serial.print(grados);

  if (tempM < grados)
    tempM = grados;
  if (grados < tempm)
    tempm = grados;

  Serial.print("\nTemperatura mas alta\n");
  Serial.print("C: ");
  Serial.print(tempM);

  Serial.print("\nTemperatura mas baja\n");
  Serial.print("C: ");
  Serial.print(tempm);

  Serial.print("\n\n");
  delay(1000);
}