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.
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.
Finalmente aportamos el enlace al funcionamiento del prototipo construido.
No hay comentarios:
Los comentarios nuevos no están permitidos.