AÑO 2017, AUTOMATIZACIÓN CON ARDUINO





OBJETIVOS DEL PROYECTO DE 2017


El proyecto del año 2017 será una continuación del del año 2016 con intención de completarlo automatizando la placa solar construida el año pasado, para conseguir esto diseñaremos el mismo con la famosa placa microcontrolada ARDUINO UNO.

El proyecto comenzará aprendiendo a usar e interactuar con ARDUINO mediante prácticas, aprendiendo tanto hardware como software relacionado con el mismo.

 

Tras las primeras sesiones las alumnas comienzan a adquirir destreza tanto en la herramienta de programación como en la manipulación de los elementos electrónicos.

Seguidamente pasamos a describir pormenorizadamente cada uno de los pasos a seguir en la elaboración del proyecto.

  •  DESCRIPCIÓN DEL PROYECTO A REALIZAR.
El proyecto consiste en automatizar una calefacción solar construida con latas de refresco el pasado curso con los alumnos de PROFUNDIZA.
Las especificaciones son las siguientes:
Cuando haga sol y la calefacción se caliente un sensor de temperatura en el interior de la misma se comparará con la temperatura medida en el interior de la sala, de tal forma que si la temperatura de la placa es superior a la de la sala, un ventilador y un LED verde se pondrán en funcionamiento para insuflar aire caliente a la estancia.
Al anochecer la temperatura en el exterior bajará y también lo hará en el interior de la placa, por tanto el sistema dejará de funcionar encendiéndose un LED rojo que nos indicará que el ventilador está parado.
En caso de que la temperatura interior sea superior a la exterior el ventilador también permanecerá parado continuando el LED rojo encendido.
Y para finalizar, si tanto en el interior como en el exterior la temperatura es alta el sistema tampoco funcionará. 
  • LISTA DE MATERIALES.
  • 1 placa Arduino UNO.
  • 2 sensores de temperatura TMP 36 GZ.
  • 1 LED rojo.
  • 1 LED VERDE.
  • 2 resistencias de 220 Ohmios.
  • 1 relé.
  • 1 motor CC.
  • 1 porta pilas AAA

ESQUEMAS DE FRITZING.
Automatizar la placa solar_bb.jpg 
Automatizar la placa solar_esquema.jpg 

  • PROGRAMA.

int estado = 0; //Se declara la variable estado para saber cuándo está el motor-ventilador en funcionamiento (ciclo de histéresis)
int temp_int = 0; //Se declara la variable temperatura interior (cable amarillo)
int temp_ext = 0; //Se declara la variable temperatura exterior (cable naranja)
int temp_control_max = 25; //Se declara la variable temperatura interior máxima para detener el motor-ventilador
int temp_control_min = 20; //Se declara la variable temperatura interior mínima para accionar el motor-ventilador

int led_verde = 9; // Se declara la salida digital 9 para led verde
int rele = 2;      // Se declara la salida digital 2 para relé
int led_rojo = 10; // Se declara la salida digital 10 para led rojo


void setup() {
 pinMode(led_verde, OUTPUT); // salida led verde (motor-ventilador funcionando)
 pinMode(rele, OUTPUT); // Salida relé para activar motor
 pinMode(led_rojo, OUTPUT); // salida led rojo (motor-ventilador parado)
 Serial.begin (9600);
}

void loop() {

 temp_int = (5.0 * analogRead(0) * 100) / 1024 - 50; // leemos la temperatura interior y la almacenamos en la variable temp_int
 temp_ext = (5.0 * analogRead(1) * 100) / 1024 - 50; // leemos la temperatura exterior y la almacenamos en la variable temp_ext

 Serial.print("Temperatura interior:"); // imprimimos las temperaturas interior y exterior por pantalla cada 0.5 segundos
 Serial.println(temp_int);
 Serial.print("Temperatura exterior:");
 Serial.println(temp_ext);
 Serial.println("");
 delay(500);

 if (temp_ext >= temp_int && temp_ext >= temp_control_min) // La condición que le imponemos a la temperatura exterior para que el sistema se active es que sea mayor que la temperatura mínima de control y mayor que la temperatura interior
 {
    if (temp_int <= temp_control_min) // Si la temperatura interior baja de la temperatura de control mínima, se activa el sistema (led verde)
    {
     digitalWrite(led_verde, HIGH); // led verde ON
     digitalWrite(rele, LOW); // relé ON
     digitalWrite(led_rojo, LOW); // led rojo OFF

     estado = 1; // El sistema está funcionando
    }
    else
    {
     if (estado == 1)
     {
       if (temp_int >= temp_control_max) // Si el sistema está activado y la temperatura interior sobrepasa la temperatura de control máxima, el sistema se detiene (se activa led rojo)
       {
         digitalWrite(led_verde, LOW); // led verde OFF
         digitalWrite(rele, HIGH); // relé OFF
         digitalWrite(led_rojo, HIGH); // led rojo ON
         Serial.println("Motor OFF");

         estado = 0;
       }
       else
       {
         digitalWrite(led_verde, HIGH); // led verde ON
         digitalWrite(rele, LOW); // relé ON
         digitalWrite(led_rojo, LOW); // led rojo OFF
         Serial.println("Motor ON");

       }
     }
     else
     {
       digitalWrite(led_verde, LOW); // led verde OFF
       digitalWrite(rele, HIGH); // relé OFF
       digitalWrite(led_rojo, HIGH); // led rojo ON
       Serial.println("Motor OFF");

     }
    }

 }
 else
 {
    digitalWrite(led_verde, LOW); // led verde OFF
    digitalWrite(rele, HIGH); // relé OFF
    digitalWrite(led_rojo, HIGH); // led rojo ON
    Serial.println("Motor OFF");
   
int estado = 0; //Se declara la variable estado para saber cuándo está el motor-ventilador en funcionamiento (ciclo de histéresis)
int temp_int = 0; //Se declara la variable temperatura interior (cable amarillo)
int temp_ext = 0; //Se declara la variable temperatura exterior (cable naranja)
int temp_control_max = 25; //Se declara la variable temperatura interior máxima para detener el motor-ventilador
int temp_control_min = 20; //Se declara la variable temperatura interior mínima para accionar el motor-ventilador

int led_verde = 9; // Se declara la salida digital 9 para led verde
int rele = 2;      // Se declara la salida digital 2 para relé
int led_rojo = 10; // Se declara la salida digital 10 para led rojo


void setup() {
 pinMode(led_verde, OUTPUT); // salida led verde (motor-ventilador funcionando)
 pinMode(rele, OUTPUT); // Salida relé para activar motor
 pinMode(led_rojo, OUTPUT); // salida led rojo (motor-ventilador parado)
 Serial.begin (9600);
}

void loop() {

 temp_int = (5.0 * analogRead(0) * 100) / 1024 - 50; // leemos la temperatura interior y la almacenamos en la variable temp_int
 temp_ext = (5.0 * analogRead(1) * 100) / 1024 - 50; // leemos la temperatura exterior y la almacenamos en la variable temp_ext

 Serial.print("Temperatura interior:"); // imprimimos las temperaturas interior y exterior por pantalla cada 0.5 segundos
 Serial.println(temp_int);
 Serial.print("Temperatura exterior:");
 Serial.println(temp_ext);
 Serial.println("");
 delay(500);

 if (temp_ext >= temp_int && temp_ext >= temp_control_min) // La condición que le imponemos a la temperatura exterior para que el sistema se active es que sea mayor que la temperatura mínima de control y mayor que la temperatura interior
 {
    if (temp_int <= temp_control_min) // Si la temperatura interior baja de la temperatura de control mínima, se activa el sistema (led verde)
    {
     digitalWrite(led_verde, HIGH); // led verde ON
     digitalWrite(rele, LOW); // relé ON
     digitalWrite(led_rojo, LOW); // led rojo OFF

     estado = 1; // El sistema está funcionando
    }
    else
    {
     if (estado == 1)
     {
       if (temp_int >= temp_control_max) // Si el sistema está activado y la temperatura interior sobrepasa la temperatura de control máxima, el sistema se detiene (se activa led rojo)
       {
         digitalWrite(led_verde, LOW); // led verde OFF
         digitalWrite(rele, HIGH); // relé OFF
         digitalWrite(led_rojo, HIGH); // led rojo ON
         Serial.println("Motor OFF");

         estado = 0;
       }
       else
       {
         digitalWrite(led_verde, HIGH); // led verde ON
         digitalWrite(rele, LOW); // relé ON
         digitalWrite(led_rojo, LOW); // led rojo OFF
         Serial.println("Motor ON");

       }
     }
     else
     {
       digitalWrite(led_verde, LOW); // led verde OFF
       digitalWrite(rele, HIGH); // relé OFF
       digitalWrite(led_rojo, HIGH); // led rojo ON
       Serial.println("Motor OFF");

     }
    }

 }
 else
 {
    digitalWrite(led_verde, LOW); // led verde OFF
    digitalWrite(rele, HIGH); // relé OFF
    digitalWrite(led_rojo, HIGH); // led rojo ON
    Serial.println("Motor OFF");
    estado = 0;
 }
} = 0;
 }
}

Finalmente aportamos el enlace al funcionamiento del prototipo construido.
 

 

No hay comentarios: