SISTEMA DE RIEGO AUTOM脕TICO馃尭鈽橈笍馃帇馃

by emedina35 in Circuits > Arduino

973 Views, 1 Favorites, 0 Comments

SISTEMA DE RIEGO AUTOM脕TICO馃尭鈽橈笍馃帇馃

94600d9b-9ae5-4ed4-b697-f7b8f34d280c.jpg
WhatsApp Image 2023-05-27 at 11.31.23 AM.jpeg
WhatsApp Image 2023-05-27 at 11.31.25 AM.jpeg
WhatsApp Image 2023-05-27 at 11.31.26 AM.jpeg

隆Hola!

soy eliana estudiante de dise帽o industrial, hoy te ense帽ar茅 paso a paso como crear un sistema de riego autom谩tico con arduino.

Aqu铆 te dejo un paso a paso de la construcci贸n y dise帽o del circuito para un sistema de riego totalmente funcional, en cada paso encontraras una breve explicaci贸n del c贸digo, una imagen para guiar el circuito, un pdf con el c贸digo y finalmente un video de comprobaci贸n de funcionamiento, al igual que unos videos que te ser谩n de gran ayuda. 隆Mucha suerte!

Canal para entender arduino desde cero (Explicaci贸n como subir un c贸digo, conexiones y m谩s) : https://www.youtube.com/@JohannPerezE


Este circuito lo puedes adaptar a cualquier estructura.


Si tienes alguna pregunta con gusto me la puedes dejar en comentarios y yo la responder茅 lo m谩s pronto posible.

Supplies

Tambi茅n un adaptador de 5 vols para conectar el arduino y un cargador adaptado para el sitema de bomba de agua y rel茅.

Conexi贸n Pantalla Led

El primer paso es comprobar si la pantalla led funciona por medio del c贸digo y circuito que encontramos en esta parte.

Explicaci贸n C贸digo:

1.Primero se debe incluir la librer铆a de "LiquidCrystal" para poder utilizar sus funciones y clases.

2.LiquidCrystal lcd(2, 3 , 4, 5, 6, 7);: Se crea un objeto "lcd" de la clase "LiquidCrystal" y se especifican los pines utilizados para conectar la pantalla LCD al Arduino . Los n煤meros 2, 3, 4 , 5, 6 y 7 representan los pines Arduino que se utilizan para conectar datos y controlar la pantalla LCD.

3.void setup() ... : Esta es la funci贸n de configuraci贸n de Arduino . Se ejecuta una vez durante el inicio del programa y se utiliza para realizar la configuraci贸n inicial .

4.lcd.begin(16, 2 ): Se llama al m茅todo "begin" del objeto "lcd" para iniciar la pantalla LCD . Los par谩metros 16 y 2 indican que la pantalla tiene 16 columnas y 2 filas.

5.void loop() { ... }:  donde se coloca el c贸digo que se ejecutar谩 continuamente .

6.lcd.setCursor(0, 0);:se utiliza para establecer la posici贸n del cursor en la columna 0 y la fila 0 de la pantalla LCD .

7.lcd.print("Hola soy eli");:  se usa para mostrar el texto "Hola soy eli" donde se encuentra actualmente el cursor .

8.lcd.setCursor(0, 1);:: ahora se usa para colocar el cursor en la columna 0 y la l铆nea 1 de la pantalla LCD .

9.lcd.print("****************");:se usa para mostrar una l铆nea de asterisco en la segunda columna de la pantalla.

10.delay(1000);: se introduce una pausa de 1 segundo .

11.lcd.clear();: se borra el contenido de la pantalla LCD.

12.delay(1000);: pausa de 1 segundo antes de comenzar el bucle inicial.


IMPORTANTE: La pantalla led se tiene que soldar con ayuda de un caut铆n y cable de esta帽o ( Es una recomendaci贸n porque al no soldarlo queda inestable) tambi茅n dejar茅 un video recomendado de youtube para que se gui茅n para soldar la pantalla correctamente.

Soldar pantalla LCD: https://youtu.be/nl_UpOZQUOI

Como incluir una librer铆a: https://youtu.be/-RcN3q0sHGI


Finalmente un video de que el c贸digo y el circuito es totalmente funcional.


Conexi贸n Pantalla LCD+ Lectura Sensor DHT11

El segundo paso es comprobar si la pantalla led + el sensor dht11 sirven por medio del c贸digo y circuito que encontramos en esta parte.

Explicaci贸n C贸digo:

1.Incluir las librar铆as

  • LiquidCrystal.h: Esta biblioteca permite controlar pantallas LCD.
  • DHT.h: Esta biblioteca permite interactuar con el sensor DHT11.

2.Definir

  • DHTPIN: identifica el pin (en este caso, el pin 9) al que est谩 conectado el sensor DHT11 .
  • DHTTYPE: especifica el tipo de sensor DHT (en este caso, DHT11).

3.Crear el objeto de la clase LiquidCrystal llamada lcd:

Los n煤meros 2, 3, 4, 5, 6 y 7 en la declaraci贸n LCD (2, 3 , 4, 5, 6) representan los pines LCD conectados al arduino.

4.Crear el objeto de la clase DHT :

dht(DHTPIN, DHTTYPE) inicializa el sensor DHT11 con el pin y el tipo de sensor especificados .

5.void setup() ... : Esta es la funci贸n de configuraci贸n de Arduino . Se ejecuta una vez durante el inicio del programa y se utiliza para realizar la configuraci贸n inicial de los dos objetos creados.

6.En la funci贸n loop(), se realiza la lectura y visualizaci贸n de la temperatura:

  • float temperatura = dht.readTemperature(): Lee la temperatura del sensor DHT11 y la guarda en la variable temperatura.
  • lcd.setCursor(0, 0): Establece el cursor en la columna 0, fila 0 de la pantalla LCD.
  • lcd.print("Temperatura: "): Imprime el texto "Temperatura: " en la pantalla LCD.
  • lcd.print(temperatura): Imprime el valor de temperatura en la pantalla LCD.
  • lcd.print(" C"): Imprime la unidad de temperatura (grados Celsius) en la pantalla LCD.
  • delay(1000): Espera 1 segundo.
  • lcd.clear(): Limpia la pantalla LCD.
  • delay(1000): Espera 1 segundo antes de repetir el bucle.

IMPORTANTE: Revise bien las conexiones y si es posible refuerce las conexiones para que quede estable.





REL脡 Y BOMBA DE AGUA

El tercer paso es comprobar si el rel茅 hace activar la bomba de agua por medio del c贸digo y circuito que encontramos en esta parte.

Explicaci贸n c贸digo:

1.Definici贸n de variable bombaAgua y le asigna el valor 8:

  • Esto indica que la bomba de agua est谩 conectada al pin digital 8 del Arduino.

2.Define dos variables de tipo unsigned long (se usa com煤nmente para almacenar el resultado de la funci贸n millis(), la cual retorna el tiempo que el c贸digo actual ha estado corriendo, en milisegundos):

  • tiempoAnterior: Almacena el tiempo anterior en milisegundos.
  • intervalo: Especifica el intervalo de tiempo en milisegundos.

3. En la funci贸n setup(), se configura el pin de la bomba de agua como una salida:

  • pinMode(bombaAgua, OUTPUT): Configura el pin bombaAgua como una salida para controlar la bomba de agua.

4.En la funci贸n loop(), se realiza el control de la bomba de agua por medio del rel茅:

  • unsigned long tiempoActual = millis(): Obtiene el tiempo actual en milisegundos y lo guarda en la variable tiempoActual.
  • if (tiempoActual - tiempoAnterior >= intervalo): Comprueba si ha pasado el tiempo especificado en intervalo desde la 煤ltima vez que se activ贸 la bomba de agua.
  • Si se cumple la condici贸n, se actualiza tiempoAnterior con el valor de tiempoActual y se ejecutan las siguientes instrucciones:digitalWrite(bombaAgua, !digitalRead(bombaAgua)): Cambia el estado del pin bombaAgua invertido utilizando digitalRead() y digitalWrite().digitalRead(bombaAgua) devuelve el estado actual del pin bombaAgua (HIGH o LOW).
  • ! es el operador de negaci贸n, por lo que !digitalRead(bombaAgua) invertir谩 el estado actual del pin.
  • digitalWrite(bombaAgua, !digitalRead(bombaAgua)) establece el estado del pin bombaAgua con el valor invertido, encendi茅ndolo si estaba apagado y viceversa.


IMPORTANTE: Revise bien las conexiones y si es posible refuerce las conexiones para que quede estable.

Video de como conectar un rel茅 y bomba de agua: https://youtu.be/4KrkhyyxKEY


Nota: en los archivos adjuntos dej茅 un imagen de referencia en la conexi贸n del rel茅.


C脫DIGO FINAL

Conectores.jpeg

El cuarto paso es comprobar si el c贸digo funciona con todo el sistema del circuito armado. (Finalmente son dos conectores los que si tienen que tener habilitados uno para el arduino y otro para la bomba)

Explicaci贸n del c贸digo:

1.Incluir las bibliotecas necesarias (visto anteriormente):

  • LiquidCrystal.h: Esta biblioteca permite controlar pantallas LCD.
  • DHT.h: Esta biblioteca permite interactuar con el sensor DHT11.

2. Definir variables (visto anteriormente):

  • DHTPIN: Especifica el pin al que est谩 conectado el sensor DHT11 = 9
  • DHTTYPE: Especifica el tipo de sensor DHT .
  • RELAY_PIN: Especifica el pin al que est谩 conectado el rel茅 o bomba de riego = 8
  • ACTIVATION_TEMPERATURE: Especifica la temperatura de activaci贸n del riego. Si la temperatura le铆da es igual o superior a este valor, se activa el riego.
  • RIEGO_ACTIVADO: Define un mensaje para indicar que el riego est谩 activado.
  • RIEGO_DESACTIVADO: Define un mensaje para indicar que el riego est谩 desactivado.
  • RIEGO_DURATION: Especifica la duraci贸n del riego en milisegundos (en este caso, 1 minuto).
  • NEXT_READ_DELAY: Especifica el tiempo de espera entre las lecturas de temperatura (en este caso, 6 horas).

3.Crear el objeto de la clase LiquidCrystal llamada lcd:

Los n煤meros 2, 3, 4, 5, 6 y 7 en la declaraci贸n LCD (2, 3 , 4, 5, 6) representan los pines LCD conectados al arduino.

4.Crear el objeto de la clase DHT :

  • dht(DHTPIN, DHTTYPE) inicializa el sensor DHT11 con el pin y el tipo de sensor especificados

5.Declara una variable lastRiegoTime de tipo unsigned long para almacenar el tiempo en milisegundos del 煤ltimo riego realizado.

6.En la funci贸n setup(), se llevan a cabo las configuraciones iniciales:

  • lcd.begin(16, 2): Inicializa la pantalla LCD .
  • dht.begin(): Inicializa el sensor DHT11.
  • pinMode(RELAY_PIN, OUTPUT): Configura el pin RELAY_PIN como una salida para controlar el rel茅 o bomba de riego.
  • digitalWrite(RELAY_PIN, LOW): Asegura que la bomba est茅 apagada al inicio configurando el pin RELAY_PIN en estado bajo (LOW).

7.En la funci贸n loop(), se realiza el control del riego basado en la temperatura le铆da:

  • float temperatura = dht.readTemperature(): Lee la temperatura del sensor DHT11 y la guarda en la variable temperatura.
  • Si la temperatura es igual o superior a la temperatura de activaci贸n (ACTIVATION_TEMPERATURE), se activa el riego:`digitalWrite(RELAY_PIN, HIGH)


NOTA: para el buen funcionamiento del c贸digo primero conectar el arduino antes que la bomba

NOTA: Al ejecutar el c贸digo primero aparece un error en la lectura de la temperatura porque el sensor se demora en leer la temperatura, esperar unos segundos para que empiece a hacer la lectura correcta, 驴Por qu茅 pasa esto? porque el arduino es generico por eso tienden a aparecer esos errores.


IMPORTANTE: dentro de la experimentaci贸n que se hizo en la realizaci贸n de este proyecto se observ贸 que colocar delay() para determinar algunos intervalos de tiempo bota muchas veces errores dentro del funcionamiento, lo que hace que no se cumpla fidedignamente al c贸digo, pero se hay贸 una soluci贸n para ello.

Al utilizar millis() en lugar de la funci贸n delay(), evitas bloquear la ejecuci贸n del programa durante un per铆odo de tiempo determinado. Esto es importante porque, cuando usas delay(), el microcontrolador Arduino no puede realizar ninguna otra tarea mientras espera. En cambio, al utilizar millis() y una l贸gica basada en el tiempo, puedes realizar m煤ltiples tareas o acciones en paralelo.

La Estructura

WhatsApp Image 2023-05-29 at 5.42.08 PM.jpeg
WhatsApp Image 2023-05-29 at 5.42.09 PM.jpeg
WhatsApp Image 2023-05-29 at 5.42.10 PM.jpeg
WhatsApp Image 2023-05-29 at 5.42.10 PM (1).jpeg
WhatsApp Image 2023-05-29 at 5.42.11 PM.jpeg
WhatsApp Image 2023-05-29 at 5.42.12 PM.jpeg
WhatsApp Image 2023-05-29 at 5.42.13 PM.jpeg
WhatsApp Image 2023-05-29 at 5.42.13 PM (1).jpeg

Ten en cuenta que puedes adaptar este sistema a cualquier estructura que se ajuste a tus necesidades, etc

Adjunto algunas fotos de como quedo el circuito, la colocaci贸n de la manguera para distribuir el agua dentro y todos los elementos juntos para que puedas tener una gu铆a de como hacer el tuyo.