// DESARROLLO DE CONTROL DE MOTORES PARA PERSIANAS CON PUENTE H AUTOMATIZACION DE INVERNADERO
// Universidad Politecnica de Texcoco en colaboracion con la Universidad Autonoma de Chapingo
// JEAL, IRG, JARO
// 9MIR1
// Ingenieria Robotica
// ASESORES: Derlis Hernandez Lara (Parte Electronica, UPTex)
// Roberto Rivera del Rio (Condiciones Agronomicas, UACh)
// --------------------------------------------------------------------------------------------------
// INCLUSION DE LIBRERIAS
#include <WiFi.h> // Permite la activacion del modulo Wi-Fi del ESP32
// --------------------------------------------------------------------------------------------------
// Configuración Wi-Fi
const char* ssid = "Nombre de tu red"; // Nombre de la red Wi-Fi
const char* password = "Contraseña de tu red"; // Contraseña de la red Wi-Fi
// -------------------------------------------------------------------------------------------------
// Pines del puente H L293D conectados al ESP32 del motor 1
const int motorPin1 = 23; // IN1 del L293D
const int motorPin2 = 22; // IN2 del L293D
const int enablePin1 = 21; // Enable del motor 1
// Pines del puente H L293D conectados al ESP32 del motor 2
const int motorPin3 = 19; // IN1 del L293D
const int motorPin4 = 18; // IN2 del L293D
const int enablePin2 = 5; // Enable del motor 2
// Pines del puente H L293D conectados al ESP32 del motor 3
const int motorPin5 = 17; // IN1 del L293D
const int motorPin6 = 16; // IN2 del L293D
const int enablePin3 = 4; // Enable del motor 3
// Pines del puente H L293D conectados al ESP32 del motor 4
const int motorPin7 = 0; // IN1 del L293D
const int motorPin8 = 2; // IN2 del L293D
const int enablePin4 = 15; // Enable del motor 4
// Pines del puente H L293D conectados al ESP32 del motor 5
const int motorPin9 = 32; // IN1 del L293D
const int motorPin10 = 33; // IN2 del L293D
const int enablePin5 = 25; // Enable del motor 5
// ------------------------------------------------------------------------------------------------
// Variables para el control del Motor 1
bool motor1On = false; // Estado de encendido/apagado del motor
bool motorDirection1 = false; // Dirección del motor (false=adelante, true=atrás)
// Variables para el control del Motor 2
bool motor2On = false; // Estado de encendido/apagado del motor
bool motorDirection2 = false; // Dirección del motor (false=adelante, true=atrás)
// Variables para el control del Motor 3
bool motor3On = false; // Estado de encendido/apagado del motor
bool motorDirection3 = false; // Dirección del motor (false=adelante, true=atrás)
// Variables para el control del Motor 4
bool motor4On = false; // Estado de encendido/apagado del motor
bool motorDirection4 = false; // Dirección del motor (false=adelante, true=atrás)
// Variables para el control del Motor 5
bool motor5On = false; // Estado de encendido/apagado del motor
bool motorDirection5 = false; // Dirección del motor (false=adelante, true=atrás)
// -----------------------------------------------------------------------------------------------
// Configuración del servidor web
WiFiServer server(80);
// -----------------------------------------------------------------------------------------------
// Asignacion de Pines y Salidas del Sistema
void setup() {
// Configurar los pines del motor 1 como salida
pinMode(motorPin1, OUTPUT);
pinMode(motorPin2, OUTPUT);
pinMode(enablePin1, OUTPUT);
// Configurar los pines del motor 2 como salida
pinMode(motorPin3, OUTPUT);
pinMode(motorPin4, OUTPUT);
pinMode(enablePin2, OUTPUT);
// Configurar los pines del motor 3 como salida
pinMode(motorPin5, OUTPUT);
pinMode(motorPin6, OUTPUT);
pinMode(enablePin3, OUTPUT);
// Configurar los pines del motor 4 como salida
pinMode(motorPin7, OUTPUT);
pinMode(motorPin8, OUTPUT);
pinMode(enablePin4, OUTPUT);
// Configurar los pines del motor 5 como salida
pinMode(motorPin9, OUTPUT);
pinMode(motorPin10, OUTPUT);
pinMode(enablePin5, OUTPUT);
// Configuracion de Arreglo de motores para apagado
// Configurar el motor 1 apagado inicialmente
digitalWrite(enablePin1, LOW);
// Configurar el motor 2 apagado inicialmente
digitalWrite(enablePin2, LOW);
// Configurar el motor 3 apagado inicialmente
digitalWrite(enablePin3, LOW);
// Configurar el motor 4 apagado inicialmente
digitalWrite(enablePin4, LOW);
// Configurar el motor 5 apagado inicialmente
digitalWrite(enablePin5, LOW);
// Iniciar la conexión Wi-Fi
Serial.begin(115200);
WiFi.begin(ssid, password);
Serial.print("Conectando a Wi-Fi...");
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
Serial.println("\nConectado a Wi-Fi");
Serial.print("Dirección IP: ");
Serial.println(WiFi.localIP());
// Iniciar el servidor
server.begin();
}
// ---------------------------------------------------------------------------------------
// Funcionamiento del Sistema
void loop() {
// Espera de cliente
WiFiClient client = server.available();
if (client) {
Serial.println("Cliente conectado");
String request = client.readStringUntil('\r');
client.flush();
// -------------------------------------------------------------------------------------
// Comprobacion de solicitudes de los estados de los motores en la Pagina
// Comprobar solicitud y ajustar el estado del motor 1
if (request.indexOf("/on1") != -1) {
motor1On = true;
digitalWrite(enablePin1, HIGH);
} else if (request.indexOf("/off1") != -1) {
motor1On = false;
digitalWrite(enablePin1, LOW);
} else if (request.indexOf("/forward1") != -1) {
motorDirection1 = false;
} else if (request.indexOf("/reverse1") != -1) {
motorDirection1 = true;
}
// Comprobar solicitud y ajustar el estado del motor 2
if (request.indexOf("/on2") != -1) {
motor2On = true;
digitalWrite(enablePin2, HIGH);
} else if (request.indexOf("/off2") != -1) {
motor2On = false;
digitalWrite(enablePin2, LOW);
} else if (request.indexOf("/forward2") != -1) {
motorDirection2 = false;
} else if (request.indexOf("/reverse2") != -1) {
motorDirection2 = true;
}
// Comprobar solicitud y ajustar el estado del motor 3
if (request.indexOf("/on3") != -1) {
motor3On = true;
digitalWrite(enablePin3, HIGH);
} else if (request.indexOf("/off3") != -1) {
motor3On = false;
digitalWrite(enablePin3, LOW);
} else if (request.indexOf("/forward3") != -1) {
motorDirection3 = false;
} else if (request.indexOf("/reverse3") != -1) {
motorDirection3 = true;
}
// Comprobar solicitud y ajustar el estado del motor 4
if (request.indexOf("/on4") != -1) {
motor4On = true;
digitalWrite(enablePin4, HIGH);
} else if (request.indexOf("/off4") != -1) {
motor4On = false;
digitalWrite(enablePin4, LOW);
} else if (request.indexOf("/forward4") != -1) {
motorDirection4 = false;
} else if (request.indexOf("/reverse4") != -1) {
motorDirection4 = true;
}
// Comprobar solicitud y ajustar el estado del motor 5
if (request.indexOf("/on5") != -1) {
motor4On = true;
digitalWrite(enablePin5, HIGH);
} else if (request.indexOf("/off5") != -1) {
motor4On = false;
digitalWrite(enablePin5, LOW);
} else if (request.indexOf("/forward5") != -1) {
motorDirection5 = false;
} else if (request.indexOf("/reverse5") != -1) {
motorDirection5 = true;
}
// ---------------------------------------------------------------------------------------
// Control del motor 1 según dirección
if (motor1On) {
if (motorDirection1) {
digitalWrite(motorPin1, LOW);
digitalWrite(motorPin2, HIGH);
} else {
digitalWrite(motorPin1, HIGH);
digitalWrite(motorPin2, LOW);
}
} else {
digitalWrite(motorPin1, LOW);
digitalWrite(motorPin2, LOW);
}
// Control del motor 2 según dirección
if (motor2On) {
if (motorDirection2) {
digitalWrite(motorPin3, LOW);
digitalWrite(motorPin4, HIGH);
} else {
digitalWrite(motorPin3, HIGH);
digitalWrite(motorPin4, LOW);
}
} else {
digitalWrite(motorPin3, LOW);
digitalWrite(motorPin4, LOW);
}
// Control del motor 3 según dirección
if (motor3On) {
if (motorDirection3) {
digitalWrite(motorPin5, LOW);
digitalWrite(motorPin6, HIGH);
} else {
digitalWrite(motorPin5, HIGH);
digitalWrite(motorPin6, LOW);
}
} else {
digitalWrite(motorPin5, LOW);
digitalWrite(motorPin6, LOW);
}
// Control del motor 4 según dirección
if (motor4On) {
if (motorDirection4) {
digitalWrite(motorPin7, LOW);
digitalWrite(motorPin8, HIGH);
} else {
digitalWrite(motorPin7, HIGH);
digitalWrite(motorPin8, LOW);
}
} else {
digitalWrite(motorPin7, LOW);
digitalWrite(motorPin8, LOW);
}
// Control del motor 5 según dirección
if (motor5On) {
if (motorDirection5) {
digitalWrite(motorPin9, LOW);
digitalWrite(motorPin10, HIGH);
} else {
digitalWrite(motorPin9, HIGH);
digitalWrite(motorPin10, LOW);
}
} else {
digitalWrite(motorPin9, LOW);
digitalWrite(motorPin10, LOW);
}
// --------------------------------------------------------------------------------------------------
// Generación de la página web
client.println("HTTP/1.1 200 OK");
client.println("Content-Type: text/html");
client.println();
client.println("<!DOCTYPE HTML>");
client.println("<html>");
client.println("<head><title>Control del Motores</title></head>");
client.println("<body>");
// -----------------------------------------------------------------------------------
// Diseño de manipulador de Motor 1
client.println("<h1>Control del Motor 1</h1>");
client.println("<p><a href=\"/on1\"><button>Encender 1</button></a>");
client.println("<a href=\"/off1\"><button>Apagar 1</button></a></p>");
client.println("<p><a href=\"/forward1\"><button>Adelante 1</button></a>");
client.println("<a href=\"/reverse1\"><button>Reversa 1</button></a></p>");
client.println("<p>Estado del Motor: " + String(motor1On ? "Encendido" : "Apagado") + "</p>");
client.println("<p>Sentido del Motor: " + String(motorDirection1 ? "Reversa" : "Adelante") + "</p>");
// -----------------------------------------------------------------------------------
// Diseño de manipulador de Motor 2
client.println("<h1>Control del Motor 2</h1>");
client.println("<p><a href=\"/on2\"><button>Encender 2</button></a>");
client.println("<a href=\"/off2\"><button>Apagar 2</button></a></p>");
client.println("<p><a href=\"/forward2\"><button>Adelante 2</button></a>");
client.println("<a href=\"/reverse2\"><button>Reversa 2</button></a></p>");
client.println("<p>Estado del Motor: " + String(motor2On ? "Encendido" : "Apagado") + "</p>");
client.println("<p>Sentido del Motor " + String(motorDirection2 ? "Reversa" : "Adelante") + "</p>");
// -----------------------------------------------------------------------------------
// Diseño de manipulador de Motor 3
client.println("<h1>Control del Motor 3</h1>");
client.println("<p><a href=\"/on3\"><button>Encender 3</button></a>");
client.println("<a href=\"/off3\"><button>Apagar 3</button></a></p>");
client.println("<p><a href=\"/forward3\"><button>Adelante 3</button></a>");
client.println("<a href=\"/reverse3\"><button>Reversa 3</button></a></p>");
client.println("<p>Estado del Motor: " + String(motor3On ? "Encendido" : "Apagado") + "</p>");
client.println("<p>Sentido del Motor: " + String(motorDirection3 ? "Reversa" : "Adelante") + "</p>");
// -----------------------------------------------------------------------------------
// Diseño de manipulador de Motor 4
client.println("<h1>Control del Motor 4</h1>");
client.println("<p><a href=\"/on4\"><button>Encender 4</button></a>");
client.println("<a href=\"/off4\"><button>Apagar 4</button></a></p>");
client.println("<p><a href=\"/forward4\"><button>Adelante 4</button></a>");
client.println("<a href=\"/reverse4\"><button>Reversa 4</button></a></p>");
client.println("<p>Estado del Motor: " + String(motor4On ? "Encendido" : "Apagado") + "</p>");
client.println("<p>Sentido del Motor: " + String(motorDirection4 ? "Reversa" : "Adelante") + "</p>");
// -----------------------------------------------------------------------------------
// Diseño de manipulador de Motor 5
client.println("<h1>Control del Motor 5</h1>");
client.println("<p><a href=\"/on5\"><button>Encender 5</button></a>");
client.println("<a href=\"/off5\"><button>Apagar 5</button></a></p>");
client.println("<p><a href=\"/forward5\"><button>Adelante 5</button></a>");
client.println("<a href=\"/reverse5\"><button>Reversa 5</button></a></p>");
client.println("<p>Estado del Motor: " + String(motor5On ? "Encendido" : "Apagado") + "</p>");
client.println("<p>Sentido del Motor: " + String(motorDirection5 ? "Reversa" : "Adelante") + "</p>");
client.println("</body>");
client.println("</html>");
delay(100);
client.stop();
Serial.println("Cliente desconectado");
}
}