TIMER1 wrong count of seconds

Hello Friends

I am trying to make an hour meter with the TIMER1 of the MEGA arduino, which changes the state of a variable every 4 hours, for a motor to open and close a window.
That is, the state variable"count_drive" (0) opens the window and the window remains open for 4 hours, after 4 hours it changes to (1) and closes the window for another 4 hours and so on for 24 hours every day.
Well I thought to make this counter with TIMER1 to count the seconds and every 4 hours (14400seconds) to change the variable state.
The problem is that with TIMER1 I have a delay of about 1 minute per hour, after 1 day I have a delay of about 30 minutes. I think TIMER should work more correctly, I don’t know if I’m doing anything wrong for TIMER1 to make this mistake for me.
I leave the code below for you to see what I’m doing wrong, if anyone has a better idea of how to do it I appreciate the help

Tanks

 #include <Wire.h>
#include <TimerOne.h>
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x27, 20, 4);
#include <EEPROM.h>

#include "DHT.h"
#include "RTClib.h" //libreria del reloj tiempo real
#define  DHTPIN 9
#define  DHTTYPE DHT22
DHT dht(DHTPIN, DHTTYPE);

RTC_DS3231 RTC;//funcion  RTC

#define  pinswitchA 5
#define  pinswitchB 7 
#define  pinMotorA1 3 
#define  pinMotorA2 2 


volatile unsigned int count_seg = 0;// 
volatile bool count_drive = 0;//
const int n_secunds = 14400 ;// number of seconds in 4 hours
byte hours = 0, minutes = 0, seconds = 0, yeares= 0, months= 0, days = 0; //year month day hour minutes seconds



float celsius;  // 
byte humidity; // 


//*********************************************************

void engine_drive();// 
void show_time();



String zero(int n) { //
  if (n < 10) {            //
    return "0" + String(n);//-> 00:5:00
  } else {
    return String(n);
  }
}
void setup()
{
  Serial.begin(9600);
  lcd.backlight();
  lcd.init();
  dht.begin();
  
  //RTC.adjust(DateTime(__DATE__, __TIME__));//obtenemos el horario 


  pinMode(pinswitchA, INPUT_PULLUP);
  pinMode(pinswitchB, INPUT_PULLUP);


  pinMode(pinMotorA1, OUTPUT);
  pinMode(pinMotorA2, OUTPUT);

 
  DateTime nowr = RTC.now();
 

  Timer1.initialize(1000000);//count every second
  Timer1.attachInterrupt(time_int);
} 
 void time_int()
{

  count_seg ++;
  if(count_seg  == n_secunds)
  {
    count_drive = !count_drive; // change of state
    count_seg  = 0; // 
  }  
}

//************************LOOP********************************************
  
void loop()
  {
   //lcd.setCursor(L =4,C=20);
  //byte reset1=0;
  byte test_control=0;

  DateTime nowr = RTC.now();

  hours = nowr.hour(),minutes = nowr.minute(),seconds = nowr.second(),yeares = nowr.year(),months = nowr.month(),days = nowr.day();
  celsius=dht.readTemperature()-2;//  temperature DHT11
  humidity = dht.readHumidity();  //  humidity  DHT11

  show_time();


  
      if (test_control==0)
      {
      engine_drive();
      }
      else 
      {
      digitalWrite(pinMotorA1,LOW);
      digitalWrite(pinMotorA2,LOW);
      
      }  
 }


//*******************************END LOOP***********************************
void engine_drive() {

  if (count_drive== 0)
  {
    if (digitalRead(pinswitchA) == 1) { //engine limits
      digitalWrite(pinMotorA1, LOW);
      digitalWrite(pinMotorA2, HIGH);
    } else {
      digitalWrite(pinMotorA1, LOW);//
      digitalWrite(pinMotorA2, LOW);
    }
  }
  if (count_drive == 1)
  {
    if (digitalRead(pinswitchB) == 1) { // engine limits
      digitalWrite(pinMotorA1, HIGH);
      digitalWrite(pinMotorA2, LOW);
    } else {
      digitalWrite(pinMotorA1, LOW);
      digitalWrite(pinMotorA2, LOW);
    }
  }
  delay(5);
}

//*****************************************************************************

void show_time()
{
  DateTime nowr = RTC.now();
  hours = nowr.hour(),minutes = nowr.minute(),seconds = nowr.second(),yeares = nowr.year(),months = nowr.month(),days = nowr.day();
  
  // Se imprime en el primer renglon posicion 0,0
  lcd.setCursor(0, 0);
  //Se Imprime el data
  //lcd.print("date:");
  lcd.print(zero(nowr.day()) + "/" + zero(nowr.month()) + "/" + nowr.year());
  //Se Imprime el horario
  lcd.setCursor(12, 0);
  //lcd.print("time:");
  lcd.print(zero(nowr.hour()) + ":" +  zero(nowr.minute()) + ":" + zero(nowr.second()));

}

//****************************************************************************************