SOLUCIONADO!! Relay con de sensor proximidad y ciclos

Hola buen dia

Antes que todo, muchas gracias por el tiempo que de toman en la lectura de esta duda, muchas gracias

Les platico, que tengo un sensor de proximidad E18-d50nk con el cual quiero que cada vez que detecte un objeto, un relay permanezca apagado hasta que pase cierto numero de ciclos y despues de esto se encienda y dure prendido otro numero de ciclos

En caso de que no detecte nada, el relay quisiera que permaneciera apagado

El problema viene a que cuando no detecta ningun objeto el programa hace los ciclos de encendido y apagado de manera automatica . Y cuando detecta el objeto siempre se queda prendido y no hace ninguna otra funcion

Les anexo el codigo que hasta el momento he hecho

//VARIABLES PARA EL TIEMPO QUE DURA ANTES DE PRENDER
int contador=0;
int contador2=0;
int NUMEROAPAGADO= 1000; //Este es el set point
int NUMEROPRENDIDO=1000; //Este es el SetHysteris
int INYECTOR=8;
int sensorPin = 9;
int estado=0;// variable utilizada para revisar el estado del sensor

void setup() {
  // put your setup code here, to run once:
Serial.begin (9600);
pinMode (INYECTOR,OUTPUT);

}

void loop()
{

estado = digitalRead(sensorPin); //LEE LA SEÑAL DEL SENSOR ALTO O BAJO




 if (estado==HIGH)
 {
             contador++;


         if (contador<NUMEROAPAGADO)
               {

              digitalWrite(INYECTOR,LOW);
              Serial.println ("LOW");
              Serial.println (contador);

               }
             else
             {
             contador2++;
                       if (contador2<NUMEROPRENDIDO)
               {
                          digitalWrite(INYECTOR,HIGH);
                                Serial.println ("HIGH");
                                Serial.println (contador2);

                }
              else
              {
          //
          contador=0;
          contador2=0;
              }
             }



 }
 else

 {
       digitalWrite(INYECTOR,LOW);
 }

} // FIN VOID LOOP

Sera posible me pudieran asesorar por favor?

De antemano les agradezco toda la ayuda posible

Muchas gracias

Saludos

No logro comprender por completo para qué quieres hacer eso pero un error básico que veo es que no declaraste en el setup el pinMode del sensorPin. Te falta pinMode(sensorPin,INPUT);

Hola jhnony

Muchas gracias, si es correcto, disculpa, ya lo puse pero me sigue haciendo lo mismo

Habre hecho algo mal en el codigo?

Muchaa gracias por el apoyo

Saludos

magg58:
...un error básico que veo es que no declaraste en el setup el pinMode del sensorPin. Te falta pinMode(sensorPin,INPUT);

Es una buena practica declarar todos los pines que vas a usar, pero si son de salida no es necesario. No es un error.

Jhony9625:
El problema viene a que cuando no detecta ningún objeto el programa hace los ciclos de encendido y apagado de manera automatica . Y cuando detecta el objeto siempre se queda prendido y no hace ninguna otra función

Tu código esta "casi bien" solo tienes un problema de interpretación.

Tu sensor tiene una salida NPN de colector abierto, osea que en reposo da +5V y cuando detecta un objeto pasa a GND. Solo tienes que invertir la lógica.

if (estado == LOW){

PD: No olvides poner una resistencia de 10K entre el sensor y el pin 9 de Arduino.

Hola kike

Muchas gracias por el apoyo, ya puse la resistencia y cambie el codigo a LOW y ahora si, cada que detecta el objeto si hace la funcion deseada, muchas gracias, solo que ahora durante todo el tiempo que no detecta objeto el relay permanece encendido

Sabras que pudo haber pasado?

Disculpa tabta pregunta, y muchas gracias por todo.

Saludos

Hola kike

Perdon, ya pude, hice lo mismo (cambiar de low a high en em ultilo else) y funciono , muchisimas gracias a todos por el apoyo, les agradezco mucho

Comparto el codigo por si le es de utilidad a alguien

//VARIABLES PARA EL TIEMPO QUE DURA ANTES DE PRENDER
int contador=0;
int contador2=0;
int NUMEROAPAGADO= 100; //Este es el set point
int NUMEROPRENDIDO=100; //Este es el SetHysteris
int INYECTOR=8;
int sensorPin = 9;
int estado=0;// variable utilizada para revisar el estado del sensor

void setup() {
  // put your setup code here, to run once:
Serial.begin (9600);
pinMode (INYECTOR,OUTPUT);
pinMode(sensorPin,INPUT); //DEFINIENDO EL PIN DEL SENSOR, ES DECIR EL
SENSOR 8 COMO PIN DE ENTRADA
 digitalWrite(INYECTOR,LOW);
}

void loop()
{

estado = digitalRead(sensorPin); //LEE LA SEÑAL DEL SENSOR ALTO O BAJO




 if (estado==LOW)
 {
             contador++;


         if (contador<NUMEROAPAGADO)
               {

              digitalWrite(INYECTOR,LOW);
              Serial.println ("LOW");
              Serial.println (contador);

               }
             else
             {
             contador2++;
                       if (contador2<NUMEROPRENDIDO)
               {
                          digitalWrite(INYECTOR,HIGH);
                                Serial.println ("HIGH");
                                Serial.println (contador2);

                }
              else
              {
          //
          contador=0;
          contador2=0;
              }
             }



 }
 else

 {
       digitalWrite(INYECTOR,HIGH);
                 contador=0;
          contador2=0;
 }

} // FIN VOID LOOP

Muchas gracias a todos

Saludos