Hola, hoy os traigo un tutorial básico acerca de las resistencias pull-up y pull-down, y del modo de entrada INPUT_PULLUP de los pines de Arduino.

Este tipo de resistencia ayudará a que tu Arduino no se vea afectado por le ruido eléctrico y recibas errores en tus mediciones como por ejemplo falsas pulsaciones en un pulsador.

¿Qué es HIGH, LOW o FLOAT en electrónica digital?

¿Cómo?, pero no íbamos a hablar de las resistencias pull-up y pull-down. Si, pero me pareció interesante que supierais los modos en los que pueden estar nuestros pins del Arduino.

En electrónica digital se utilizan 0 y 1 para transmitir datos, y dado que por un cable no puedes enviar un número 0 o un 1, se utilizan valores de voltaje para indicar cada uno de los estados.
Para el estado HIGH o 1 se utilizará un valor de 5v, y para LOW o 0 se utilizará un valor de 0v. Por supuesto nada es perfecto, y la señal no va a ser exactamente a 0v o 5v (resistencia y ruido de los cables por ejemplo). Para evitar fallos de interpretación, los circuitos disponen de un margen de ruido que les permite interpretar las señales como HIGH o LOW a pesar de que el voltaje no sea exactamente 0v o 5v.

FLOAT, es cuando un pin no está en un estado fijo y fluctúa (por ejemplo un cable suelto conectado a un pin de Arduino). Esto puede provocar que el estado de nuestro pin varíe entre 0 y 1, y termine dando falsos positivos.

¿Qué es una resistencia pull-up?

Una resistencia pull-up no es ningún tipo de resistencia especial. Es una resistencia normal conectada de una forma concreta a un pin de nuestro microcontrolador.

En el caso de la resistencia pull-up, el pin de Arduino se conecta a 5v o 3.3v a través de una resistencia.

Esto hace que por defecto tenga un valor HIGH, y que cuando lo conectemos a 0v pulsando el pulsador, pase a tener un estado LOW.

¿Qué es una resistencia pull-down?

Al igual que con la resistencia pull-up, una resistencia pull-down no es una resistencia especial. En este caso esta resistencia está conectada a 0v, por lo que por defecto tendrá un estado LOW.

Al pulsar el pulsador, nuestro pin pasará de un estado LOW a un estado HIGH.

¿Para qué sirve?

Su funcionamiento principal es evitar que el pin de nuestro Arduino esté en un estado FLOAT, ya que fluctuaría entre HIGH y LOW. En este estado recibiríamos datos falsos y nuestro programa podría no funcionar correctamente.

En la imagen se puede observar cómo la falta de resistencia hace que los valores fluctúen. Simplemente acercando la mano al cable ya genera un gran cambio en los datos, por lo que es muy susceptible a las interferencias externas.

En las siguientes imágenes podemos observar cómo añadiendo una resistencia pull-up o pull-down soluciona el problema.

Modo INPUT_PULLUP

No podía terminar el tutorial sin hablar del modo INPUT_PULLUP disponible en los pins de Arduino. Este modo lo que hace es conectar una resistencia de 20kΩ interna de nuestro Arduino, la cual está conectada a 5v (HIGH). Con esto ya no necesitaremos de resistencia pull-up externa y nos la podremos ahorrar en nuestro circuito.

Si te estás preguntando si se podría utilizar INPUT_PULLDOWN, yo también me lo pregunté y me temo no existe dicha funcionalidad. En el caso de que quieras usarla, la única opción de la que dispones es usar una resistencia externa.

Para que veamos cómo funciona utilizaremos el siguiente código de ejemplo:

int analogPin = A3;
int val = 0;

void setup() {
  Serial.begin(9600);
  pinMode(analogPin, INPUT_PULL); // Activamos la resistencia pull-up interna
}

void loop() {
  val = analogRead(analogPin);
  Serial.println(val);
  delay(100);
}

En él simplemente activamos la resistencia pull-up interna y recogemos los datos que nos va dando el pin digital. Esto hace que aún sin conectar nada, el pin esté siempre a HIGH.
En la siguiente imagen se puede observar el resultado que da en un circuito que no tiene nada conectado al pin. Este en lugar de estar en modo FLOAT, está en modo HIGH.

Notas

  • El pin 13 no se puede usar con INPUT_PULLUP, ya está conectado a una resistencia y un led que van soldados en la placa. Se puede usar con una resistencia pull-down externa, pero aún así los datos no serían precisos por lo que desaconsejo su uso.
  • La resistencia usada en ambos sistemas puede ser del valor que creas conveniente. En el ejemplo se usa una resistencia de 10kΩ, lo cual genera una corriente de 0.5μa al pulsar el pulsador.

Pues hasta aquí la guía de resistencias pull-up y pull-down. Como siempre, espero que os haya servido, y estoy abierto a comentarios y correcciones (constructivas).

¡Un saludo!

Daniel Carrasco

DevOps con varios años de experiencia, y arquitecto cloud con experiencia en Google Cloud Platform y Amazon Web Services. En sus ratos libres experimenta con Arduino y electrónica.

Deja un comentario

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.