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
________________________________
|