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.