Como leer un pulsador con arduino

Leer un pulsador con arduino se podría resumir en poder diferenciar entre un cero o un uno a la entrada de un pin digital de nuestro microprocesador, casi cualquier proyecto de electrónica requiere de la utilización de un botón o pulsador para realizar una acción determinada. veamos como se hace.

Leer pulsador con arduino

El éxito va a depender de realizar correctamente la configuración circuital a la entrada del pin, existen dos conceptos denominados resistencia de pull down y resistencia de pull up, son dos configuraciones muy similares, la diferencia radica en si al presionar el pulsador queremos leer un HIGH o un LOW.

Pero olvidemos estos dos conceptos y veamos que pasa si no los consideramos, podríamos estar ocasionando un daño irreparable al pin que estemos utilizando sin darnos cuenta.

Si prestamos atención a las figuras de abajo, vemos dos configuraciones posible, la primera con el pulsador conectado a GND y a la entrada del pin y la segunda directamente a 5V y a la entrada del pin. Podemos llegar a pensar que esto no tiene ningun problema pero no es asi, pensemos lo siguiente.

Para ambos casos, cuando el pulsador se encuentre cerrado, el circuito se cierra y no tendríamos ningún problema, pero cuando el pulsador esta abierto tenemos al pin digital en alta impedancia, el problema de esto es que esto no significa que el pin este en un cero logico, si no que se encuentra en un estado indeterminado, pudiendo conservar el valor ultimo leído, obviamente esto no esta bien ya que puede ocasionar errores grabes de interpretación. En resumen si elegimos esta opción tenemos un problema grabe de indeterminación de estados lógicos.

como puedo leer un pulsador con arduino

Existen formas de mejorar y solucionar este problema, como se muestra en la imagen de abajo podemos conectar el pin a dos referencias, una fija y la otra se activara al accionar el pulsador.

Pareciera que esta configuración no tiene ninguna problemática pero no es así, si bien solucionamos el problema de indeterminación , nos ganamos otro.

Al accionar el pulsador estamos cerrando el circuito entre GND y 5V, si prestamos atención el pin digital esta conectado de tal manera que ese nodo estaría en cortocircuito y de esta manera una intensidad de corriente elevada estaría circulando por el, como consecuencia podemos romper el pin de entrada por alta intensidad de corriente de los transitorios, esto significa que antes del tiempo de establecimiento circulara una gran corriente por el pin pudiendo ocasionar calentamientos y roturas en el material.

Leer un pulsador con arduino

Pero entonces ¿cual es la solución definitiva? ¿podemos conectar un pulsador a un pin sin cometer daños y ocasionar riesgos innecesarios?.

La respuesta a esas preguntas es solo agregar un detalle a la configuración anterior, y es lo que anteriormente denominamos resistencia de pull up y resistencia de pull down.

Como se ve en la imagen a la configuración anterior solo le agregamos un resistencia que luego veremos de que valor tenemos que colocar, esto nos soluciona el problema de de indeterminación y  el de alta intensidad de corriente en transitorios, en el caso del Pull Up cuando el pulsador esta abierto el pin esta recibiendo un uno logico y una intensidad de corriente controlada por la resistencia que incluimos, en este caso hablamos de una intensidad de corriente en el orden de los 1mA, que es una corriente muy menor a la máxima permitida por el pin.

Cuando el pulsador esta cerrado ya no se produce un cortocircuito, por que existe una caída de tensión en la resistencia que agregamos, de esta manera la corriente que le llega al pin es mucho menor que si no ponemos el resistor.

En el caso de la configuración de Pull Down el concepto funciona de la misma manera, solo que cuando el pulsador esta abierto estamos leyendo un cero y cuando el pulsador esta cerrado estamos leyendo un uno lógico.

Como ller un pulsador con arduino resistencia pull down

Siempre que conectemos un pulsador a un pin tenemos que hacerlo de esta manera, es la forma correcta de hacerlo y así nos evitamos muchos dolores de cabeza.

Que valor de resistencia poner

Bueno, solo falta entender cual es el valor de la resistencia que tenemos que colocar como Pull Up o Pull Down, esto va a depender de la corriente máxima que el pin pueda soportar, los pines digitales de arduino soportan una corriente máxima de hasta 40mA, pero cuanto menor sea la corriente que le hagamos circular menos calor generaremos y mas tiempo nos durara nuestro arduino, basándonos en la ley de Ohm yo elegí una resistencia que en función de la tensión de entrada me garantice una corriente de no mas de 1mA, pero podemos elegir otra mas pequeña para permitir que circule mas corriente, queda a criterio del diseñador, pero desde mi punto de vista lo optimo es una resistencia de 4K7 como la que colocamos.

Código arduino

Es un ejemplo básico de leer el estado de un pin y mostrarlo en pantalla, útil para resumir todo lo que estuvimos viendo.

const int inputPin = 2;
 
int value = 0;
 
void setup() {
  Serial.begin(9600);
  pinMode(inputPin, INPUT);
}
 
void loop(){
  value = digitalRead(inputPin);  //lectura digital de pin
 
  //Envio al puerto serie el estado del pin
  if (value == HIGH) {
      Serial.println("Encendido");
  }
  else {
      Serial.println("Apagado");
  }
  delay(1000);
}

Como se puede ver en el código cuando hacemos el digitalRead(inputPin) obtenemos el estado actual del pin, si esta encendido o apagado al pulsarlo dependera del tipo de configuración utilizada Pull Up o Pull Down.

Pero lo importante de todo esto es que ya identificamos el estado del pulsador, en el ejemplo yo solo lo muestro en pantalla pero podríamos realizar cualquier otra acción como encender un Led, prender un motor etc.

A tener en cuenta

  • Siempre utilizar resistencias de pull up o pull down en la entrada de un pin.
  • Tener presente la corriente máxima que el pin puede soportar para de esta manera decidir que resistencia colocar.

Agradecimientos y bibliográfia

Luis Lamas

 

ARTICULOS RELACIONADOS

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *