Control de la temperatura de un invernadero con Arduino

Un invernadero está controlado por tres sensores de temperatura (T1,T2 y T3). Los valores máximos son tales que T1< 25º, T2 < 30º y  T3 < 35º, tener en cuenta siempre se cumple que T1

➢ Por debajo de T1= 25º, no se activa ningún ventilador.
➢ Para T1 > 25º  y T2 < 30º, se activa el ventilador pequeño (V1)
➢ Para T2 > 30º  y T3 < 35º, se activa el ventilador grande (V2)
➢ Para  T3 > 35º, se activan los dos ventiladores.

  • Dibujar el circuito correspondiente.
  • Realizar el algoritmo.
  • Realizar el programa para Arduino.



Diagrama de flujo



Código

/*
 MODO DE CONEXIÓN DEL SENSOR

 Conectamos el pin 1 que corresponde a la alimentación del sensor con los 5V del Arduino
 Conectamos el pin 2 que corresponde al pin de datos del sensor con cualquier pin analógico del Arduino
 Conectamos el pin 3 que corresponde al pin de masa (GND) del sensor con el pin GND del Arduino

*/

# define sensor1  5  //Pin analógico A5 del Arduino donde conectaremos el pin de datos del sensor TMP36
# define sensor2 4
# define sensor3  3
# define pinInterruptor 2
# define motor1 13
#define motor2 12
int estadoInterruptor;
float T1, T2,T3;
 
void setup()
{
  Serial.begin(9600);  //Iniciamos comunicación serie con el Arduino para ver los resultados del sensor
                        //a través de la consola serie del IDE de Arduino
}

void loop()
{
                                    
estadoInterruptor=digitalRead(pinInterruptor);
  if(estadoInterruptor == 1)
  {
  T1=leerSensorDeTemperatura(sensor1);
  T2=leerSensorDeTemperatura(sensor2);
  T3=leerSensorDeTemperatura(sensor3);                                                          
   if (T1<25 br="">   {
     T1=leerSensorDeTemperatura(sensor1);
     T2=leerSensorDeTemperatura(sensor2);
     T3=leerSensorDeTemperatura(sensor3);
   }
   else if (T1>25 && T2<30 br="">   {
     digitalWrite(motor1,HIGH);
     digitalWrite(motor2,LOW);
   }
    else if (T2>30 && T3<35 br="">    {
     digitalWrite(motor1,LOW);
     digitalWrite(motor2,HIGH);
    }
    else if (T3>35)
    {
     digitalWrite(motor1,HIGH);
     digitalWrite(motor2,HIGH);
    }
    else
    {
     digitalWrite(motor1,LOW);
     digitalWrite(motor2,LOW);
    }
   
 
  //Mostramos mensaje con valores actuales de temperatura
  Serial.print("Medidas actuales\n");
  Serial.print("Sensor 1: ");
  Serial.print(T1);
  Serial.print("\n\n");
  Serial.print("Sensor 2: ");
  Serial.print(T2);
  Serial.print("\n\n");
  Serial.print("Sensor 3: ");
  Serial.print(T3);
  Serial.print("\n\n");
  Serial.print("\n\n");
  delay(1000);  //Usamos un retardo de 2 segundos entre lectura y lectura 
}
else
  
{
 
  Serial.print("Interruptor sin activar ");
  Serial.print("\n\n");
}
}
float leerSensorDeTemperatura(int sensor)
{
 float voltaje, gradosC;  //Declaramos estas variables tipo float para guardar los valores de lectura
                                    //del sensor, así como las conversiones a realizar para convertir a grados
  voltaje = analogRead(sensor) * 0.004882814;                                  //centígrados y a grados Fahrenheit
                                                                         
  gradosC = (voltaje - 0.5) * 100.0;  //Gracias a esta fórmula que viene en el datasheet del sensor podemos convertir
                                       //el valor del voltaje a grados centigrados
   return(gradosC);
}

No hay comentarios: