//////Robot Movil Conectado a Wi-fi Manipulado con Pagina WEB
//7MIR1
// JEAL, SBA, AFRI, RJTO
//*************************************************************************************
//Inclusion de Librerias---------------------------------------------------------------
#include "DHT.h" //Libreria del Sensor
#include <LiquidCrystal.h> //Libreria de la LCD
#include <WiFi.h> //Libreria del Wi-Fi
#include <WebServer.h> //Libreria Sitio Web
#include <NewPing.h> //Libreria Ultrasonico
//-------------------------------------------------------------------------------------
//Definion de Pines para Sensor de Temperatura
#define DHTPIN 17
#define DHTTYPE DHT22
#define LED_COOL 16 // Pin del LED para temperaturas por debajo de 22°C
#define LED_NORMAL 4 // Pin del LED para temperaturas entre 22°C y 30°C
#define LED_HOT 0 // Pin del LED para temperaturas por encima de 30°C
//-------------------------------------------------------------------------------------
//Declaracion de Pines para Sensor Ultrasonico
const int echo= 26;
const int trig= 27;
int d1;
int s1=(trig, echo);
NewPing sonar (trig, echo, 150);
//---------------------------------------------------------------------------------------
//Declaracion de Pines para Motores y Robot Movil---------------------------------------
int m1d= 12;
int m1i= 13;
int m2d= 2;
int m2i= 15;
//-------------------------------------------------------------------------------------
//Declaracion de Entradas del Robot----------------------------------------------------
int ma= 34;
int adelante= 35;
int atras= 32;
int derecha= 33;
int izquierda= 25;
//-------------------------------------------------------------------------------------
//Variables Locales del Robot----------------------------------------------------------
int lma;
int la;
int lat;
int ld;
int li;
//-------------------------------------------------------------------------------------
//Variables y Funciones de Conexion Inalambrica para DHT22 Y MODO Wi-Fi----------------
DHT dht(DHTPIN, DHTTYPE);
WebServer server(80);
//Pines para la LCD--------------------------------------------------------------------
LiquidCrystal lcd (22,21,5,18,23,19); //pines a conectar la LCD al NODE-MCU
//-------------------------------------------------------------------------------------
//Rutinas mediante métodos-------------------------------------------------------------
void rutinaAdelante();
void rutinaAtras();
void rutinaDerecha();
void rutinaIzquierda();
void ritunaStop ();
//--------------------------------------------------------------------------------------
void setup() {
Serial.begin(115200);
//Conexion Wi-fi
const char* ssid = "Wokwi-GUEST";
const char* password = "";
Serial.println("Desconectamos antes de conectar el WiFi");
WiFi.disconnect();
Serial.print("Conectando a ");
Serial.println(ssid);
//-----------------------------------------------------------------------------------
//Conectamos el esp a la red wifi
WiFi.mode(WIFI_STA);
WiFi.begin(ssid, password);
//-----------------------------------------------------------------------------------
//Intentamos conectarnos a la red
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
//-----------------------------------------------------------------------------------
//Si logramos conectarnos mostramos la ip a la que nos conectamos-------------------
Serial.println("");
Serial.println("WiFi connected");
Serial.println("IP address: ");
Serial.println(WiFi.localIP());
//----------------------------------------------------------------------------------
//Si entramos a la raiz mostramos las opciones--------------------------------------
server.on("/", []() {
String content="";
content += "<html>";
content += "<div><a href=\"encender\">Encender</a></div>";
content += "<div><a href=\"apagar\">Apagar</a></div>";
content += "</html>";
server.send(200, "text/html", content);
});
//Activacion del Server-------------------------------------------------------------
server.begin();
//----------------------------------------------------------------------------------
//Parametros de la LCD
lcd.begin(0*27, 20 ,4);
//----------------------------------------------------------------------------------
//Impresion de Datos del DHT22--------------------------------------------------------
Serial.println(F("DHTxx test!"));
//-------------------------------------------------------------------------------------
//Inicializacion de DHT22--------------------------------------------------------------
dht.begin();
//-------------------------------------------------------------------------------------
//Salidas del Sensor Ultrasonico-----------------------------------------------------
pinMode (trig, OUTPUT);
pinMode (echo, INPUT);
//Salidas para el Sensor de Temperatura-----------------------------------------------
pinMode(LED_COOL, OUTPUT);
pinMode(LED_NORMAL, OUTPUT);
pinMode(LED_HOT, OUTPUT);
//----------------------------------------------------------------------------------
//Salidas de Motores de Robot Movil---------------------------------------------------
pinMode(m1d, OUTPUT);
pinMode(m1i, OUTPUT);
pinMode(m2d, OUTPUT);
pinMode(m2i, OUTPUT);
//------------------------------------------------------------------------------------
//Entradas de Funcionamiento del Robot------------------------------------------------
pinMode(ma, INPUT);
pinMode(adelante, INPUT);
pinMode(atras, INPUT);
pinMode(derecha, INPUT);
pinMode(izquierda, INPUT);
}
void loop() {
//SERVER DE LA CONEXION CON WI-FI---------------------------------------------------
server.handleClient();
delay(100);
//----------------------------------------------------------------------------------
// Espera unos segundos entre mediciones del DHT22.---------------------------------
delay(2000);
//----------------------------------------------------------------------------------
// Leer la humedad y temperatura----------------------------------------------------
float h = dht.readHumidity();
float t = dht.readTemperature();
//----------------------------------------------------------------------------------
// Comprobar si la lectura falló y salir temprano (para intentar de nuevo)----------
if (isnan(h) || isnan(t)) {
Serial.println(F("¡Fallo al leer del sensor DHT!"));
return;
}
//-----------------------------------------------------------------------------------
//Monitor Serial para el Sensor------------------------------------------------------
Serial.print(F("Humedad: "));
Serial.print(h);
Serial.print(F("% Temperatura: "));
Serial.print(t);
Serial.println(F("°C"));
//-----------------------------------------------------------------------------------
// Enciende los LEDs según la temperatura--------------------------------------------
if (t < 22) {
digitalWrite(LED_COOL, HIGH);
digitalWrite(LED_NORMAL, LOW);
digitalWrite(LED_HOT, LOW);
} else if (t >= 22 && t <= 30) {
digitalWrite(LED_COOL, LOW);
digitalWrite(LED_NORMAL, HIGH);
digitalWrite(LED_HOT, LOW);
} else {
digitalWrite(LED_COOL, LOW);
digitalWrite(LED_NORMAL, LOW);
digitalWrite(LED_HOT, HIGH);
}
//------------------------------------------------------------------------------------
//Lecturas de las Variables Locales----------------------------------------------------
rutinaStop();
lma=digitalRead (ma);
la=digitalRead (adelante);
lat=digitalRead (atras);
ld=digitalRead (derecha);
li=digitalRead (izquierda);
//***************************Si MA =1 --> manual*************************************//
//***************************Si MA =0 --> automatico*********************************//
//Rutina Manual-----------------------------------------------------------------------
if(s1 > 15){
if (lma == HIGH)
{
if (la == HIGH)
rutinaAdelante();
delay (100);
if (lat == HIGH)
rutinaAtras();
delay (130);
if (ld == HIGH)
rutinaDerecha();
delay (150);
if (li == HIGH)
rutinaIzquierda();
delay (170);
}
else (s1<=15); {
rutinaStop();
}
}
//-------------------------------------------------------------------------------------
//Rutina Automatica del Robot Movil---------------------------------------------------
if (lma == LOW){
//Adelante
rutinaAdelante();
delay (2000);
//Atras
rutinaAtras();
delay (2000);
//Derecha
rutinaDerecha();
delay (2000);
//Izquierda
rutinaIzquierda();
delay (2000);
}
//------------------------------------------------------------------------------------
//Mensajes en LCD--------------------------------------------------------------------
lcd.setCursor (0,0);
lcd.print ("-Robot Movil WiFi-");
lcd.setCursor (0,1);
lcd.print ("Temp:");
lcd.setCursor (6,1);
lcd.print (t);
lcd.setCursor (20,0);
lcd.print ("Humedad:");
lcd.setCursor (28,0);
lcd.print (h);
lcd.setCursor (20,1);
lcd.print ("Trayec:");
//------------------------------------------------------------------------------------
//Valor de Sensor Ultrasonico---------------------------------------------------------
d1 = sonar.ping_cm();
//------------------------------------------------------------------------------------
}
//**************************************************************************************
//Rutinas del Robot Movil (Funciones, metodos)------------------------------------------
void rutinaAdelante()
{
lcd.setCursor (28,1);
lcd.print ("Adelante ");
digitalWrite (m1d, HIGH);
digitalWrite (m1i, LOW);
digitalWrite (m2d, HIGH);
digitalWrite (m2i, LOW);
}
void rutinaAtras()
{
lcd.setCursor (28,1);
lcd.print ("Atras ");
digitalWrite (m1d, LOW);
digitalWrite (m1i, HIGH);
digitalWrite (m2d, LOW);
digitalWrite (m2i, HIGH);
}
void rutinaDerecha()
{
lcd.setCursor (28,1);
lcd.print ("Derecha ");
digitalWrite (m1d, HIGH);
digitalWrite (m1i, LOW);
digitalWrite (m2d, LOW);
digitalWrite (m2i, HIGH);
}
void rutinaIzquierda()
{
lcd.setCursor (28,1);
lcd.print ("Izquierda");
digitalWrite (m1d, LOW);
digitalWrite (m1i, HIGH);
digitalWrite (m2d, HIGH);
digitalWrite (m2i, LOW);
}
void rutinaStop()
{
//Edo. Inicial
lcd.setCursor (28,1);
lcd.print ("En espera");
digitalWrite (m1d, LOW);
digitalWrite (m1i, LOW);
digitalWrite (m2d, LOW);
digitalWrite (m2i, LOW);
}