15 jul 2014

CONTANDO PULSOS POR COMUNICACIÓN SERIAL

En esta práctica de ARDUINO vamos a aprender a contar pulsos a partir de una entrada digital. Para ello utilizaremos un pulsador, y señalizaremos cada pulsación encendiendo un LED rojo (a través de una salida digital) e iremos mostrando el número de pulsaciones hechas a través del "Monitor Serial".

A partir de esta sencilla práctica podéis pensar en alguna aplicación y mejora....como por ejemplo:

  • un sistema de parking de coches que llegado a un determinado número encienda un luminoso de "completo".
  • un sistema que controle la densidad de tráfico (coches por hora) de una autopista o vía.
  • un contador de aforo en cines, estadios, etc..

Además, con prácticas sencillas como ésta, nos irán saliendo pequeños problemas técnicos, como el de los rebotes de los pulsadores, que iremos dando solución.

MATERIAL NECESARIO


1 – Tarjeta ARDUINO UNO
1 – Cable USB para Arduino
1 – Placa Protoboard
1 – Pulsador
1 – Resistencia de 10kΩ
1 – Diodo LED
1 – Resistencia de 220Ω

CONEXIONADO EN PLACA PROTOBOARD


ESQUEMA ELÉCTRICO


En la siguiente figura se muestran los circuitos correspondientes a la entrada (PULSADOR) y a la salida (LED), para su mejor comprensión.



CÓDIGO

/* Cuenta los pulsos introducidos por un pulsador y los señaliza con
un LED y muestra la cuenta a través del Monitor Serial */

const int PulsadorPin = 2; //Pin donde se conecta el pulsador
const int LedPin = 10;  //Pin donde se conecta el LED
int LecturaBoton = 0; //Variable que contiene el valor del pulsador
int ContPulso=0; //Variable para conteo de numero de pulsos

void setup() 
{
Serial.begin(9600);
pinMode(PulsadorPin, INPUT);  //configuramos el pin 2 como entrada
pinMode(LedPin, OUTPUT);  //configuramos el pin 10 como salida
}

void loop()
{
LecturaBoton = digitalRead(PulsadorPin);
//Lee la entrada del pulsador y lo almacena en la variable
if(LecturaBoton == HIGH) //si se presiona el pulsador
   { 
   digitalWrite(LedPin, HIGH); // enciende el LED
   ContPulso++;  //incrementa el número de pulsos
   Serial.println(ContPulso);  //lo muestra por el Monitor Serial
   delay(300);  
   /*este retraso es para evitar los posibles rebotes del pulsador.
   El valor tiene que ser no muy pequeño (porque si no contaría más
   de una pulsación al pulsar), ni muy grande (porque si no podría 
   no detectar pulsaciones en esos tiempos de espera)
   */
   } 
else
   {
   digitalWrite(LedPin, LOW); // apaga el LED
   }

}


No hay comentarios:

Publicar un comentario