Automatizar Reles por Tiempo con Arduino

Buenas a todos los miembros del foro, tengo un pequeño proyecto que estoy armando con un Arduino Mega y unos Reles, la cuestión es que quiero controlar estos reles por tiempo, ejemplo, tengo 4 reles:

Rele nº1: Encenderse y permanecer así durante 18hs y mantenerse apagado por 6Hs. Rele nº2: Encenderse y permanecer asi durante 12hs y mantenerse apagado por 12hs. Rele nº3: Encenderse cada 2hs durante 20Min y apagarse. Rele nº4: Encenderse cada 5hs durante 15Min y apagarse.

Que me recomiendan hacer?

Vi que hay un modulo de reloj RTC y luego vi también que hay una librería Arduino Time, que no requiere este modulo adicional, que me recomiendan?

Los primeros dos reles son siglos completos de 24hs, puedo especificar por ejemplo que se este apagando de 00hs a 6hs y luego de 6hs a 00hs permanezca encendido. El tema serian los otros dos reles.

Todo depende de si necesitas que esos reles arranquen o no a determinada hora. Si eso no te interesa porque el ciclo es tal como lo has descripto, usa una maquina de estados (ve el primero hilo en documentación y al final hay un ejemplo mío). Para todo eso debes usar millis(). Te hago un caso y tu los demás.

const byte rele1Pin  = 2;
const byte rele2Pin  = 3;
const byte rele3Pin  = 4;
const byte rele4Pin  = 5;

unsigned long start1;
unsigned long start2;
unsigned long start3;
unsigned long start4;

byte estado1 = 0;
byte estado2 = 0;
byte estado3 = 0;
byte estado4 = 0;

void setup (){
  pinMode (rele1Pin, OUTPUT);
  pinMode (rele2Pin, OUTPUT);
  pinMode (rele3Pin, OUTPUT);
  pinMode (rele4Pin, OUTPUT);


}


void loop (){


  switch (estado1) {
          case 0: digitalWrite(rele1Pin, HIGH); // verificar que este sea el estado de activación del rele
                  estado1 = 1;
                  start1 = millis() + 18*3600000; // 18 hs en milisegundos
                  break;
          case 1: if (millis() > start1) {     
                      digitalWrite(rele1Pin, LOW);// verificar que este sea el estado de desactivación del rele
                      estado1 = 2;
                      start1 = millis() + 6*3600000; // 6 hs en milisegundos
                  }
                  break;
          case 2: if (millis() > start1) {
                      estado1 = 0;
                  }
                  break;
          default : break;    
  } 
}

Tus ciclos son muy similares a los del cultivo de ciertas plantas "medicinales" ,por lo que si es asi,te seria casi imprescindible un rtc o algun otro sistema de hora real ,si no ante cualquier reinicio de la placa (por ejemplo solo con encender el serial monitor) perderias la hora del sistema.