sábado, 25 de diciembre de 2010

Sensor de temperatura

Siguiendo con los proyectos sencillos, vamos a ver cómo podemos hacer con Arduino un sensor de temperatura simple, que puede servirnos para algo tan útil como una alarma anti-incendios =) Lo que hará esta alarma será iluminar un LED y hacer que suene un pitido cuando la temperatura sea superior a la que nosotros consideremos como “peligrosa”. Si la temperatura vuelve a un nivel aceptable, la alarma para. Además, se irá mostrando por el Serial Monitor (Tools->Serial Monitor) la temperatura actual que se va detectando.

Para realizar este proyecto hemos utilizado lo siguiente:

- 1 buzzer piezo.

- 1 termistor de 4.7k.

- 1 resistencia de 220 Ohms.

- 1 resistencia de 10k Ohms.

Lo primero que haremos será conectar un LED en el pin 13 de Arduino (tal y como vimos en el proyecto Blink del post anterior).

Seguidamente, conectaremos el buzzer a tierra y al pin digital 7 (puede ser otro, sin problema ;)), y usaremos la resistencia de 220 Ohms..

Por último haremos uso del termistor y la resistencia que nos queda, conectándolos del siguiente modo:

(Tierra) --- (R 10k) ------|------ (Termistor) --- (+5v)
|
                  Entrada Analógica 0 (A0)

El circuito, una vez montado (ayudándonos de una protoboard), quedaría así:










El código del programa es el siguiente:

#include

double Thermister(int RawADC) {

double Temp;

Temp = log(((10240000/RawADC) - 10000));

Temp = 1 / (0.001129148 + (0.000234125 * Temp) + (0.0000000876741 * Temp * Temp * Temp));

Temp = Temp - 273.15; // Conversión de Kelvin a Celsius

//Temp = (Temp * 9.0)/ 5.0 + 32.0; // Conversión de Celsius a Fahrenheit

return Temp;

}

void setup() {

pinMode(13, OUTPUT);

Serial.begin(9600); // use the serial port

}

void loop() {

int tempCelsius = int(Thermister(analogRead(0))-15);

Serial.println(tempCelsius); // display Celsius

if (tempCelsius > 31) {

digitalWrite(13, HIGH);

tone(7, 150, 500);

delay(1000);

noTone(7);

}

else {

digitalWrite(13, LOW);

digitalWrite(7, HIGH);

delay(1000);

}

}

Como se puede observar, la temperatura la mostramos en Celsius, aunque también se da la posibilidad (está comentada) de mostrarla en Fahrenheit.

Una explicación sobre la instrucción: int tempCelsius = int(Thermister(analogRead(0))-15). El –15 es una aproximación que hemos hecho “a mano”, ya que si no, no mostraba la temperatura real. Desconozco el motivo. Podéis jugar con ese número a vuestro gusto para adecuarlo a vuestro circuito.

Como última nota, decir que hemos puesto que la alarma salte cuando la temperatura es superior a 31 grados, para que saltase rápido y el vídeo, que viene a continuación con el resultado, no fuese demasiado largo. Hemos usado una lámpara para que la temperatura del termistor suba. También podéis probar con los dedos, ya que así se calienta rápido también. Para los más osados, siempre podéis poner la temperatura límite más alta, y pegarle fuego a vuestra casa... y veréis que funciona :P

He aquí el vídeo resultado:

Eso es todo, espero que os haya gustado y os resulte útil.

Un saludo :)

1 comentario:

  1. Hola maestro, una consulta practica, no soy muy entendido:

    Observo que el sensor lo tienes insertado en la misma placa, que pasa si lo queremos poner mas alejado , a unos 5 metros de distanca?

    hago un cableado de 5 metros para el sensor? como son tan poco los volts no se pierden en el camino? o hago un cableado para la tarjetita blanca...


    saludos.

    ResponderEliminar