Go Down

Topic: Programacion LDR (Read 154 times) previous topic - next topic

GustavoCabanas

Aug 06, 2017, 06:08 pm Last Edit: Aug 07, 2017, 04:55 am by GustavoCabanas
Hola amigos, escribo para ver si alguien puede ayudarme con un código de un proyecto que estoy haciendo, el cual consiste en hacer un contador de personas que entran y salen de un edificio o transporte publico, el cual estoy realizando con dos emisores láser y dos sensores de luz (LDR), la cuestión es que ya puedo hacer que cuente de forma ascendente uno de los LDR, pero ahora no se como hacer para que el otro LDR cuente hacia de forma descendente, así como identificarlos para que si el primer ldr es interrumpido haga la cuenta y en caso de que el otro sea interrumpido que no haga nada el primero, de verdad agradecería mucho su ayuda ya que soy principiante en arduino, les anexo el codigo que estoy utilizando para que cuente.


Code: [Select]


#include <Wire.h>
#include "rgb_lcd.h"


rgb_lcd lcd;

const int colorR = 255;
const int colorG = 0;
const int colorB = 0;


int numero=0;
int auxnumero= 0;
int sensorPinLDR = A3;
int valorLDR=0;


void setup()
{
   // set up the LCD's number of columns and rows:
   lcd.begin(16, 2);
   
   lcd.setRGB(colorR, colorG, colorB);
   
   // Print a message to the LCD.
   lcd.print("Contador de Personas.");
   
   delay(5000);
   lcd.clear();
}

void loop() {

 valorLDR = analogRead(sensorPinLDR);// Leemos el valor de la LDR y lo guardamos en valorLDR
 lcd.setCursor(0, 0);//Situamos el lugar donde escribiremos
 lcd.print("CONTADOR");//Escribimos contador
 lcd.setCursor(10, 1);//Situamos el lugar donde escribiremos
 lcd.print(numero);//Representamos la variable numero
 
 auxnumero=0;//hacemos la variable auxnumero 0. Esta variable nos ayuda a contar solo 1 cada vez que entremos en el bucle de más abajo
 
 while(valorLDR<700){//Entramos en el bucle si valorLDR es menor de 600. Esto ocurre cuando no da el laser sobre la LDR.
   valorLDR = analogRead(sensorPinLDR);// Leemos el valor de la LDR y lo guardamos en valorLDR
   
   if(auxnumero==0){// Entramos en el if si auxnumero es 0. Esto solo ocurre la primera vez que recorremos el while.
   numero++;//Sumamos 1 a la variable numero
   auxnumero=1;//hacemos auxnumero 1, para que solo sume una vez 1 a la variable numero cuando estamos dando vueltas dentro del bucle.
   delay (700);
    }
   }

 
}







Espero alguien me pueda ayudar.

surbyte

Primero edita tu código según la guía que te pasé por privado.

Segundo: una consulta.
A que distancia esta un LDR del otro?
Están lo suficientemente próximos, tal que una persona corta primero uno y luego el otro, ambos a la vez o estan separados tal que una persona nunca interrumpe los dos?

GustavoCabanas

Ok, Gracias por la observación, y bueno la distancia es de 60 cm de manera que al pasar la persona solo interrumpa uno de los LDR.

surbyte

bien si es el caso, entonces salvo muy raras excepciones tendrás dos secuencia muy distintas

LDR1 LDR2 : 00 01 00 10 00  esta secuencia daría una cuenta ascendente
Sin embargo

LDR1 LDR2 : 00 10 00 01 00 sería para la descendente.

Ahora al igual que cuando ves un tecla y comparas la transición 0-1 acá tenemos 4 estados que cumplir

Asi que vamos a leer los dos LDR pero también vamos a guardar el estado anterior.
Los dos LDR van a formar un byte tal que
00 = 0
01 = 1
10 = 2
11 = 3 que nunca se dará.



GustavoCabanas

a ok, y como podría programarlo con el código que tengo, si pudieras ayudarme te lo agradecería mucho.

Go Up