Hoy vamos a diseñar y programar un pequeño circuito que nos mida la temperatura.
En función de los valores obtenidos,tendremos el siguiente funcionamiento:
- Si la temperatura es <25ºC el sistema se encuentra a la temperatura óptima.
- Si la temperatura es >25ºC activaremos una señal luminosa.
- Si la temperatura es >30ºC activaremos la señal luminosa y un ventilador al 60%.
- Si la temperatura es >37ºC activaremos la señal luminosa y el ventilador casi a máxima potencia.
El componente empleado para realizar la medición es un sensor de temperatura LM35. Aquí podemos ver su patillaje:
Este es el esquema que he diseñado para la práctica:
Para alimentar el sensor LM35 podremos utilizar la misma fuente de Arduino, que nos suministra 5 voltios Vdc. En cambio para alimentar el ventilador de PC, le alimentaremos con una fuente adicional de 12 Vdc.
El diodo Led de alarma simplemente le pincharemos en la patilla 13 y GNd de Arduino, ya que lleva una resistencia interna de 330 ohmios.
Funcionamiento:
La temperatura es óptima
La temperatura es >25ºC
La temperatura es >30
Vídeo Funcionamiento:
SKETCH:
//Lectura de temperatura mediante un sensor del tipo LM35, y aviso visual con un ventilador a 3 velocidades.
// el programa medirá la temperatura y en función de los valores, activara un led de alarma o activara un ventilador a varias velocidades
int pinTemperatura = 2;// daremos el nombre al pind e temperatura
int ledpin1 = 13;
int rele = 12;
int tempValor ; // La variable donde se almacena la temperatura
void setup()
{
Serial.begin(9600); // Activamos el puerto serie para visulizar y definimos los pin 13 y 12 como salida
pinMode(ledpin1, OUTPUT);
pinMode(rele, OUTPUT);
}
void loop()
//bucle
{
//mediante la siguiente encuacion transformaremos la lectura analógica en un valor de temperatura almacenado en la variable tempValor
tempValor = ( 5.0 * analogRead(pinTemperatura) * 100.0) / 1024.0;
// la funcion serial.print Impreme el valor en el puerto serie
Serial.print("La Temperatura en este momento es de: (Celsius) = ");
Serial.println(tempValor);
// el delay es para medir la temperatura cada segundo
delay (1000);
int i= 0;
analogWrite(rele,i); // el ventilador estará apagado ya que i=0
if(tempValor>25)// cuando la temperatura alcanza 25 grados se activa la alarma visual, ventilador apagado.
{
digitalWrite(ledpin1,HIGH);
delay(500);
digitalWrite(ledpin1,LOW);
if(tempValor>30) // si la temperatura es mayor a 30 grados, se activa el ventilador al 60% aprox
{
int i = 150;
analogWrite(rele,i);
if(tempValor>37)// si la temperatura es mayor a 30 grados, se activa el ventilador al 85% aprox
{
int i = 215;
analogWrite(rele,i); //Recordemos que la funcion analogWrite toma valores entre 0 y 255.
}
}
}
}
//Redfox