20 de julio de 2013

Arduino: Termómetro "analógico"

Quería probar a usar un sensor de temperatura, pero ver simplemente la temperatura en pantalla me pareció algo aburrido, así que decidí colocar un servo para mover una aguja y así me marcara la temperatura de forma "analógica".

Esta es una pequeña foto de como me ha quedado:


Las piezas de LEGO fueron para sujetar el servo que he utilizado y el papel con las medidas.

Así es como he conectado todo:

Imagen creada en Fritzzing


Y aquí tenéis las imágenes de dial y de la aguja:




Podría hacer más amplio el rango de temperaturas, pero de -10º a 40º me ha servido perfectamente para probar.

He aquí el código:

/*
 * Sensor temperatura
 *
 */
 
#include <Servo.h>
int tempPin = A0; // conectamos el pin de datos del sensor de temperatura 
                  //en la entrada analógica 0
Servo miservo;    // crea un objeto Servo para controlar un servo
int pos = 0;      // variable para guardar la posición del servo

void setup()
{
  miservo.attach(12); // conecta el servo en el pin 12 del objeto servo
  Serial.begin(9600); // inicializamos el puerto serie para poder ver en 
                      //el PC la variación
}

void loop()
{
  // obtenemos temperatura
  float temperatura = obtenVoltaje(tempPin); // obtenemos el voltaje del sensor
  temperatura = (temperatura - .5) * 100;    // pasamos de 10mv a grados
  
  // giramos servo a la posicion adecuada. 
  // valoramos grados de -10 a 40 frente a 0 a 180 grados de giro
  pos = map(temperatura, -10, 40, 0, 180);
  miservo.write(pos); // movemos el servo a la posición deseada
  
  // mostramos la temperatura por puerto serie:
  Serial.print(temperatura); 
  Serial.println(" grados");
  
  delay(500); // pausa
}

// Devuelve el voltaje en un pin analógico dado
float obtenVoltaje(int pin)
{
 // pasamos a un formato digital entre 0 y 1024 desde 0 a 5 voltios   
 return(analogRead(pin) * .004882814); 
}


Para ver la temperatura directamente en nuestro ordenador, pulsaremos en el botón Monitor Serial del IDE de Arduino:


El valor que uso para pasar de mV a grados, lo he leído en el ejercicio CIRC10 de la web de Oomlout, que versa sobre cómo utilizar un sensor de temperatura. Podéis verlo aquí: CIRC10.

Espero que os haya sido de ayuda. Un saludo.