Evitar rebotes de los pulsadores – Ejemplo con Arduino Nº 09

En algunos casos es necesario evitar rebotes de los pulsadores, como por ejemplo en el caso de contadores, los rebotes se generan por problemas mecánicos o físicos, estos rebotes es posible que la placa de Arduino los lea como múltiples pulsaciones en un corto periodo de tiempo, consiguiendo así engañar al programa y c0ntar tres o cuatro pulsaciones en vez de una.

En este ejemplo te muestro como conseguir evitar el efecto de los rebotes mediante software, para ello comprobaremos varias veces el estado de la entrada en un muy corto periodo de tiempo, para asegurar que el botón ha sido presionado, para ello utilizaremos de nuevo la función millis() y un periodo de tiempo en el que no se contarán los rebotes del pulsador.

En este ejemplo, cada vez que le des al pulsador cambiará el estado del Led, si está encendido se apagará y si está apagado se encenderá.

CIRCUITO:

Para este circuito utilizaremos de nuevo el circuito utilizado en el ejemplo de entradas digitales.

CÓDIGO:

const int Boton=2;

const int Led=13;

int EstadoDelLed=HIGH;

int EstadoDelBoton;

int EstadoAnteriorDelLed=LOW;

unsigned long TiempoDeLaUltimaPulsacion=0;

unsigned long MargenDePulsacion=50;

void setup()

{

                pinMode(Boton, INPUT);

                pinMode(Led, OUTPUT);

                digitalWrite(Led, EstadoDelLed);

}

void loop()

{

int Lectura=digitalRead(Boton);

if (Lectura !=EstadoAnteriorDelLed)

{

TiempoDeLaUltimaPulsacion=millis();

}

                If((millis() – TiempoDeLaUltimaPulsacion) > MargenDePulsacion)

{

if(Lectura != EstadoDelBoton)

                {

                EstadoDelBoton=Lectura;

                If(EstadoDelBoton=HIGH)

                {

                                EstadoDelLed= ¡EstadoDelLed;

}

}

}

}

Timbre con un pulsador – Ejemplo con Arduino Nº 08

En este ejemplo te voy a enseñar cómo crear un circuito de un timbre con un pulsador, eso sí, sustituiremos el timbre por un diodo LED, aunque te invito a probar con un piezoeléctrico, si quieres obtener un sonido en vez de una luz, aunque para aprender el concepto es suficiente con un LED.

Antes de nada, debes comprender el funcionamiento del pulsador, el pulsador es un componente electrónico que une dos puntos del circuito cuando lo presionas, también es llamado Botón.

CIRCUITO:

En este montaje utilizaremos el mismo circuito que en el ejemplo de entradas digitales, es decir utilizaremos una resistencia de 10K conectada a GND por un extremo, y por el otro conectaremos uno de los extremos del pulsador y el otro del pulsador lo conectaremos a Vcc, y es del nudo de la intersección de estos dos componentes de donde sacaremos la señal que llevaremos a la entrada digital 2 de la placa de Arduino.

Cuando el pulsador no está accionado, la patilla 2 del Arduino lee un “cero” es decir cero voltios, y cuando el componente es pulsado, la patilla 2 del Arduino lee un “uno” es decir cinco voltios.

Es necesario recordar, que si en una entrada digital de Arduino, no está conectada ni a GND ni a Vcc, no se puede saber cuál será el valor que estará leyendo en ese momento.

CÓDIGO:

En este caso en la función setup(), inicializamos el Pin 13 como salida mediante la variable Led, y el Pin 2 como entrada mediante la variable, Boton.

En la función loop() leemos si está accionado o no el pulsador mediante la función digitalRead(), la cual nos deja su lectura en la variable EstadoDelBoton.

Por último, simplemente hacemos una comparación para conocer el EstadoDelBoton, y en el caso de que esté activado encenderemos el Led mediante la función digitalWrite(), pasándole el parámetro HIGH y en caso contrario, apagaremos el Led con la misma función digitalWrite(), pero en este último caso, pasándole el parámetro LOW.

El código definitivo queda de la siguiente manera:

const int Boton =2;

const int Led=13;

int EstadoDelBoton=0;

void setup()

{

                pinMode(Led, OUTPUT);

                pinMode(Boton, INPUT);

}

void loop()

{

                EstadoDelBoton=digitalRead(Boton);

                If (EstadoDelBoton==HIGH)(

                {

                               digitalWrite(Led,HIGH);

}

else

{

                digitalWrite(Led,LOW);

}

}

Espero que te haya sido útil este ejemplo, y recuerda que tienes cursos completos de Arduino en el aula virtual de aprobarfacil.com.


Entrada al AULA VIRTUAL de aprobarfacil.com

proyecto-04-esquema-electrico-cruce-de-cebra-con-pulsador

Proyecto con Arduino Nº 04 – “Paso de cebra con pulsador”

 

PROYECTO “PASO DE CEBRA CON PULSADOR”

Dificultad: Media

Tiempo estimado: 60m

FUNCIONAMIENTO DEL PROGRAMA:

En este proyecto con Arduino vamos a incluir las luces del semáforo de peatones y un pulsador para pedir el paso. La placa Arduino reaccionará al presionar el pulsador, cambiando el estado de las luces, para parar el paso de los coches y permitir el paso de los peatones.

En este proyecto, haremos también nuestras primeras funciones. A partir de ahora en la lista de materiales no indicaremos los cables de conexiones, ya que utilizaremos tantos como necesitemos.

Cuando el programa empiece a funcionar veremos que la luz de los coches empieza en verde y el semáforo de peatones en rojo.

Al pulsar el botón el programa comprueba que han pasado 5 segundos, por lo menos, desde la última vez que el botón fue pulsado, para permitir que el tráfico se mueva, entonces, pasará a ejecución una función que llamaremos CambiaLuces(), en esta función la luz de los coches va de verde a ámbar y a rojo, será entonces cuando la luz de los peatones cambiará a verde.

Después de un periodo de tiempo razonable para que los peatones crucen la calle, la luz verde del semáforo de peatones parpadeará para advertir a los peatones que deben darse prisa para cruzar la calle. Entonces la luz de los peatones cambiará a rojo y la de los vehículos volverá a su rutina habitual, verde-ámbar-rojo.

CONEXIONES

Comprobando primero que todo está desconectado. Conectaremos el Arduino tal como aparece en la figura y teniendo mucho cuidado de colocar cada uno de los extremos del cable en los orificios (entradas y salidas) adecuados.

proyecto-04-conexiones-cruce-de-cebra-con-pulsador

ESQUEMA ELÉCTRICO

 
proyecto-04-esquema-electrico-cruce-de-cebra-con-pulsador

Hardware
(Lista de materiales)

Id

Descripción

Cantidad

1

Placa Arduino R3

1

2

Placa Protoboard

1

3

Led Verde

2

4

Led Amarillo

1

5

Led Rojo

2

6

Resistencias de 220 Ohmios

5

7

Resistencia de 10 Kohmios

1

8

Pulsador

1

 

Programa

// Proyecto 04 – Paso de cebra con pulsador de peatones – APROBARFACIL.COM

int ledDelay = 200; // Tiempo entre cambios de estado

int CarRojo = 13;

int CarAmarillo = 12;

int CarVerde = 11;

int PeaRojo=10;

int PeaVerde=9;

int Boton=2;

int TiempoParaCruzar = 5000;

unsigned long changeTime; // Tiempo desde que el boton esta pulsado

void
setup()

{

Serial.begin(9600);

int i,j;

for(i=9;i<14;i++)

{

pinMode(i,OUTPUT);

digitalWrite(i,LOW);

}

for(i=9;i<14;i++)

{

digitalWrite(i,HIGH);

delay(ledDelay/3);

}

for(i=9;i<14;i++)

{

digitalWrite(i,LOW);

delay(ledDelay/3);

}

}

void RutinaDeLuces()

{

int estado=0;


for(estado=1;estado<4;estado++)

{

switch(estado)

{


case(0):

digitalWrite(CarRojo, LOW);

digitalWrite(CarAmarillo, LOW);

digitalWrite(CarVerde, LOW);

digitalWrite(PeaRojo, LOW);

digitalWrite(PeaVerde, LOW);


break;


case(1):


digitalWrite(CarRojo, HIGH);


digitalWrite(CarAmarillo, LOW);

digitalWrite(CarVerde, LOW);

digitalWrite(PeaRojo, LOW);

digitalWrite(PeaVerde, HIGH);

break;

case(2):

digitalWrite(CarRojo, LOW);

digitalWrite(CarAmarillo, HIGH);

digitalWrite(CarVerde, LOW);

digitalWrite(PeaRojo, HIGH);

digitalWrite(PeaVerde, LOW);

break;

case(3):

digitalWrite(CarRojo, LOW);
digitalWrite(CarAmarillo, LOW);

digitalWrite(CarVerde, HIGH);

digitalWrite(PeaRojo, HIGH);

digitalWrite(PeaVerde, LOW);

break;

}

delay(ledDelay);

digitalWrite(CarRojo, LOW);


digitalWrite(CarAmarillo, LOW);


digitalWrite(CarVerde, LOW);


digitalWrite(PeaRojo, LOW);


digitalWrite(PeaVerde, LOW);

}

}

void PasoDePeatones()

{

int estado=0;


Serial.println(“paso de peatones”);


for(estado=1;estado<3;estado++)

{

switch(estado)

{

case(1):

digitalWrite(CarRojo, LOW);

digitalWrite(CarAmarillo, HIGH);

digitalWrite(CarVerde, LOW);

digitalWrite(PeaRojo, HIGH);

digitalWrite(PeaVerde, LOW);

break;

case(2):

digitalWrite(CarRojo, HIGH);

digitalWrite(CarAmarillo, LOW);

digitalWrite(CarVerde, LOW);

digitalWrite(PeaRojo, LOW);

digitalWrite(PeaVerde, HIGH);

break;

}


delay(ledDelay);


digitalWrite(CarRojo, LOW);


digitalWrite(CarAmarillo, LOW);


digitalWrite(CarVerde, LOW);


digitalWrite(PeaRojo, LOW);


digitalWrite(PeaVerde, LOW);

}

}

void loop()

{

int
EstadoBoton=digitalRead(Boton);

if(EstadoBoton == HIGH && (millis() – changeTime) > 5)

{

PasoDePeatones();

}

else

{

RutinaDeLuces();

}

}

Notas:

  • Utiliza cable negro para todas las conexiones a masa
  • Utiliza cable rojo para todas las conexiones a VCC (5V).
  • No importa los colores que utilices para las demás conexiones.
  • Ten cuidado al conectar los componentes en el protoboardpues puedes dañarlos.
  • Comprueba que conectas el led con la polaridad correcta. (Cátodo a masa).
  • Cuando todo esté correctamente conectado puedes conectar el cable USB.

Observaciones

Una vez comprobado el código y subido el led al Arduino, ser encenderán y apagarán todos los leds tres veces y después comenzará la secuencia del programa.

Enlaces del proyecto en 123D Circuits

Proyecto 04 – Cruce de peatones con pulsador