RETO 2: JUGANDO CON ENTRADAS Y SALIDAS. INPUT DIGITAL (BOTÓN) + OUTPUT DIGITAL (LED)

En este segundo reto comenzamos a trabajar las entradas digitales con botones.

En primer lugar es fundamental comprender el funcionamiento básico de un botón. Fíjate bien en el esquema eléctrico del mismo, prestando atención a las 4 garras de comunicación (nº1 a nº 4) y la garra nº5 que montaremos en la ranura que divide la placa de prototipado. El funcionamiento consiste básicamente en que al pulsarlo deja pasar la corriente (1 o HIGH o 5V), mientras que si sueltas el pulsador no deja pasar la corriente (0 o LOW o 0V), esto es la esencia de una señal digital.

Push button arduino.

Montaremos un botón básico teniendo en cuenta que no podemos conectar la salida del botón a la entrada (esto sería por ejemplo conectar el cable del input digital a la patita nº 3 y el cable de los 5v a la garra nº4, o lo mismo con las garras nº1 y nº2), ya que estaría comunicado continuamente -leyendo HIGH- sin la interrupción del botón. También tendremos que poner una resistencia en el medio, que a su vez irá conectado a GND (masa). Esta resistencia se denomina de Pull-Down, ya que fuerza LOW cuando el pulsador está abierto, en cambio cuando está cerrado el pin digital se pone a HIGH, y la intensidad que circula se ve limitada por esta resistencia (10KΩ).

Conectamos el valor de entrada del botón por ejemplo al pin digital nº 2 de Arduino (input). En otra garra del botón conectaremos un cable a 5V teniendo en cuenta lo anteriormente explicado. El esquema de montaje sería el siguiente:

.

Montaje electrónico botón en arduino

.

Para comprobar que nuestro montaje funciona y visualizar el estado del botón, podremos mostrar su valor a través del puerto serie de Arduino. El puerto serie es la principal forma de comunicación entre nuestro Arduino y el ordenador. Un puerto serie envía la información  bidireccionalmente mediante una secuencia de bits utilizando como mínimo dos conectores para hacer esta comunicación: RX (recepción) y TX (transmisión). En concreto, la placa Arduino UNO los pines empleados por defecto para ello son 0 (RX) y 1 (TX). A continuación puedes comprobar cómo ver el valor del monitor serie en pantalla. En este caso tenía el botón presionado (1).

.

monitor-serie-arduino

.

Una vez realizado el montaje, cargamos desde Arduino IDE, el siguiente programa que podremos encontrar en Ejemplos > Basics > DigitalReadSerial o también aquí. Del código fuente merece la pena comentar las siguientes instrucciones fundamentales:

.

int pushButton = 2;  //declaramos esta variable para la entrada digital nº2 de Arduino.

Serial.begin(9600);  //Iniciamos el puerto serie a la velocidad que va a trabajar, siempre 9600 Baudios.

pinMode(pushButton, INPUT);  //declaramos que la entrada digital la tratamos como entrada de datos, puesto que será el botón quien envíe datos hacia Arduino. El led, en cambio, lo tratamos como salida (output). 

int buttonState = digitalRead(pushButton);  //instrucción para leer el estado del botón que puede ser HIGH o LOW. El resultado lo guardamos en la variable buttonState (de ahí que sea una variable, es decir, varía pudiendo ser o 0 ó 1).

Serial.println(buttonState);  //con esta instrucción visualizamos el estado del botón (uno o cero) en la pantalla del monitor serie y podremos comprobar si el montaje está bien.

.

Si todo va bien, veremos apareciendo en nuestro monitor serie un 0 continuamente, en cambio, mientras pulsemos el botón, aparecerá un 1.

Una vez que tenemos montado y funcionando correctamente nuestro montaje sólo con el botón, vamos a hacer el siguiente paso natural que será encender y apagar un led en función de si pulsamos un botón o no.

El esquema de montaje sería de la siguiente forma:

.

Esquema montaje botón simple + 1 led Arduino

.

.Con el montaje hecho, podemos cargar el código fuente desde Ejemplos > Digital > Button. De este programa, merece la pena explicar en detalle las siguientes instrucciones:

.

const int ledPin = 13; //declaramos esta variable para decir que conectaremos el led al pin digital 13

pinMode(ledPin, OUTPUT); //declaramos este pin digital como salida, puesto que será Arduino quien envíe información hacia el led. En este caso, un 1 para encenderlo, y un 0 para apagarlo.

if (buttonState == HIGH) {

// estructura condicional donde preguntamos si el botón está pulsado, entonces encendemos el led

digitalWrite(ledPin, HIGH);

}

else {

//en caso contrario apagamos el led

digitalWrite(ledPin, LOW);

}

.

Llegados a este punto, y con el código cargado en Arduino, es momento de comprobar si se enciende nuestro led al pulsar el botón.

.

¿¿ CIRCUITO ELÉCTRICO O ELECTRÓNICO ??

Ahora que ya vas por el segundo reto y tus conocimientos de electrónica y circuitos eléctricos empiezan a ser muy respetables, te propongo el ejercicio de que interpretes el siguiente montaje, lo analices y pienses qué sucedería y cómo debería ser el código que subamos a esta placa de Arduino. Ojo! No es oro todo lo que reluce…

.

¿circuito eléctrico o electrónico?

.

EXTRA BALLS

Como retos extra te propongo añadir un segundo led para hacer un montaje tipo semáforo: un led verde que se encienda al pulsar el botón, y el otro led rojo encendido cuando no esté pulsado.

  1.  Semáforo temporalizado con luz roja y verde (la verde que dure 5 segundos).
  2. Semáforo temporalizado con intermitencia de la luz verde antes de pasar a roja y a dos velocidades distintas (a modo de aviso de que el tiempo del verde se termina) programándolo con la estructura de control FOR.

.