Pulsadores y antirrebote con Arduino

Utilizando pulsadores con Arduino


¿Qué es un pulsador?

Un pulsador es un tipo de interruptor eléctrico, que consta de dos contactos metálicos separados que cuando se unen al ser presionado el botón, permiten el paso de corriente. Su simbología es la siguiente:



Existen dos formas de conectar un pulsador, y a pesar de que la función principal es la misma, a la hora de programar es necesario tener en cuenta dicha conexión:



Como se puede observar, están las configuraciones de:
  • Pull Up: En este caso cuando se presiona el pulsador, el Arduino "ve" o lee un cero en ese pin
  • Pull Down: En este caso cuando se presiona el pulsador, el Arduino "ve" o lee un uno en ese pin.
En este proyecto, y en los que siguen de ahora en adelante, se utilizará el esquema correspondiente a Pull Up, donde el Arduino va a leer un 0 al presionar un pulsador.

Los pulsadores son dispositivos que tienen un defecto, el cual se llama rebote. Cuando se presiona o se suelta el pulsador, se produce una fluctuación entre sus contactos internos, por lo tanto cuando se va a pasar de un 1 (HIGH) a un 0 (LOW) o viceversa, esas fluctuaciones son también leídas por el Arduino y se produce un comportamiendo inesperado en el funcionamiento de nuestros proyectos, por ejemplo, el usuario puede presionar una sola vez el pulsador pero por culpa del rebote el Arduino podría interpretarlo como si se hubiese presionado varias veces.



El antirrebote viene a solucionar este problema. Puede realizarse por software y por hardware. En todos los proyectos de este blog se realizarán ambos tipos de antirrebote al mismo tiempo, para tener seguridad de que ningún pulsador va a producir un comportamiento indeseado.

Por software, se coloca un condicional en donde una variable cambia su valor cuando el pulsador se presiona, es decir, cuando se encuentra en LOW. Luego de que la variable tenga su nuevo valor y cuando se suelte el pulsador, se realiza entonces la acción deseada en el proyecto.

if (digitalRead(pulsador) == LOW)     //Pregunta si el pulsador está presionado
      {
        presionado = 1;     //La variable cambia de valor
      }
      if (digitalRead(pulsador) == HIGH && presionado == 1)
      {
        //Realiza la acción deseada

        presionado = 0;    //La variable vuelve a su valor original
     }

Es necesario poner un condensador de 10uF en el pulsador. Esto es para realizar un antirrebote por hardware, el cual es muy efectivo. El circuito quedaría así para la configuración en Pull Up:



Con el método del software mas el del hardware, habremos realizado un antirrebote muy efectivo sin necesidad de estar usando delays que retarden el funcionamiento de nuestro programa.

Comentarios

  1. Hola quisiera hacer una programación para un juego quiero q los led se prenda y apaguen solo en un determinado tiempo y q cuando toque el pulsador de donde se prendió la luz me registre el Punto osea las veces q voy tocando el pulsador es para entrenar los reflejos

    ResponderBorrar
    Respuestas
    1. No parece difícil, el tema es que alguien que sepa programar quiera trabajar para tí haciendo el programa. De otra forma, si sigues algún curso básico de programación, en poco tiempo podrías hacer un programa tu mismo, pero hay conceptos básicos de programación que, de una forma u otra hay que aprender para avanzar en este campo, sino lamentablemente conformarse con copiar y pegar código -que también es muy útil, a mi me sirvió mucho incluso ensamblando dos o tres ejemplos de otros logré más de una vez hacer el programa que yo quería y ahorrar bastante tiempo y energía mental-.

      Borrar
  2. Se ve astante bien, gracias por la solución solo tengo una duda,de que voltaje sería el capacitor de 10mf??

    ResponderBorrar
    Respuestas
    1. Depende de la aplicación, pero por lo general para proyectos en Arduino un capacitor de 16V es más que suficiente, dado que el Arduino trabaja normalmente a 5V.
      El voltaje marcado en los capacitores indican el voltaje máximo que pueden soportar.

      Borrar
    2. Muy buena tanto la pregunta como su aclaración. A todos nos tocó comenzar alguna vez con la electrónica, y ese tipo de dudas prácticas han surgido. La mayoría de las veces los esquemas no tienen los datos completos de los componentes, es que para un entendido no hacen falta ya que se deducen a simple vista, pero para los que empiezan se complica a la hora de ir a comprar algo y no saber cuál pedir. Es decir entiendo a ambos y aplaudo la actitud de responder a los nuevos y mejor cuando como en este caso, se explica por qué, que para eso estamos en un sitio así. Saludos!

      Borrar
  3. El método software que comentas no es más que ejecutar por flaco (ascendente en este caso), lo cual no elimina ningún rebote. Si un retardo a la conexión (delay) te parece malo… No veo qué problema hay en meter un retardo de 400 ms a un pulsador. Cualquier persona que pulse rápido, rápido, no baja de 600 ms, con lo cual te da tiempo en esos 200 ms a ejecutar lo que quieras mil veces.

    ResponderBorrar

Publicar un comentario