Problemas con proyecto de control de riego

Hace unos meses empecé con este proyecto, pero debido a la escuela tuve que darle una pausa y así también conseguí el material que me hacía falta. Hace unos meses lo probaba y funconaba bien este control de riego, en el cual uso 3 electrovalvulas, una bomba, 4 reles (uno por valvula y otro para la bomba), un reloj (DS3231), y el arduino Uno R4.

#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x27,16,2);
#include <TimeAlarms.h>
#include <Time.h>
#include <TimeLib.h>
#include <DS1307RTC.h> 
#define bomba 5
#define btn1 2
#define btn2 3
#define btn3 4
// introduce segundos de riego 1-59
int TR=20; //TIEMPO DE RETRASO
void setup() {
  lcd.init();
  lcd.backlight();
 lcd.setCursor(0, 0);
lcd.print("Hora:");
Serial.begin(9600);
 
  // Pines de entrada para los botones de prueba
  pinMode(btn1, INPUT);
  pinMode(btn2,INPUT);
  pinMode(btn3, INPUT);

  //Pines de salida a los relevadores
  pinMode(bomba,OUTPUT);
  digitalWrite(bomba, 1);
   pinMode(8, OUTPUT);
  digitalWrite(8, 1);
  pinMode(7,OUTPUT);
  digitalWrite(7, 1);
 pinMode(6,OUTPUT);
  digitalWrite(6, 1);

  // Set time fija el horario inicial del reloj (HH:MM:SS:DD:MM:YY)  sólo una vez
 setTime(10,29,0,10,1,19);
  RTC.set(now());
  
  setSyncProvider(RTC.get);
  if (timeStatus() != timeSet)
    Serial.println("Fallo de RTC");

  else
   Serial.println("Sincronizado con RTC");
  // Crear las alarmas (HH:MM:SS:FUNCIÓN)
  Alarm.alarmRepeat(10, 30, 0, EV1ON);  
  Alarm.alarmRepeat(10, 30, TR, EV1OFF);  
  Alarm.alarmRepeat(10, 33, 0, EV1ON);  
  Alarm.alarmRepeat(10, 33, TR, EV1OFF);  
  Alarm.alarmRepeat(10, 36, 0, EV1ON);  
  Alarm.alarmRepeat(10, 36, TR, EV1OFF);
  
  Alarm.alarmRepeat(10, 31, 0, EV2ON);  
  Alarm.alarmRepeat(10, 31, TR, EV2OFF);  
  Alarm.alarmRepeat(10, 34, 0, EV2ON);  
  Alarm.alarmRepeat(10, 34, TR, EV2OFF);  
  Alarm.alarmRepeat(10, 37, 0, EV2ON);  
  Alarm.alarmRepeat(10, 37, TR, EV2OFF);
     
  Alarm.alarmRepeat(10, 32, 0, EV3ON);  
  Alarm.alarmRepeat(10, 32, TR, EV3OFF);  
  Alarm.alarmRepeat(10, 35, 0, EV3ON);  
  Alarm.alarmRepeat(10, 35, TR, EV3OFF);  
  Alarm.alarmRepeat(10, 38, 0, EV3ON);  
  Alarm.alarmRepeat(10, 38, TR, EV3OFF);
   
}
 
void loop() {
  // Mostrar el reloj en el monitor serial
  digitalClockDisplay();
  LCDClockDisplay();
  
 
  // Esperar 1 segundo y procesar las Alarmas mientras tanto...
  // El metodo Alarm.delay() procesa en el fondo las alarmas y llamara a las funciones indicadas
  Alarm.delay(1000);

  int st1= digitalRead(btn1);
  int st2= digitalRead(btn2);
  int st3= digitalRead(btn3);
Serial.println(st1);
Serial.println(st2);
Serial.println(st3);

if(st1==1){EV1ON();delay(20000);EV1OFF();}
if(st2==1){EV2ON();delay(20000);EV2OFF();}
if(st3==1){EV3ON(); delay(20000);EV3OFF();}
}
 
//Encendido electroválvula 1
void EV1ON()
{
  digitalWrite(8, LOW);
  Serial.println("EV Pin8 ON");
  digitalWrite(bomba, LOW);
}
 //Apagado electroválvula 1
void EV1OFF()
{
  digitalWrite(bomba, HIGH);
  Serial.println("EV Pin8 OFF");
  digitalWrite(8, HIGH);
  }
 
void EV2ON()
{
digitalWrite(7, LOW);
delay(1000);
Serial.println("EV Pin7 ON");
  digitalWrite(bomba, LOW);
}
 
void EV2OFF()
{digitalWrite(bomba, HIGH);
delay(1000);
  Serial.println("EV Pin7 OFF");
  digitalWrite(7, HIGH);
}

 void EV3ON()
{digitalWrite(6, LOW);
 Serial.println("EV Pin6 ON");
    digitalWrite(bomba, LOW);
}
 void EV3OFF()
{digitalWrite(bomba, HIGH);
delay(1000);
  Serial.println("EV Pin6 OFF");
  digitalWrite(6, HIGH);
  }
 
//   Funciones para la impresión de la hora
void digitalClockDisplay() {
  Serial.print(hour());
  printDigits(minute());
  printDigits(second());
  Serial.println();
}
 
void printDigits(int digits) {
  Serial.print(":");
  if (digits < 10)
    Serial.print('0');
  Serial.print(digits);
}

  void printDigitsLCD(int digits) {
  lcd.print(":");
  if (digits < 10)
    lcd.print('0');
  lcd.print(digits);
}


void LCDClockDisplay(){
  // digital clock display of the time
  lcd.setCursor(0, 1);
  lcd.print(hour());
  printDigitsLCD(minute());
  printDigitsLCD(second());
  
  }

Ahora tengo dos problemas, uno es que la LCD no muestra la fecha ni a hora, en concreto solo muestra unos cuadros negros.
Y mi segundo problema, es que se supone que las tres electrovalvulas encenderan en 3 horas diferentes del dia cada una pero con una diferencia de un minuto, pero al hacer el proceso de las 3 electrovalvulas inmediatamente hace un cuarto proceso para la primera electrovalula, encendiendola a ella y a la bomba, quisiera saber si me podrian ayudar en decirme o aconsejarme que podria hacer en este caso, gracias.


este es el error de que no se ve la fecha ni hora

He trasladado su tema de una categoría de idioma inglés del foro a la categoría International > Español @isai_hg06.

En adelante por favor usar la categoría apropiada a la lengua en que queráis publicar. Esto es importante para el uso responsable del foro, y esta explicado aquí la guía "How to get the best out of this forum".
Este guía contiene mucha información útil. Por favor leer.

De antemano, muchas gracias por cooperar.

Según la documentación, no veo que sea compatible con Arduino Uno.
https://reference.arduino.cc/reference/en/libraries/liquidcrystal-i2c/

Disculpa, pero en el link que enviaste, en su información dice que si es compatible con Arduino Uno

Hi,
Aqui para que sea compatible el lcd debe de tener el I2C Display Driver Serial Interface Adapter. Tambien debes de estar seguro de que tienes el address correcto del I2C del LCD. Algunos vienen con el address de 0x3FH o 0x27H. Si no la sabes entonces corre el programa I2C scanner para que este te diga los address de los devices conectados al I2C. Tambien puedes correr el programa lcd_I2c - Hello World que esta en los ejmplos. Esto te verificara si tienes el I2c instalado bien.

Muchachos, si dice que el proyecto le funcionaba bien, es claro que no es problema de bibliotecas ni direcciones y hasta arriesgaría que tampoco es de código.
Seguramente es un problema de hardware.

@isai_hg06 En la foto se aprecia algo extraño en el display, justo entre tus dedos.
¿Ese display se mojó o solo tiene suciedad en el vidrio?

Ese display teno entendido que le cayó algo de suciedad, pero es que tengo otro segundo display igual que el de la foto pero nuevo, y presenta el mismo problema

Carga el ejemplo Hello World de la librería LiquidCrystal_I2C para comprobar si funciona y descartar problema en el código (por las dudas).

¿Revisaste bien el cableado?

Como dice @MaximoEsfuerzo y no me gusta respetir lo que otro dice, concentrate en probar las cosas alejado de tu código principal. Si funcionaba debe funcionar.
El segundo problema requiere otro análisis.
No puede ser que ahora haga 4 cosas y antes hiciera 3. O no te diste cuenta o siempre hizo 4.

Hi,
Otra pregunta como tienes alambrado el LCD. Usa un bread board para las conecciones?

Gracias por su ayuda, al final lo que hice fue comprar otro RTC y continúe con el proyecto pero ahora lo armé en un Arduino Uno R3 y ya no en el R4 y todo funcionó bien

Muchas gracias por la ayuda, ya probé todo en el Arduino uno R3 y ya funcionó todo bien, si no es problema quería preguntarles sobre como es que se deben de hacer las conexiones de los push Botton, ya que los quiero usar para activar los rieles automáticamente con una duración de 20 o 10 segundos, en un pin del push lo conecto al pin 2 del Arduino junto a GND y el otro extremo a 5V pero hace cosas raras cuando los uso, como que hace el proceso únicamente del rele de la primer electroválvula y la bomba, o que la LCD baja su brillo.

Hi,
No se si conectaste el pin directamente a los 5 voltios ya que necesita una resistencia de 10K y conectas un lado de la resistencia a los 5 voltios y otro lado al pin de la tarjeta del arduino. y despues conecta el switche al pin de la tarjeta del arduino. Si no quires usar una resistencia entonces declara el pin con input con pullup.

En lugar de preguntar solo busca en google o tu buscador favaorito: Arduino pull up o pull down y te saldrán todas las respuestas.
Tal vez no conoces las palabras en inglés, entonces un simple Arduino pulsadores puede ser suficiente.

This topic was automatically closed 180 days after the last reply. New replies are no longer allowed.