Una de las cosas más importantes a la hora de trabajar con entradas digitales, es la de asegurar los niveles lógicos que le estamos entregando a Arduino (o cualquier otro dispositivo electrónico).
Por ejemplo si utilizamos un pulsador como entrada, puede suministrar 0V o 5V (lógica TTL) a una entrada digital de Arduino (la que nosotros queramos), para que Arduino detecte un estado alto (HIGH o “1” lógico) o un estado bajo (LOW o “0” lógico) cuando activemos el pulsador, dependiendo de si el pulsador está conectado a GND o VCC (+5V). El esquema de conexión se muestra en la siguiente imagen.
Aquí es cuando nos viene el “problema”, ¿Qué pasa cuando el pulsador no está activado? Pues simplemente que el circuito quedaría abierto, el pin digital queda desconectado de cualquier tensión y permanecería en un estado de alta impedancia. Como en la entrada no tenemos en ese momento ni 0V o 5V, permanecería en un estado lógico “indeterminado”, no siendo el Arduino capaz de reconocer un estado lógico definido (HIGH o LOW), con lo que no sabría qué hacer y como consiguiente se darían una serie de errores.
Para evitar este tipo de incomodas situaciones, disponemos de dos tipos de conexiones que nos solucionan el problema, las conexiones PULL-UP y PULL_DOWN.
En la conexión en «PULL-UP» tendremos a la entrada un nivel alto (+5 v) cuando el pulsador esté desactivado, y al presionar el pulsador el circuito pasará a bajo (0V).
La conexión en «PULL-DOWN» funciona al revés que la anterior, es decir, cuando el pulsador esté desactivado tendremos un nivel bajo a la entrada (0V) y al presionar el pulsador pasara a un nivel alto (+5V).
Al accionar el pulsador estamos conectando directamente los valores de 0V y 5V, lo que significa que estamos causando un cortocircuito. Esto provocaría el paso de una corriente elevada, produciéndose un rápido calentamiento de componentes y conductores. La solución al problema es colocar una resistencia de 10KΩ (aunque también puede ser de 4K7Ω), para no crear un cortocircuito entre la alimentación y masa al presionar el pulsador.
¿Hay que hacer este tipo de conexiones en todas las entradas? No, solo es necesario en las entradas que estemos utilizando, y por supuesto que tengamos configuradas mediante programación.
Aunque estas conexiones se pueden realizar externamente, Arduino (que piensa en todo) incorpora internamente una serie de resistencias preparadas para conexión PULL-UP únicamente, que pueden ser configuradas mediante programación como se muestra en el siguiente “sketch” y que nos sirven para no tener que añadir componentes adicionales a nuestros proyectos.
Lista de Materiales
- Arduino UNO Rev.3
- Cable USB tipo A-B
- LED 5 mm (Cualquier color)
- Pulsador
- Resistencias de 10KΩ y 220Ω
- Protoboard
- Cables de conexión
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 |
/* TITULO: Conexión PULL-UP AUTOR: MARIANO DEL CAMPO GARCÍA (@2015) --> INGENIERO TÉCNICO INDUSTRIAL ESPECIALIDAD ELECTRÓNICA - FACEBOOK: https://www.facebook.com/mariano.delcampogarcia - TWITTER: https://twitter.com/MarianoCampoGa - CORREO: [email protected] DESCRIPCIÓN DEL PROGRAMA Este programa demuestra el uso de INPUT_PULLUP con pinMode(). Se supervisa el estado de un pulsador mediante la comunicación serie entre Arduino y el PC (a través de USB). Uso del monitor serie del IDE: Herramientas --> Monitor serie (9600 baudios). - Cuando la entrada es alta el LED de la placa se apaga (pulsador descactivado)--> "1" en monitor serie. - Cuando la entrada es baja el LED se enciende el led de la placa(pulsador activado)--> "0" en monitor serie. ESQUEMA DE CONEXION +-----+ +----[PWR]-------------------| USB |--+ | +-----+ | | GND/RST2 [ ][ ] | | MOSI2/SCK2 [ ][ ] A5/SCL[ ] | | 5V/MISO2 [ ][ ] A4/SDA[ ] | | AREF[ ] | | GND[ ] | | [ ]N/C SCK/13[ ] | | [ ]IOREF MISO/12[ ] | | [ ]RST MOSI/11[ ]~| | [ ]3V3 +---+ 10[ ]~| | [ ]5v -| A |- 9[ ]~| | [ ]GND -| R |- 8[ ] | | [ ]GND -| D |- | | [ ]Vin -| U |- 7[ ] | | -| I |- 6[ ]~| | [ ]A0 -| N |- 5[ ]~| | [ ]A1 -| O |- 4[ ] | | [ ]A2 +---+ INT1/3[ ]~| | [ ]A3 INT0/2[ ] | PA | [ ]A4/SDA RST SCK MISO TX>1[ ] | | [ ]A5/SCL [ ] [ ] [ ] RX<0[ ] | | [ ] [ ] [ ] | | UNO_R3 GND MOSI 5V ____________/ \_______________________/ NOTAS: - Los pulsadores suelen tener dos pines, que vamos a denominar PA y PB (si es de 4 sólo usamos 2 de ellos). - Conexión PULL-UP del pulsador. - PB conectado a GND. */ int LED = 13; // Definimos el pin para el LED incorporado en la placa Arduino (Marcado como "L"). int pulsador = 2; // Definimos el pin para el pulsador int sensorVal; // Definimos la variable que guarda el valor del pulsador void setup() { Serial.begin(9600); // Comienzo de la comunicación serie pinMode(pulsador, INPUT_PULLUP); // Conexión PULL-UP en el pin digital 2 pinMode(LED, OUTPUT); // Pin digital 13 como salida } void loop() { sensorVal = digitalRead(pulsador); // Leemos el valor del pulsador y lo almacenamos en la variable "sensorVal". Serial.println(sensorVal); // Mostramos a través del monitor serie el valor del pulsador ("0" o "1"). if (sensorVal == HIGH) // Si el pulsador está desactivado (conexión a +5V) { digitalWrite(LED, LOW); // Se apaga el LED de la placa } else // Si el pulsador está activado (Conexión a GND) { digitalWrite(LED, HIGH); // Se enciende el LED de la placa } } |
Video
En conclusión, es importante asegurar los niveles lógicos de las entradas digitales en dispositivos como Arduino para evitar estados lógicos indeterminados y errores en el funcionamiento. Las conexiones PULL-UP y PULL-DOWN son soluciones útiles para garantizar que las entradas digitales tengan un nivel lógico definido cuando no están siendo activadas por un dispositivo externo.
Espero que esta información haya sido útil para entender cómo asegurar los niveles lógicos en las entradas digitales de dispositivos como Arduino. Si tienen alguna pregunta o necesitan más detalles, no dude en hacerme saber. Siéntete libre de dejar tus comentarios y preguntas en la caja de comentarios a continuación. ¡Me encantaría leer lo que tienes que decir!