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
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);
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.
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.
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