Ayuda con 2 sensores Ultrasonicos HC-SR04

Hola, resulta que tengo un proyecto escolar, y estoy ocupando los sensores HC-SR04, quiero controlar un relevador con dichos sensores, cuando estén midiendo la distancia y la distancia medida en alguno de los 2 sensores sea menor a 10 cm durante un tiempo de 5 segundos, poner en alto la señal del relevador y si la distancia en alguno de los 2 es mayor a 10 poner en bajo la señal, por el momento cuento con el siguiente codigo, logro medir las 2 distancias y las compruebo con el monitor serial.

const int pingTrigger = 8;     // Trigger para los 2 sensores
const int Sensor_1 = 7;        // Echo para sensor 1
const int Sensor_2 = 6;        // Echo para sensor 2
const int rele = 9;            // Salida para el relevador

void setup() {
  
   pinMode(pingTrigger, OUTPUT);
   pinMode(Sensor_1, INPUT);
   pinMode(Sensor_2, INPUT);
   pinMode(rele, OUTPUT);
   Serial.begin(9600);
}

void loop(){
  
  long duracion,cm;


  // SENSOR 1 
 
  digitalWrite(pingTrigger, LOW);
  delayMicroseconds(2);
  digitalWrite(pingTrigger, HIGH);
  delayMicroseconds(5);
  digitalWrite(pingTrigger, LOW);

  duracion = pulseIn(Sensor_1, HIGH);

    cm = microsecondsToCentimeters(duracion);
  Serial.println("Sensor 1");
  Serial.print(cm);
  Serial.print("cm");
  Serial.println();
  delay(100);


  // SENSOR 2
 
  digitalWrite(pingTrigger, LOW);
  delayMicroseconds(2);
  digitalWrite(pingTrigger, HIGH);
  delayMicroseconds(5);
  digitalWrite(pingTrigger, LOW);

  duracion = pulseIn(Sensor_2, HIGH);

   cm = microsecondsToCentimeters(duracion);
  Serial.println("Sensor 2");
  Serial.print(cm);
  Serial.print("cm");
  Serial.println(); 
  delay(100);

delay(1000);


if(cm >= 10){                             ///////////////
delay(10000);
digitalWrite (rele, LOW);
Serial.println("Sensor Activado");       / Esta parte es con la que necesito ayuda =(
}
if (cm <= 10){
digitalWrite(rele, HIGH);
}                                         ////////////////
}  ///final

long microsecondsToCentimeters(long microseconds)
{
   return microseconds / 29 / 2;
}

Bueno pues esa seria mi duda, cualquier ayuda es agradecida.
Saludos!

Mas alla que en lo personal no me gusten muchas de las cosas que has hecho te diré que es un buen comienzo. Te iba a decir que porque los pines de trigger juntos pero no es tan mala idea... ya que los usas luego como si fueran independientes. Asi que aceptado. Luego lo que no me gusta son los delay y peor que peor los 10 seg cuano estas a menos de 10 cmts o sea que según la velocidad de tu robot te pegas contra el objeto? 10 seg... supongamos que se mueva a 1cm/seg en 10 seg te chocas No lo viste? Cuando hagas robots la premisa es que no puedes dejar de sensar y tomar decisiones, siempre. Asi que mira como se usa millis() para hacer lo mismo sin usar delay Delay es una instrucción que podemos calificar de dañina en casos como este. Debes prescindir de ella. Usar millis() no es facil. Porque no escribes del mismo modo que con delay. No es millis(1000) para 1 seg. millis() te devuelve el tiempo en milisegundos desde que arduino se se puso en ON. Y debes comparar con una variable que tome untiempo parcial. Es como si tuvieras un cronómetro y lo arrancas con arduino y cuando pones en marcha tu robot.... sale y empieza a medir milisegundos... si quieres prender un led debes decirle toma este tiempo parcial de tanto... y luego restas el nuevo tiempo de cronómetro contra ese valor y cuando la diferencia sea mayor a ALGO entoces prendes el LED. Facil no, dificil tampoco. Mira el ejemplo BlinkWithoutDelay.ino

Hola, gracias por tu comentario, se me olvido mencionar en que voy a ocupar este proyecto, es para una pequeña automatización de un aula de clases, los sensores va a ir puestos en unas ventanas que en este caso son 2, y pues quiero hacer el control por medio de la distancia dicha que en este caso seria de 10cm, el modulo del relevador va a estar energizando o desernegizando la bobina de un contactor, y en ese contactor esatara conectado un aire acondicionado de 5 toneladas, eso esa básicamente el proyecto que pretendo desarrollar.

Bueno no es un robot, en lo personal es lo mismo. Entonces debo preguntarte, puedes tolerar 10 segundos sin acciones? esto dice eso

if(cm >= 10){                             ///////////////
   delay(10000);
   digitalWrite (rele, LOW);
   Serial.println("Sensor Activado");       / Esta parte es con la que necesito ayuda =(
}

no entiendo que quieres decir con:

quiero hacer el control por medio de la distancia dicha que en este caso seria de 10cm

No importa que quieras hacer. Entiende que te pregunto yo. Tu código ahora dice.. si la distancia es mayor o igual a 10 cmts yo no hago nada por 10 segundos y pongo en RELE en LOW.. y muestro Sensor Activado. Pero si en 5 segundos la distancia es menor a 10 demoro 5 seg en tomar una acción. Y peor si una decima de segundo ya estoy en 9.9 cmts idem... tardare 9.9 seg en darme cuenta. Me entiendes?

ok, esa parte solo la puse porque pensé que así me iba a funcionar, no estaba diciendo que así es como tiene que funcionar, la verdad soy nuevo con esto de la programación en arduino, el código que puse lo obtuve investigando por internet, lo de el control por distancia lo puse porque con otros sensores que se ponen en ventanas son activados por simple contacto, por inductancia, etc.

Yo te voy a modificar el código pero usando mis herramientas, eso implica que usaré NewPing Library Debo revisarlo y lo posteo aca

simple contacto, por inductancia, etc.

inductancia? de qué?

Ok, muchas gracias, espero tu respuesta :) :) :)

Esta es mi respuesta

#include <NewPing.h>       // https://bitbucket.org/teckel12/arduino-new-ping/downloads
#define SONAR_NUM      2   // Number or sensors.
#define PING_INTERVAL 33   // Milliseconds between sensor pings (29ms is about the min to avoid cross-sensor echo).
#define TRIGGER_PIN    8   // Arduino pin tied to trigger pin on the ultrasonic sensor.
#define ECHO_PIN1      7   // Arduino pin tied to echo pin on the ultrasonic sensor.
#define ECHO_PIN2      6   // Arduino pin tied to echo pin on the ultrasonic sensor.
#define MAX_DISTANCE 200   // Maximum distance we want to ping for (in centimeters). Maximum sensor distance is rated at 400-500cm.
#define RELE 	       9   // Salida para el relevador

unsigned long pingTimer[SONAR_NUM]; // Holds the times when the next ping should happen for each sensor.
unsigned long tstart;
unsigned int cm[SONAR_NUM];         // Where the ping distances are stored.
unsigned int Menor;
uint8_t currentSensor = 0;          // Keeps track of which sensor is active.
bool Verifico5S = false;
bool activoRele = false;

NewPing sonar[SONAR_NUM] = {     // Sensor object array.
  NewPing(TRIGGER_PIN, ECHO_PIN1, MAX_DISTANCE), // Each sensor's trigger pin, echo pin, and max distance to ping.
  NewPing(TRIGGER_PIN, ECHO_PIN2, MAX_DISTANCE),
};

void setup() {
  Serial.begin(9600); // Open serial monitor at 115200 baud to see ping results.
  pingTimer[0] = millis() + 75;           // First ping starts at 75ms, gives time for the Arduino to chill before starting.
  for (uint8_t i = 1; i < SONAR_NUM; i++) // Set the starting time for each sensor.
    pingTimer[i] = pingTimer[i - 1] + PING_INTERVAL;
}

/* 1. Cuando estén midiendo la distancia y la distancia medida en alguno de los 2 sensores sea menor a 10 cm 
   durante un tiempo de 5 segundos, poner en alto la señal del relevador y 
   2. Si la distancia en alguno de los 2 es mayor a 10 poner en bajo la señal, 
*/

void loop() {
  for (uint8_t i = 0; i < SONAR_NUM; i++) { 			// Loop through all the sensors.
    if (millis() >= pingTimer[i]) {         			// Is it this sensor's time to ping?
      pingTimer[i] += PING_INTERVAL * SONAR_NUM;  		// Set next time this sensor will be pinged.
      if (i == 0 && currentSensor == SONAR_NUM - 1) 
      	 oneSensorCycle(); 								// Sensor ping cycle complete, do something with the results.
      sonar[currentSensor].timer_stop();          		// Make sure previous timer is canceled before starting a new ping (insurance).
      currentSensor = i;                          		// Sensor being accessed.
      cm[currentSensor] = 0;                      		// Make distance zero in case there's no ping echo for this sensor.
      sonar[currentSensor].ping_timer(echoCheck); 		// Do the ping (processing continues, interrupt will call echoCheck to look for echo).
    }
  }
  if (Menor < 10 && !Verifico5S) {										// debo iniciar timer por 5 seg
     Verifico5S = true;
     tstart = millis()+ 5000UL;
  }
  if (Menor > 10) {
     activoRele = false;
     Verifico5S = false;
  }

  if (Verifico5S)										// si estamos a menos de 10 cm verificar 5 segundos
     if (millis() >= tstart) {  						// pasaron 5 seg?
     	activoRele = true;
     }  

  if (activoRele)
      digitalWrite(RELE, HIGH);
  else 
  	  digitalWrite(RELE, LOW);
}

void echoCheck() { // If ping received, set the sensor distance to array.
  if (sonar[currentSensor].check_timer())
    cm[currentSensor] = sonar[currentSensor].ping_result / US_ROUNDTRIP_CM;
}

void oneSensorCycle() { // Sensor ping cycle complete, do something with the results.
  for (uint8_t i = 0; i < SONAR_NUM; i++) {
  	  if (i == 0) 
     	 Menor = cm[0]; 		// fijo a Menor con el primer dato;

  	  if (cm[i] < Menor)
         Menor = cm[i]; 	// Me quedo con el menor;
    Serial.print(i);
    Serial.print("=");
    Serial.print(cm[i]);
    Serial.print("cm ");
  }
  Serial.println();
}

Muchas gracias por contestar, ahorita mismo me encuentro fuera de la ciudad y no traigo el arduino y los sensores conmigo pero cuando llegue iré directo a probarlo, en verdad agradezco mucho que te ayas tomado tu tiempo para contestar, cualquier cosa posteo :):):)

Hola, perdón por la tardanza, estuve probando el código con el arduino y los sensores y si miden la distancia y esta bien en eso, pero cuando la distancia sube de 10 cm no activa el rele, y bueno esa seria la cuestion, si hay que cambiarle algo al codigo.

Saludos :)

Y que propones?