Sistema de cuidado de plantas automático

Este proyecto de la asignatura Sistemas Empotrados y de Tiempo Real correspondiente al curso 21/22, ha sido realizado por el Grupo 15, cuyos integrantes son:

  • Michele di Fede
  • María Peña Ramos
  • David Santamaría Rubio

Introducción

La idea inicial del proyecto era la de realizar un prototipo de un sistema automático para cuidar plantas, que la única interacción que necesitase con el usuario fuera la de rellenar el tanque de agua cuando se vaciase.

Las características pensadas en un primer momento, eran las de regar automáticamente cuando la planta lo necesitase (controlando el nivel de humedad y temperatura), darle luz a la planta cuando no le llegase luz solar, activar un ventilador para disipar el calor cuando éste fuera demasiado alto, realizar un seguimiento del crecimiento de la planta con el paso de los días y controlar el nivel del tanque de agua para avisar al usuario cuando haya que rellenarlo.

Finalmente, tuvimos que desechar la implementación de alguna de ellas, e incluimos otras que se nos ocurrieron sobre la marcha.

Materiales

  • Arduino UNO
  • Sensor de humedad 1 x 4€
  • Sensor DTH11
  • Sensor ultrasónico
  • Fotoresistor
  • Relé 1 x 1€
  • Bomba de agua 2 x 5€
  • Tubos de riego 1 x 2€
  • Leds
  • Led RGB
  • Resistencias
  • Potenciómetro
  • Pantalla LCD
  • Protoboard
  • Cables 1 x 2€

Presupuesto total = 19 €

Código del proyecto

#include <DHT.h>
#include <LiquidCrystal.h>

 
//Definimos el pin donde se conectan los sensores
#define DHTPIN A0
#define sensorLuz A5
#define proximidad A4

//Dependiendo del tipo de sensor
#define DHTTYPE DHT11
 
// Inicializamos el sensor DHT11
DHT dht(DHTPIN, DHTTYPE);

//Puerto de bomba de agua
int bomba = 9;
//Puerto led riego vacío
int vacio = 10;
//Numero de riegos que aguanta el tanque de agua
int tanque = 3;

//Puerto led bombilla
int luz = 8;
//Umbral minimo de luz
int lum_min = 250;

//Umbral minimo de humedad y temperatura
float hum_min = 30.00;

int contador =  0;
int tiempo;

int nivel_minimo = 8;

int TriggerPin = 7;
int EchoPin = 6;

//Inicializamos pines de pantalla
LiquidCrystal lcd(12,11,5,4,3,2);


int ping(int TriggerPin, int EchoPin) {
  
   long duracion, distancia;
   
   digitalWrite(TriggerPin, LOW);  //para generar un pulso limpio ponemos a LOW 4us
   delayMicroseconds(4);
   digitalWrite(TriggerPin, HIGH);  //generamos Trigger (disparo) de 10us
   delayMicroseconds(10);
   digitalWrite(TriggerPin, LOW);
   duracion = pulseIn(EchoPin, HIGH);  //medimos el tiempo entre pulsos, en microsegundos
   distancia = duracion * 10 / 292/ 2;   //convertimos a distancia, en cm
   return distancia;
}


void setup() {
  Serial.begin(9600); 

// Inicializamos sensor DHT
  dht.begin();
  
//Inicializamos pantalla
  lcd.begin(16, 2);

//Definimos led bombilla como output
   pinMode(luz, OUTPUT);

//Definimos bomba de agua como output
   pinMode(bomba, OUTPUT);

  pinMode(TriggerPin, OUTPUT);

  pinMode(EchoPin, INPUT);
}

void loop() {
  digitalWrite(bomba, HIGH);
  
  // Leemos la humedad relativa
  float h = dht.readHumidity();
  // Leemos la temperatura en grados centígrados
  float t = dht.readTemperature();
  
  // Comprobamos si ha habido algún error en la lectura
  if (isnan(h) || isnan(t))
  {
    Serial.println("Error obteniendo los datos del sensor DHT11");
    return;
  }

//Mostrar humedad y temperatura por pantalla
  lcd.setCursor(0, 0);
  lcd.print("Humedad: ");
  lcd.print(h);
  lcd.print(" %");
  
  lcd.setCursor(0, 1);
  lcd.print("Temp:    ");
  lcd.print(t);
  lcd.print(" C");

//Activación led bombilla
  if(analogRead(sensorLuz) < lum_min)
  {
    digitalWrite(luz, HIGH);
  }
  else
  {
    digitalWrite(luz, LOW);
  }

//Activación bomba de agua
  if((dht.readHumidity() < hum_min))
  {
   digitalWrite(bomba, LOW);
   delay(2000);
   digitalWrite(bomba, HIGH);
   delay(1000);
   lcd.begin(16, 2);
  }

//Comprobar que el bidón sigue con agua
  int cm = ping(TriggerPin, EchoPin);

  if (cm > nivel_minimo) 
  {
    digitalWrite(vacio, HIGH);
  }
  else
  {
    digitalWrite(vacio, LOW);
  }
}

Conexiones y componentes

Imagen del diagrama de conexiones

Video explicativo

Presentación

https://drive.google.com/file/d/1vcSSKpHXP17CSDGoZzQ8OvPZcKROpnMR/view?usp=sharing

También te podría gustar...

Deja una respuesta

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