ARDUINO: LECTURA DE UN PULSADOR

Las I/O (entradas o salidas) digitales de la tarjeta Arduino pueden tener varias aplicaciones como se vio en el tutorial de Entradas Digitales para la lectura de estado en un sensor, cuyos estados solo pueden ser dos, ‘HIGH’ y ‘LOW’. Otra aplicación es la lectura de estado de algún interruptor, tema que se tratará en este tutorial.

Para poder llevar a cabo la lectura de estado del interruptor es necesario contar con un montaje correcto, así como la incorporación de dos dispositivos electrónicos, las resistencias Pull Down y Pull Up. El uso de estas resistencias y la configuración del montaje depende de la lectura de estado ‘HIGH’ o ‘LOW’ que queramos leer cuando el interruptor sea accionado.

A continuación, se presentan dos configuraciones de montaje erróneas para poder introducir al programador a un razonamiento lógico que lo llevará a la configuración del montaje real, así como identificar el papel que cumplen las resistencias Pull Down y Pull Up.

Configuración de montaje empleando una conexión directa

La primera opción para la lectura del estado de un interruptor podría ser el conectar directamente una terminal o pin digital de la tarjeta Arduino a alguna referencia de alimentación, para este caso sería 0 Volts o 5 Volts. Al cerrar el interruptor el voltaje en la terminal o pin digital tendría un valor de referencia de 0 Volts o 5 Volts dependiendo de la conexión y se podría realizar la lectura de estado.

arduino-pulsador-1 (1).png

El problema en esta configuración de montaje resulta en que el interruptor solo funcionará si está cerrado. Al abrir el interruptor la terminal o pin digital quedaría completamente desconectada de las referencias de alimentación presentando un estado de alta impedancia.

La lectura de estado que registraría el microcontrolador se vería afectada por diversos factores, como lo son la construcción interna del microcontrolador o el último estado al que haya estado conectado. Ciertamente la lectura de estado estaría indeterminada y podría tomar cualquier valor, resultando en una lectura confusa y muy poco fiable para la implementación en proyectos.  

Para evitar el estado de indeterminación se presenta a continuación otra configuración de montaje.

Configuración de montaje empleando una doble conexión

Ahora bien, se podría optar por conectar la terminal o pin digital a una de las referencias de alimentación y alternarse conforme al estado del interruptor:

Si quisiéramos obtener una lectura un estado ‘LOW’ al cerrar el interruptor, se podría conectar la terminal o pin digital de forma fija a la referencia de 5 Volts, y a 0 Volts a través del interruptor. Al abrir el interruptor se obtendría una lectura en estado ‘HIGH’, y al cerrar el interruptor la conexión se forzaría a 0 Volts con la terminal o pin digital y la lectura mostraría un estado ‘LOW’.

Por el lado contrario, si quisiéramos obtener una lectura en estado ‘HIGH’ al cerrar el interruptor, se podría conectar la terminal o pin digital de forma fija a la referencia de 0 Volts, y a 5 Volts a través del interruptor. Al abrir el interruptor se obtendría una lectura en estado ‘LOW’, y al cerrar el interruptor la conexión se forzaría a 5 Volts con la terminal o pin digital y la lectura mostraría un estado ‘HIGH’.

arduino-pulsador-2.png

El problema de esta configuración de montaje resulta en que al cerrar el interruptor quedan conectadas directamente las referencias de alimentación, es decir, los valores de 0 Volts y 5 Volts, esto implica un cortocircuito con un elevado valor de corriente y un calentamiento apresurado de los componentes y cables.

La forma de evitar el cortocircuito se presenta en la configuración de montaje correcta y se trata en el siguiente punto.

NOTA: Debes de tener mucho cuidado cuando se presenta un cortocircuito ya que además de dañar los componentes electrónicos y de ser peligrosos, pueden llegar a ocasionar algún incendio.

NOTA: Esta configuración planteada tampoco funcionaría ya que la terminal o pin digital estaría conectada a las dos referencias de alimentación, lo que resulta en un estado indeterminado y la medición estaría determinada por la resistencia del cable entre 0 Volts y 5 Volts.

Configuración de montaje empleando las resistencias Pull-Down y Pull-Up

Ahora bien, veremos el correcto montaje del interruptor con las resistencias Pull Up y Pull Down. Cabe mencionar que esta configuración con las resistencias Pull Up y Pull Down es muy común y se empleada en la electrónica, así como en la automatización de procesos.

arduino-pulsador-3.png

La conexión de las resistencias Pull Up y Pull Down se hace con la terminal o pin digital y un voltaje de referencia, para este caso 0 Volts o 5 Volts. Recordemos que la corriente sigue el camino que opone menor resistencia a su paso y dado un solo camino con mayor resistencia la corriente no tiene otra opción más que seguir este camino, es por ello que, dependiendo de la configuración del montaje de las resistencias, éstas fuerzan a un valor de voltaje ‘HIGH’ o ‘LOW’, respectivamente.

En la configuración con resistencia Pull Up se forzará un estado ‘HIGH’ cuando el pulsador se encuentre abierto. Sin embargo, cuando el interruptor se encuentre cerrado, la terminal o pin tendrá un estado ‘LOW’ ya que la corriente es limitada por la resistencia.

En el caso contrario de la configuración con resistencia Pull Down se forzará un estado ‘LOW’ cuando el interruptor se encuentre abierto. Sin embargo, cuando el interruptor se encuentre cerrado, la terminal o pin pasará a un estado ‘HIGH’ ya que la corriente es limitada por la resistencia.

En el esquema que se muestra podemos identificar la configuración de conexión con una resistencia Pull Up y Pull Down, la entrada digital puede considerarse en cualquiera de las terminales o pines digitales de la tarjeta Arduino.

MONTAJE

A continuación, se presenta el montaje para las dos configuraciones con una tarjeta Arduino y una placa Protoboard.

 

Código

La programación resulta muy sencilla, tal y como se realizó en el tutorial Entradas Digitales.

Primero definimos el pin de la tarjeta Arduino que vamos a utilizar, ahora debemos de configurar una I/O digital como entrada con el comando pinMode(), después realizar la lectura con el comando digitalRead() y consecuentemente imprimimos un  mensaje que indica el estado del interruptor.


const int inputPin = 2;
 
int value = 0;
 
void setup() {
  Serial.begin(9600);
  pinMode(inputPin, INPUT);
}
 
void loop(){
  value = digitalRead(inputPin);  //lectura digital de pin
 
  //mandar mensaje a puerto serie en función del valor leido
  if (value == HIGH) {
      Serial.println("Encendido");
  }
  else {
      Serial.println("Apagado");
  }
  delay(1000);
}

NOTA: Aunque la tarjeta Arduino cuenta con resistencias Pull Up internas con un valor de 30 kilo-ohms, no se suelen utilizar por los siguientes motivos:

  • El nivel de autoridad es bajo, lo que significa que el valor de la resistencia es muy alto.
  • Se puede provocar un cortocircuito si la configuración desde la programación es incorrecta, debido a esto se recomienda conectar físicamente la resistencia y así poder verificar la conexión.

¿Cómo elegir la resistencia adecuada?

El valor de la resistencia que requieres depende de dos factores, la intensidad de corriente que circula por el interruptor al ser accionado, así como por el concepto denominado “autoridad del Pull Down-Pull up” que se relaciona con el ruido en la medición.

Lo anterior quiere decir que, una resistencia con un valor muy pequeño tendrá mucha autoridad, aunque permitirá el paso de una mayor corriente, esto se refleja en un mayor consumo y un mayor calentamiento.

Por otro lado, una resistencia con un valor muy grande tendrá poca autoridad, permitiendo el paso de poca corriente y, por ende, obteniendo mediciones incorrectas como consecuencia del ruido.


Erick MéndezArduino, Pulsador