Saludos amigos.
He estado trabajando en el diseño de una puerta que detecta si una persona entra o sale de un cuarto. Estoy usando barreras de sensores las cuales están conformadas por LED IR , sensores infrarrojos que trabajan a 38 kHz y el CI detector de tono LM567. El caso es que no he podido hacerlo a funcionar del todo. Estoy utilizando Arduino para la detección de interrupción de del haz luminoso (Adjunto imagen).
Los problemas que presento son los siguientes:
Hay veces que el LM567 se queda con salida en alto una vez que paso por el haz de luz (adjunto diagrama). Inicialmente hice cálculos de acuerdo a la frecuencia de salida del sensor (alrededor de 620 Hz), pero al final nunca detecto la frecuencia de acuerdo a los cálculos (R=14.6k, C=100 nF), así que tuve que usar un potenciómetro para poder ir ajustando las salidas. Si sirve de algo, las resistencias son de 4 bandas a +/- 5% de tolerancia y el capacitor C1 es cerámico. C2 y C3 son electrolíticos, de 1 uF y 2.2 uF respectivamente.
Con respecto a la programación en Arduino, he desarrollado el siguiente código, si bien hay veces que detecta bien el sentido de paso de personas, a veces no imprime los eventos o en su defecto los imprime mal (salidas en vez de entradas y viceversa). Adjunto codigo
	
	
	
		
Lo desarrolle así pensando en que se debe seguir una secuencia de E/S para determinar el sentido de paso. Espero puedan darme ayudarme o darme sugerencias en lo que puedo estar haciendo mal. Gracias de antemano.
				
			He estado trabajando en el diseño de una puerta que detecta si una persona entra o sale de un cuarto. Estoy usando barreras de sensores las cuales están conformadas por LED IR , sensores infrarrojos que trabajan a 38 kHz y el CI detector de tono LM567. El caso es que no he podido hacerlo a funcionar del todo. Estoy utilizando Arduino para la detección de interrupción de del haz luminoso (Adjunto imagen).
Los problemas que presento son los siguientes:
Hay veces que el LM567 se queda con salida en alto una vez que paso por el haz de luz (adjunto diagrama). Inicialmente hice cálculos de acuerdo a la frecuencia de salida del sensor (alrededor de 620 Hz), pero al final nunca detecto la frecuencia de acuerdo a los cálculos (R=14.6k, C=100 nF), así que tuve que usar un potenciómetro para poder ir ajustando las salidas. Si sirve de algo, las resistencias son de 4 bandas a +/- 5% de tolerancia y el capacitor C1 es cerámico. C2 y C3 son electrolíticos, de 1 uF y 2.2 uF respectivamente.
Con respecto a la programación en Arduino, he desarrollado el siguiente código, si bien hay veces que detecta bien el sentido de paso de personas, a veces no imprime los eventos o en su defecto los imprime mal (salidas en vez de entradas y viceversa). Adjunto codigo
		Código:
	
	/*Puerta detectora cruce de personas. Desarrollado en Arduino Mega 2560*/
//Declaracion de Pines
const int sensorIR1 = 18; // Sensor Superior Entrada
const int sensorIR2 = 19; // Sensor Superior Salida
const int sensorIR3 = 20; // Sensor Inferior Entrada
const int sensorIR4 = 21; // Sensor Inferior Salida
unsigned long tiempoPaso=0; // Variable de tiempo para evitar rebotes del sensor
// Variables indicadoras de entrada
bool StatusB1=false;   // Bandera Indicadora de cruce de barrera 1
bool StatusB2=false;  // Bandera indicadora de cruce de barrera 2
bool StatusB1B2=false; // Bandera indicadora de interrupcion total de puerta
// Variables indicadoras de salida
bool StatusBa=false; // Bandera Indicadora de cruce de barrera 2
bool StatusBb=false; // Bandera indicadora de cruce de barrera 2
bool StatusBaBb=false; // Bandera indicadora de interrupcion total de puerta
  
void setup() { 
  // put your setup code here, to run once:
  pinMode(sensorIR1,INPUT);
  pinMode(sensorIR2,INPUT);
  pinMode(sensorIR3,INPUT);
  pinMode(sensorIR4,INPUT);
  Serial.begin(9600);
  Serial.println("Listo");
}
void loop() { 
tiempoPaso=millis();
//Secuencia de subida
StatusB1=Barrera1(sensorIR1,sensorIR3);
StatusB1B2= Barrera3(sensorIR1,sensorIR2,sensorIR3,sensorIR4);
StatusB2=Barrera2(sensorIR2,sensorIR4);
if(StatusB1==true && StatusB1B2==true && StatusB2==true)   // Alguien esta en la puerta?
{ 
    if(!Barrera3(sensorIR1,sensorIR2,sensorIR3,sensorIR4))   // Termino de pasar?
     { Serial.println("Entrada);
       delay(500);}   
}
// Secuencia de bajada
StatusBa=Barrera2(sensorIR2,sensorIR4);                                        
StatusBaBb= Barrera3(sensorIR1,sensorIR2,sensorIR3,sensorIR4);
StatusBb=Barrera1(sensorIR1,sensorIR3);
if(StatusBa==true && StatusBaBb==true && StatusBb==true)  // Alguien esta en la puerta?
{ //Serial.println("Entre a la condicion"); 
     if(!Barrera3(sensorIR1,sensorIR2,sensorIR3,sensorIR4))  
     { Serial.println("Bajada");                                                        // Termino de pasar?
     delay(500);}   
}
  }
/*Funciones para la formacion de barreras IR*/
bool Barrera1(int pinSIR1, int pinSIR2)
{ bool cruceBarrera1=false;
  while(digitalRead(pinSIR1)==HIGH && digitalRead(pinSIR2)==HIGH && millis()-tiempoPaso<=60)  // Anti rebote de senal
  { cruceBarrera1=true;}
  tiempoPaso=millis();
  return cruceBarrera1;}
bool Barrera2(int pinSIR3, int pinSIR4)
{ bool cruceBarrera2=false;
  while(digitalRead(pinSIR3)==HIGH && digitalRead(pinSIR4)==HIGH && millis()-tiempoPaso<=60) // Anti rebote de señal
  { cruceBarrera2=true;}
  tiempoPaso=millis();
  return cruceBarrera2;}
bool Barrera3(int pinSIR1, int pinSIR2, int pinSIR3, int pinSIR4)
{ bool cruceBarrera3;
  if(digitalRead(pinSIR1)==HIGH && digitalRead(pinSIR2)==HIGH &&digitalRead(pinSIR3)==HIGH && digitalRead(pinSIR4)==HIGH)
  { cruceBarrera3=true; }
  else
   { cruceBarrera3=false;}
   return cruceBarrera3;
 }Lo desarrolle así pensando en que se debe seguir una secuencia de E/S para determinar el sentido de paso. Espero puedan darme ayudarme o darme sugerencias en lo que puedo estar haciendo mal. Gracias de antemano.
 
   
				 
						 
 
		

 
 
		 
 
		 
 
		





 
 
		 
 
		
 
 
		 
 
		 
 
		 
 
		 
 
		