|   FOROS      |         |     KIO4 |      
   Inicio B4A (Basic4Android) App inventor 2 WAMP - PHP - MySQL
   Elastix - VoIP Cosas de Windows Webs interesantes Arduino
  Estación meteorológica Visual Basic Script (VBS) Translate:
Búsqueda en este sitio:


Nuevo concurso para España, Argentina, Brasil, Chile, Colombia, Ecuador, México, Perú y Portugal.

Arduino en español
Circuitos con Arduino - Juan Antonio Villalpando

-- Tutorial de iniciación a Arduino --

Volver al índice del tutorial

____________________________

3C.- Contador de persona. Bidireccional.

- Tenemos una puerta por donde debemos contar las personas que están en un local, para ello disponemos de dos pulsadores separado 2 cm uno de otro.

- Cuando una persona entra, se activa un pulsador, sin dejar de pulsarlo se activa el otro pulsador, luego se desactiva el primero y permanece el segundo y por fin se desactivan los dos, se contará uno.

ENTRAR:

SALIR:

- En el proceso contrario resta uno.

- Conectamos un pulsador al terminal 2 y el otro al 12 del Arduino.

- En nuestro caso lo haremos de forma sencilla, cuando esté uno activado y el otro no, contará uno. En caso contrario restará uno.

- El proceso de Salir es:
derecho, derecho e izquierdo, izquierdo, ninguno.

- El proceso de Entrar es:
izquierdo, izquierdo y derecho, derecho, ninguno.

El proceso es el siguiente:

Entrar:

Pulsa 12 2 sin pulsar
Pulsado 12 Pulsa 2
12 sin pulsar Pulsado 2
12 sin pulsar 2 sin pulsar

Salir:

12 sin pulsar Pulsa 2
Pulsa 12 Pulsado 2
Pulsado 12 2 sin pulsar
12 sin pulsar 2 sin pulsar

- Explico otra ver la Salida.

Pulsa y deja pulsado el Pulsador2,
continuando pulsado el Pulsador2, pulsa el Pulsador12
suelta el Pulsador2 y continua pulsando el Pulsador12
deja de pulsar el Pulsador12 y el Pulsador2 (que ya estaba sin pulsar).

________________________________
1.- Código.

En este sencillo código, se activa el derecho o el izquierdo, y actúa una temporización de 1,2 segundos, en ese tiempo pasa la persona.
Si la persona permanece pulsando los dos pulsadores más de 1,2 segundos, la cuenta no es correcta.

Código

/*
  Juan A. Villalpando
  kio4.com
 */

// Entrada y Salida.
// 

int cuenta=0;



#define pin2 2 // Al terminal 2 lo llamamos pin2. Aquí irá el pulsador 2.
#define pin12 12 // Al terminal 12 lo llamamos pin12. Aquí irá el pulsador 12.

int valor2; // Esto es una variable entera
int valor12; // Esto es una variable entera

// En el setup establecemos los parámetros iniciales.
void setup() {
pinMode(pin2, INPUT); // El pin2 será entrada. Pulsador.
pinMode(pin12, INPUT); // El pin12 será entrada. Pulsador.
Serial.begin(9600); // Para ver información en el Seria Monitor.
}

void loop() 
{
valor2 = digitalRead(pin2); // Lee el valor del pin2 y se lo asigna a valor2. (Puede ser 0 o 1)
valor12 = digitalRead(pin12); // Lee el valor del pin12 y se lo asigna a valor12. (Puede ser 0 o 1)


if (valor2 == HIGH && valor12 == LOW)
{
cuenta=cuenta+1;
delay(1200);
}


if (valor2 == LOW && valor12 == HIGH)
{
cuenta=cuenta-1;
delay(1200);
}

Serial.print(cuenta); 


}

________________________________
2.- Otro Código.

Otro Código
/*
  Juan A. Villalpando
  kio4.com
 */

// Entrada y Salida.
// 

int cuenta=0;
String pulsadores;

#define pin2 2 // Al terminal 2 lo llamamos pin2. Aquí irá el pulsador 2.
#define pin12 12 // Al terminal 12 lo llamamos pin12. Aquí irá el pulsador 12.

int valor2; // Esto es una variable entera
int valor12; // Esto es una variable entera

// En el setup establecemos los parámetros iniciales.
void setup() {
pinMode(pin2, INPUT); // El pin2 será entrada. Pulsador.
pinMode(pin12, INPUT); // El pin12 será entrada. Pulsador.
Serial.begin(9600); // Para ver información en el Seria Monitor.
}

void loop() 
{
valor2 = digitalRead(pin2); // Lee el valor del pin2 y se lo asigna a valor2. (Puede ser 0 o 1)
valor12 = digitalRead(pin12); // Lee el valor del pin12 y se lo asigna a valor12. (Puede ser 0 o 1)


if (valor2 == HIGH && valor12 == LOW && pulsadores == "")
{
pulsadores="saliendo";
}
if (valor2 == HIGH && valor12 == HIGH && pulsadores == "saliendo")
{
pulsadores="saliendo_mitad";
}
if (valor2 == LOW && valor12 == HIGH && pulsadores == "saliendo_mitad")
{
pulsadores="casi_salio";
}
if (valor2 == LOW && valor12 == LOW && pulsadores == "casi_salio")
{
pulsadores="";
cuenta=cuenta-1;
Serial.print(cuenta); 
}
////////////////////////////////////////////////////////////////
if (valor2 == LOW && valor12 == HIGH && pulsadores == "")
{
pulsadores="entrando";
}
if (valor2 == HIGH && valor12 == HIGH && pulsadores == "entrando")
{
pulsadores="entrando_mitad";
}
if (valor2 == HIGH && valor12 == LOW && pulsadores == "entrando_mitad")
{
pulsadores="casi_entro";
}
if (valor2 == LOW && valor12 == LOW && pulsadores == "casi_entro")
{
pulsadores="";
cuenta=cuenta+1;
Serial.print(cuenta); 
}
// Serial.println(pulsadores);

}

- El código anterior se puede mejorar.

________________________________
- Comentarios.

- Se podría realizar utilizando interrupciones.

- En el tutorial 32pantallanokia.htm, puedes ver la manera de poner una pantalla Nokia para ver la cuenta.

- En vez de utilizar pulsadores, se podría utilizar LDR o sensores de IR.

- Aunque con este código no es necesario, en muchos casos hay que contemplar los rebotes en las activaciones de los pulsadores. En otro tutorial comento el asunto de los rebotes.

- Puedes ver un código similar en...

http://www.instructables.com/id/IR-laser-person-counter/step2/Schematics/

Contadorbidireccional.rar

 

 

________________________________

 

- Mi correo:
juana1991@yahoo.com
- KIO4.COM - Política de cookies. Textos e imágenes propiedad del autor:
© Juan A. Villalpando
No se permite la copia de información ni imágenes.
Usamos cookies propias y de terceros que entre otras cosas recogen datos sobre sus hábitos de navegación y realizan análisis de uso de nuestro sitio.
Si continúa navegando consideramos que acepta su uso. Acepto    Más información