Problemas con el tiempo de espera en riego

Hola a todos.
Soy nuevo en los foros y no se si estoy escribiendo en el sitio adecuado.
Estoy realizando un proyecto con arduino uno donde le he añadido un sensor de luz, temperatura, humedad, humedad del plato y volumen de agua de una garrafa de agua. Todo esto para controlar las condiciones de riego de mis plantas. Uso un sensor de humedad de la tierra, de luz para regar de noche, de temperatura, para no regar con altas temperaturas, ya que en verano es mejor regar de noche pero justo antes de amanecer ya que hace menos calor. Un sensor digital para saber si el plato de las plantas ya tiene agua y otro para que la bomba de agua no se queme cuando se vacie la garrafa de agua. Esta bomba de agua se controlara con un rele compatible con arduino.

Creo que os he explicado todo, ahora os pongo el codigo y os digo mi problema.

const int bombadeaguaPin =  9;
const int sensorluzPin = A4;
const int sensortemperaturaPin = A3;
const int sensorhumedadPin= A2;
int valorluz;
int valortemperatura;
int valorhumedad;
int valorplato;
int valorvolumenagua;
int valorsensorluz;
int valorsensortemperatura;
int valorsensorhumedad;
int sensorplato;
int sensorvolumenagua;

void setup() {
  Serial.begin(9600);
  pinMode(bombadeaguaPin, OUTPUT);
  pinMode(8,INPUT);
  pinMode(12,INPUT);
  digitalWrite(9,HIGH);
} 
  void loop(){
  valorsensorluz = analogRead(sensorluzPin);
  delay(5000);
  valorsensortemperatura = analogRead(sensortemperaturaPin);
  delay(5);
  valorsensorhumedad = analogRead(sensorhumedadPin);
  delay(5);
  sensorplato = digitalRead(8);
  delay(5);
  sensorvolumenagua = digitalRead(12);
  delay(5);
  valorluz =((5*valorsensorluz/1024)*100);
  Serial.print(valorluz);
  valortemperatura = (((5.0 * valorsensortemperatura/1024)-0.5) * 100.0);
  Serial.print(valortemperatura);
  valorhumedad =((5*valorsensorhumedad/1024)*100);
  Serial.print(valorhumedad);
 
  if (valortemperatura<=35 && valorluz<=20 && valorhumedad<30 && sensorvolumenagua==LOW && sensorplato==LOW){    // enciende la bomba de agua:   
    digitalWrite(bombadeaguaPin, LOW);
    delay(30000);
    digitalWrite(bombadeaguaPin,HIGH);
    delay(60000); 
  }
  else{
    digitalWrite(bombadeaguaPin, HIGH);
}
}

Pues bien, todo funciona a la perfección, salvo que los tiempos de 30 segundos de riego y 60 segundos de no riego, para que de tiempo a llegar el agua al plato en caso de exceso, pues no se cumplen. Unas veces hace 30 otras 5 y va un poco al azar.

Alguien puede decirme porque se produce esto.

Un saludo y gracias

No estoy seguro del por qué, pero posiblemente el Delay en algún momento tenga un desbordamiento,
es decir, que sólo pueda contar hasta cierto tiempo límite.
Se me ocurre meter el delay(1000) en un ciclo For para que lo repita 30 veces, por ejemplo.

Si es eso con eso debería de contar bien, aunque podrías hacer una prueba de Escritorio (Simular en Papel),
Y revisar si el problema es de Lógica.

Suerte.

Hola vitro012.
Lo primero agradecerte tu respuesta. Por otro lado, intentare con un for de 30 ciclos, y ya te contare.
Por otro lado te pediría que me explicaras como puedo hacer una prueba en papel para saber si es problema de lógica, no entiendo muy bien lo de simular en papel.

Un saludo y muchas gracias.