Planta Inteligente
Integrantes
- Sergio Cancela Roel
- Aarón Salinero Valencia
- Daniel González Méndez
Descripción del proyecto
La «Planta Inteligente» es un proyecto innovador que combina la tecnología de Arduino con la potencia de la nube para ofrecer un sistema de cuidado de plantas avanzado y automatizado. Este proyecto permite a los usuarios monitorear y controlar de forma remota el entorno de sus plantas domésticas a través de una conexión WiFi.
La clave de este sistema es la utilización de Arduino Cloud, que permite la conexión segura entre el dispositivo y la nube, facilitando así el monitoreo y control remoto desde cualquier lugar del mundo a través de una aplicación móvil. Los usuarios pueden acceder a una variedad de datos sobre el estado de su planta, como la humedad de la tierra, la temperatura ambiente, la humedad ambiente, entre otros.
Además del monitoreo, la «Planta Inteligente» ofrece la capacidad de regar la planta de forma automática cuando la humedad de la tierra está por debajo de cierto umbral. Utilizando la misma conexión WiFi, los usuarios pueden activar el riego de forma manual a través de la aplicación móvil.
En resumen, la «Planta Inteligente» ofrece una solución completa para el cuidado de plantas domésticas, permitiendo a los usuarios mantener sus plantas saludables y felices con la ayuda de la tecnología.
Hardware
- Placa ESP32: La placa ESP32 es el cerebro del sistema. Se encarga de la conexión WiFi y de la comunicación con la nube a través de Arduino Cloud. Además, controla y coordina el funcionamiento de todos los demás componentes.
2. Bomba de Agua: La bomba de agua se encarga de suministrar agua a la planta cuando es necesario. Es activada por el sistema en función de los niveles de humedad del suelo detectados por el sensor de humedad capacitivo.
3. Relé de 4 vías: El relé de 4 vías se utiliza para controlar la activación y desactivación de la bomba de agua. Permite al sistema controlar el flujo de agua de manera precisa y eficiente.
- Sensor de Humedad Capacitivo: El sensor de humedad capacitivo mide el nivel de humedad del suelo en la maceta de la planta. Esta información es utilizada por el sistema para determinar cuándo es necesario regar la planta.
- Sensor DHT11: El sensor DHT11 mide la temperatura y la humedad del aire en el entorno cercano a la planta. Proporciona datos importantes para garantizar un entorno óptimo para el crecimiento de la planta.
- Sensor de Ultrasonidos: El sensor de ultrasonidos se utiliza para medir el nivel de agua en un depósito conectado a la bomba. Esto permite al sistema saber cuándo es necesario rellenar el depósito de agua.
Coste materiales
Software
Para la implementación del proyecto «Planta Inteligente», hemos utilizado Arduino Cloud como plataforma de conexión y gestión remota. Arduino Cloud es un servicio en la nube proporcionado por Arduino que permite la conexión segura entre dispositivos Arduino y la nube, facilitando así el monitoreo y control remoto de los mismos.
En nuestro proyecto, Arduino Cloud juega un papel fundamental al permitirnos:
- Conexión Remota: Utilizamos Arduino Cloud para establecer una conexión segura entre la placa ESP32 y la nube. Esto nos permite acceder al dispositivo desde cualquier lugar a través de una conexión a Internet.
- Gestión de Datos: Arduino Cloud nos proporciona una plataforma centralizada para el envío, recepción y almacenamiento de datos. Esto nos permite monitorear en tiempo real diferentes parámetros ambientales, como la humedad del suelo, la temperatura y la exposición a la luz solar.
- Control Remoto: A través de Arduino Cloud, podemos enviar comandos al dispositivo para controlar el riego de la planta de forma remota. Esto nos permite activar el riego manualmente desde cualquier lugar a través de una aplicación móvil.
Código
// Incluye la librería para las propiedades de la cosa en la nube de Arduino IoT
#include "thingProperties.h"
// Incluye las librerías necesarias para el sensor DHT y el sensor de ultrasonido
#include <Wire.h>
#include <Adafruit_Sensor.h>
#include <DHT.h>
// Define el pin al que está conectado el sensor DHT y el tipo de sensor DHT
#define DHTPIN 25
#define DHTTYPE DHT11
// Crea una instancia del objeto DHT
DHT dht(DHTPIN, DHTTYPE);
// Define los pines Trigger y Echo del sensor de ultrasonido
const int Trigger = 19;
const int Echo = 18;
void setup() {
// Inicia la comunicación serial a 9600 baudios
Serial.begin(9600);
// Configura la resolución del conversor analógico a 10 bits
analogReadResolution(10);
// Configura los pines Trigger y Echo del sensor de ultrasonido
pinMode(Trigger, OUTPUT);
pinMode(Echo, INPUT);
// Inicia el sensor DHT
dht.begin();
// Configura el pin 4 como salida para el zumbador
pinMode(4, OUTPUT);
// Espera 1.5 segundos
delay(1500);
// Inicia las propiedades de la nube
initProperties();
// Inicia la conexión con la nube de Arduino IoT
ArduinoCloud.begin(ArduinoIoTPreferredConnection);
// Configura el nivel de mensajes de depuración
setDebugMessageLevel(2);
// Imprime información de depuración en el puerto serial
ArduinoCloud.printDebugInfo();
}
void loop() {
// Actualiza las variables de la nube
ArduinoCloud.update();
// Lee el valor analógico del sensor de humedad del suelo
int analogValue = analogRead(35);
// Asigna el valor de humedad del suelo
humedad = analogValue;
// Convierte el valor de humedad del suelo a un porcentaje
porcHumedad = map(analogValue, 650, 250, 0, 100);
// Asegura que el porcentaje de humedad esté en el rango [0, 100]
if (porcHumedad <= 0) {
porcHumedad = 0;
}
if (porcHumedad >= 100) {
porcHumedad = 100;
}
// Establece el estado de la variable 'bajaHum' según el porcentaje de humedad
bajaHum = porcHumedad < 30;
// Activa el zumbador si la humedad del suelo es muy baja
if (porcHumedad < 25) {
digitalWrite(4, HIGH);
delay(733);
digitalWrite(4, LOW);
delay(2000);
}
// Lee la temperatura y la humedad del aire
float temperatureValue = dht.readTemperature();
lar = temperatureValue;
humedadAire = dht.readHumidity();
// Realiza la medición de la distancia con el sensor de ultrasonido
long t;
long d;
digitalWrite(Trigger, HIGH);
delayMicroseconds(10);
digitalWrite(Trigger, LOW);
t = pulseIn(Echo, HIGH);
d = t / 59;
// Asigna la distancia medida
distancia = d;
// Convierte la distancia a un porcentaje de llenado del depósito
deposito = map(distancia, 15, 8, 0, 100);
// Asegura que el porcentaje de llenado del depósito esté en el rango [0, 100]
if (deposito <= 0) {
deposito = 0;
}
if (deposito >= 100) {
deposito = 100;
}
// Establece el estado de la variable 'bajoDeposito' según el porcentaje de llenado del depósito
bajoDeposito = deposito <= 20;
// Imprime la distancia medida en centímetros
Serial.print("Distancia: ");
Serial.print(d);
Serial.print("cm");
Serial.println();
}
Video demostración
Aclaración: como la planta estaba húmeda, acoplamos la lógica para que regase si el sensor de humedad estaba al aire.