Lectura de un pulsador con Arduino


En el capitulo anterior, Pines de entrada/salida digital aprendimos, entre otras cosas, que desde un pin configurado como entrada digital podemos determinar el estado de un sensor que proporcione solamente dos niveles de tensión HIGH y LOW. Y nos habia quedado pendiente la utilización de ese conocimiento para leer el estado de un interruptor o pulsador con Arduino.


Comencemos.


Cómo NO conectar un pulsador a Arduino


Es posible que nuestro primer intento de conectar un pulsador a una placa Arduino sea algo similar a lo siguiente:



Cómo NO conectar un pulsador a Arduino.


Mirando los dos circuitos anteriores, vemos que se ha conectado al pulsador entre un PIN digital de Arduino y un valor de tensión de referencia, en un caso de 0V (o GND) y en el otro de 5V. Al cerrar el pulsador la tensión en el PIN sería el valor de referencia (0V o 5V, dependiendo si es el circuito de la izquierda o el de la derecha). En principio parece una buena idea, y en situaciones muy especiales hasta puede funcionar. Pero tiene un grave problema.


¿Cuál es el problema? Bueno, este tipo de conexión funciona cuando el interruptor está cerrado. Pero falla cuando el interruptor está abierto En efecto, cuando esto ocurre, el pin de arduino queda desconectado del circuito, y no está unido ni a 0V ni a 5V. Este estado, como vimos al final del en el capitulo Pines de entrada/salida digital, se denomina estado de alta impedancia.


Cuando un pin se encuentra en ese estado de alta impedancia, el valor que registra depende de varias cosas. Entre ellas, de las cargas libres que puedan exitir en las cercanias del pin, en el "ruido eléctrico" que pueda generar un motor eléctrico, etcetera. En resumen, un pin que se conecte como vemos en la imágen anterior, estará en un estado indeterminado, es decir, su valor puede ser tanto HIGH como LOW. Por eso es que esta es una forma incorrecta de conectar un pulsador a una placa Arduino.


Conexión correcta de un pulsador a Arduino


Para evitar los estados de alta impedancia es necesario utilizar resistores. Concretamente, utilizaremos (dependiendo de la configuración que elijamos) resistencias de Pull Down o Pull Up. Estas dos conexiones son muy habitual dentro del mundo de la electrónica en general, y veremos más adelante que son útiles en muchisimas situaciones.



Resistores Pull Up y Pull Down


Estos resistores, cuyo valor suele está entre los 4700Ω y 10000Ω (4.7KΩ y 10KΩ), se conectan entre el pin digital de arduino y la referencia de tensión elegida (0V o 5V) y cuando el pulsador está abierto "tiran" ("pull", en inglés) el valor de la tensión presente en el pin a HIGH o LOW ,respectivamente.


Analicemos cada una de las situaciones que vemos en la imágen anterior:


La resistencia de Pull-Up pone en el pin un estado HIGH cuando el pulsador está abierto.Cuando está cerrado el pin se pone a LOW, y la intensidad de la corriente que circula a través del pulsador se ve limitada por este resistor.


La resistencia de Pull-Down pone en el pin un estado LOW cuando el pulsador está abierto.Cuando está cerrado el pin se pone a HIGH y, como en el caso anterior, la intensidad de la corriente que circula a través del pulsador se ve limitada por este resistor.


Si estamos utilizando como entrada el pin D2 el circuito quedaría, en cada caso, como sigue:



Circuito con Pull Up y Pull Down


Y, si utilizamos un protoboard para armar el proyecto, nos quedaría algo asi:



Protoboard, pulsador con Pull Up



Protoboard, pulsador con Pull Down


Programa para la placa Arduino


Ahora si, podemos escribir un programa que realice la lectura el pulsador conectado a nuestro Arduino. El montaje que realizaremos en el protoboard será el correspondiente al resistor Pull Down:



// Definimos la constante entera "inputPin" y le asignamos el valor "2"
const int inputPin = 2;

// Definimos la variable entera "value" y le asignamos el valor "0"
int value = 0;
    
void setup() {
    Serial.begin(9600);       // Establecemos una conexion serie con la PC
    pinMode(inputPin, INPUT); // Definimos el pin como entrada

}
    
void loop(){
    // Realizamos la lectura digital del pin y guardamos el valor en "value"
    value = digitalRead(inputPin);    
    
    //mandar mensaje a puerto serie en función del valor leido
    if (value == HIGH) {
        Serial.println("Encendido");  // Mensaje si el valor es HIGH
    }
    else {
        Serial.println("Apagado");    // Mensaje si el valor es LOW
    }
    delay(1000);                      // Esperamos un segundo.
}

Copiamos el programa anterior en el Arduino IDE, y lo enviamos al Arduino Nano que hemos montado en el protoboard.



Arduino IDE, con el código listo.


Copiamos el programa anterior en el Arduino IDE, y lo enviamos al Arduino Nano que hemos montado en el protoboard. Si abrimos el Monitor Serie del Arduino IDE, veremos que cada un segundo se escribe en la pantalla de la computadora un mensaje con el estado del pulsador. ¿Cómo ocurre esto? Lo veremos en detalle (y lo usaremos mucho) más adelante.



Mensajes en el Monitor Serie.


Agregando un LED


Para finalizar, vamos a realizar un cambio en el circuito anterior, para que en lugar de enviar un mensaje a la computadora, encienda y apague un led cuando se presiona el pulsador.


Conectaremos el LED con su terminal negativa a GND y su terminal positiva a un resistor de 330Ω. El otro extremo de este resistor lo conectaremos al pin D3. El resultado deberia ser algo similar a la siguiente imagen:



Protoboard, pulsador con Pull Down y LED.


Y modificamos el programa, que será más simple que el anterior, para que el estado del LED sea el estado del pulsador. Es decir, si el pin al que hemos conectado el pulsador está en HIGH, el LED se encenderá. Y si el pin está en LOWHIGH, el LED se apagará. Este es el programa que usaremos:



void setup() {
    pinMode(2, INPUT);  // Definimos el pin como entrada (pulsador)
    pinMode(3, OUTPUT); // Definimos el pin como salida (LED)
}
    
void loop(){
    // Ponemos el pin 3, donde está conectado el LED, con el estado
    // que tanga el pin 2, que es donde está conectado el pulsador:
    digitalWrite(3, digitalRead( 2 ) );    
}

Copiamos el programa anterior en el Arduino IDE, y lo enviamos al Arduino Nano que hemos montado en el protoboard.



Arduino IDE, con el código listo.


Copiamos el programa anterior en el Arduino IDE, y lo enviamos al Arduino Nano que hemos montado en el protoboard. Si presionamos el pulsador, deberiamos ver que el LED se enciende. Al soltarlo, se apagará.


Con esto finaliza este capítulo. ¡Nos vemos en el siguiente!