Os presentamos AIREduino

AIREduino es el primer proyecto del internet de las cosas de MKapp. A continuación se puede ver el vídeo de introducción del que será un proyecto amplio y configurable según las necesidades de cada persona.

¿Qué es AIREduino?

Con AIREduino, también conocido como airduino (aunque este último nombre ya ha sido utilizado para otros dispositivos relacionados con la conexión inalámbrica) podrás llegar a conseguir, por un precio muy económico, un sistema tan sofisticado como el que ofrecen marcas conocidas como AIRZONE, AIR NOVA, …

Básicamente, se automatiza con arduino un sistema de aire por conductos, pudiendo crear desde un sistema básico hasta un sistema totalmente avanzado.

Existen otros sistemas avanzados en el mercado para la automatización del control de rejillas de aire por conductos (aires de calor y de frío), pero todos ellos son bastante costosos y no todo el mundo puede permitírselo.

Con AIREduino, podrás crear un sistema de control de rejillas de aire por conductos adaptado a tus necesidades y con muy poca inversión. Además, si dispones de rejillas compatibles con el sistema propuesto, tan sólo tendrás que adquirir una placa arduino y alguna que otra pieza impresa en 3D.

Lo necesario para AIREduino es básico y económico

AIREduino se basa en placas arduino y, entre todas las existentes, podemos elegir entre la placa arduino WIFI llamada arduino D1 WIFI o bien podemos decantarnos por la variante ESP8266 NodeMCU.

ANTES DE EMPEZAR

No estaría mal que os hicierais con un conjunto de iniciación de arduino con el cual podréis iniciaros con este tipo de placas y practicar con proyectos más sencillos como pueden ser el encendido y apagado de un led. Los hay desde los más baratos hasta los que incluyen más componentes, aunque os recomiendo el más sencillo y más barato:

Además, estos conjuntos de iniciación incluyen algunos componentes electrónicos que podremos utilizar en un futuro.

No obstante, si queréis hacer simplemente lo que se describe en el vídeo, podéis adquirir directamente la placa recomendada que es la placa arduino D1 WIFI ESP8266 o bien la variante ESP8266 NodeMCU:

¿Qué rejillas PUEDO COMPRAR?

Si ya disponéis de rejillas de salida de aire en vuestra casa y estas rejillas traen algún sistema manual de apertura y cierre por engranajes, habrá que diseñar la forma de mover dichos engranajes estudiando su arquitectura. Si necesitas ayuda para ello, puedes ponerte en contacto con nosotros.

Si sólo disponéis de rejillas de salida de aire orientables pero estas no traen una compuerta de regulación de aire, podéis buscar alguna con sistema de engranajes, las cuales motorizaremos posteriormente.

En Mkapp seguimos buscando rejillas normalizadas para motorizarlas de una forma genérica y así no tener que buscar la forma propia de adaptarla. No obstante, a continuación indicamos un enlace a una página que dispone de compuertas de regulación para rejillas. Os recomendamos que los engranajes estén colocados en horizontal, tal y como podéis observar en los vídeos del proyecto.

Podéis buscar rejillas en cualquier página de rejillas de aire por conductos o simplemente escribiendo en GOOGLE las palabras clave “rejilla aire conductos” y os aparecerán enlaces de páginas y ventas de este tipo de rejillas.

¿Qué OTROS COMPONENTES NECESITAMOS?

Ya sólo nos queda comprar un servomotor y un relé para cada compuerta de salida de aire que queramos motorizar. Como hemos explicado en el vídeo, el relé es para evitar sonidos molestos que en ocasiones generaba el servomotor. Ambos son económicos y fáciles de adquirir:

SERVOMOTORES RECOMENDADOS Y USADOS EN EL PROYECTO

RELÉS RECOMENDADOS Y USADOS EN EL PROYECTO

Código de AIREduino para agregar a arduino

A continuación puedes ver el vídeo explicativo y más abajo agregamos el código depurado y probado (en la placa arduino D1 WIFI) que podrás agregar a tu placa arduino para que comience a funcionar tu proyecto AIREduino con 2 rejillas de aire por conductos.

#include <ESP8266WiFi.h> //LIBRERIA1
#include <Servo.h> //LIBRERIA2

//CONFIGURACION ROUTER
const char ssid[] = "NOMBRE_DE_MI_RED_WIFI"; //Definimos la SSDI de nuestro servidor WiFi -nombre de red-
const char password[] = "CONTRASEÑA"; //Definimos la contraseña de nuestro servidor
IPAddress ip(192,168,1,44); //Definimos el número de conexión de AIREDUINO al router (predeterminado el 44)
IPAddress gateway(192,168,1,1);
IPAddress subnet(255,255,255,0);
WiFiServer server(80);
//FIN CONFIGURARION RUTER

//VARIABLES A UTILIZAR
Servo servo;
Servo servo2;
int grados = 85;
int grados2 = 85;
int apertura = 2;
int apertura2 = 2;
int PinLED = 4; //PIN DE SALIDA PARA RELE1
int PinLED2 = 1; //PIN DE SALIDA PARA RELE2
int estadoLED = LOW;
int estadoLED2 = LOW;
//FIN DE VARIABLES A UTILIZAR

void setup() {

Serial.begin(115200);

servo.attach(D3); //PIN DE SALIDA PARA SERVO1 - GPIO5 / D3
servo2.attach(D2); //PIN DE SALIDA PARA SERVO2 - GPIO16 / D2

pinMode(PinLED, OUTPUT); //Inicializamos el GPIO2 como salida
digitalWrite(PinLED, HIGH); //Dejamos inicialmente el GPIO2 apagado

pinMode(PinLED2, OUTPUT); //Inicializamos el GPIO1 como salida
digitalWrite(PinLED2, HIGH); //Dejamos inicialmente el GPIO1 apagado

WiFi.begin(ssid, password);
WiFi.config(ip, gateway, subnet);
WiFi.setAutoReconnect(true); // Realiza la reconexión a la red WiFi si se pierde la conexión

server.begin();

Serial.println();

Serial.print("Direccion IP Access Point - por defecto: "); //Imprime la dirección IP
Serial.println(WiFi.softAPIP());
Serial.print("Direccion MAC Access Point: "); //Imprime la dirección MAC
Serial.println(WiFi.softAPmacAddress());

digitalWrite(PinLED, estadoLED);
digitalWrite(PinLED2, estadoLED2);
delay(200);
servo.write(grados);
delay(200);
servo2.write(grados2);
delay(1500);
estadoLED = HIGH;
estadoLED2 = HIGH;
digitalWrite(PinLED, estadoLED);
digitalWrite(PinLED2, estadoLED2);

}

void loop()
{
// Comprueba si el cliente ha conectado
WiFiClient client = server.available();
if (!client) {
return;
}

// Espera hasta que el cliente envía alguna petición
Serial.println("nuevo cliente");
while(!client.available()){
delay(1);
}

// Imprime el número de clientes conectados
Serial.printf("Clientes conectados al Access Point: %dn", WiFi.softAPgetStationNum());

// Lee la petición
String peticion = client.readStringUntil('r');
Serial.println(peticion);
client.flush();

// Comprueba la petición

//MOVIMIENTO DE APERTURA DE SERVOMOTOR 1
if (peticion.indexOf('/A') != -1) {
estadoLED = LOW;
grados = grados + 86;
apertura = 2;
if (grados > 160) {grados = 160; apertura = 3;}
}

//MOVIMIENTO DE CIERRE DE SERVOMOTOR 1
else if (peticion.indexOf('/B') != -1) {
estadoLED = LOW;
grados = grados - 86;
apertura = 2;
if (grados < 0) {grados = 0; apertura = 1;}
}

// Comprueba la petición2

//MOVIMIENTO DE APERTURA DE SERVOMOTOR 2
else if (peticion.indexOf('/D') != -1) {
estadoLED2 = LOW;
grados2 = grados2 + 86;
apertura2 = 2;
if (grados2 > 160) {grados2 = 160; apertura2 = 3;}
}

//MOVIMIENTO DE CIERRE DE SERVOMOTOR 2
else if (peticion.indexOf('/Z') != -1) {
estadoLED2 = LOW;
grados2 = grados2 - 86;
apertura2 = 2;
if (grados2 < 0) {grados2 = 0; apertura2 = 1;}
}

//Enciende o apaga el RELÉ en función de la petición DURANTE 1,5 SEGUNDOS
digitalWrite(PinLED, estadoLED);
digitalWrite(PinLED2, estadoLED2);
delay(200);
servo.write(grados);
servo2.write(grados2);
delay(1500);
estadoLED = HIGH;
estadoLED2 = HIGH;
digitalWrite(PinLED, estadoLED);
digitalWrite(PinLED2, estadoLED2);

// Envía la página HTML de respuesta al cliente
client.println("HTTP/1.1 200 OK");
client.println(""); //IMPORTANTE ESTA LÍNEA DE SEPARACIÓN
client.println("<!DOCTYPE HTML>");
client.println("<meta charset='UTF-8'>");
client.println("<html>");

//Imprime el estado del MOTOR 1
client.print("<center><h1><b>El AIRE del DESPACHO está ahora ");
if(apertura == 1) {
client.print("<font color='red'>CERRADO</font></b></h1><br></center>");
}
if(apertura == 2) {
client.print("<font color='blue'>MEDIO ABIERTO</font></b></h1><br></center>");
}
if(apertura == 3) {
client.print("<font color='green'>ABIERTO</font></b></h1><br></center>");
}

//Se crean botones con estilos para modificar el estado del MOTOR 1
client.println("<center><button type='button' onClick=location.href='/A' style='margin:auto; background-color:green; color:#A9F5A9; padding:5px; border:2px solid black; width:300'> <h1> ABRIR </h1> </button>");
client.println("<button type='button' onClick=location.href='/' style='margin:auto; background-color:blue; color:#A9F5A9; padding:5px; border:2px solid black; width:300'> <h1> ACTUAL </h1> </button>");
client.println("<button type='button' onClick=location.href='/B' style='margin:auto; background-color:red; color:#F6D8CE; padding:5px; border:2px solid black; width:300'> <h1> CERRAR </h1> </button><br><br></center>");

//Imprime el estado del MOTOR 2
client.print("<center><h1><b>El AIRE del DORMITORIO 2 está ahora ");
if(apertura2 == 1) {
client.print("<font color='red'>CERRADO</font></b></h1><br></center>");
}
if(apertura2 == 2) {
client.print("<font color='blue'>MEDIO ABIERTO</font></b></h1><br></center>");
}
if(apertura2 == 3) {
client.print("<font color='green'>ABIERTO</font></b></h1><br></center>");
}

//Se crean botones con estilos para modificar el estado del MOTOR 2
client.println("<center><button type='button' onClick=location.href='/D' style='margin:auto; background-color:green; color:#A9F5A9; padding:5px; border:2px solid black; width:300'> <h1> ABRIR </h1> </button>");
client.println("<button type='button' onClick=location.href='/' style='margin:auto; background-color:blue; color:#A9F5A9; padding:5px; border:2px solid black; width:300'> <h1> ACTUAL </h1> </button>");
client.println("<button type='button' onClick=location.href='/Z' style='margin:auto; background-color:red; color:#F6D8CE; padding:5px; border:2px solid black; width:300'> <h1> CERRAR </h1> </button><br><br></center>");

client.println("</html>");
delay(1);
Serial.println("Petición finalizada"); // Se finaliza la petición al cliente. Se inicaliza la espera de una nueva petición.

}

Esperamos que te haya gustado el proyecto y puedas aportarnos ideas o dudas a través de los comentarios.

Compartir producto
Share on Facebook
Facebook

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *