L7: El pulsador

Conexión de un pulsador a la placa de desarrollo. Obtención de su estado mediante polling.

El pulsador

Qué vas a aprender en esta lección

En esta lección trabajaremos:

  • Qué es un pulsador y cómo funciona.
  • Diferencia entre dispositivos de entrada y de salida.
  • Tomar decisiones en nuestros programas: el bloque “si…entonces…si no”.
  • Leer el estado de un pulsador desde nuestro programa para controlar un LED.

Requisitos previos

Para poder seguir esta lección debes conocer el montaje básico con LED trabajado en la Lección 1: Mi primer proyecto, la Lección 2: El diodo LED y la Lección 3: El diodo LED (2).

Explicación teórica

¡Quiero saber más!

Entradas y salidas

En las lecciones anteriores hemos aprendido a controlar LEDs, que son dispositivos que reciben información desde nuestra placa de desarrollo. Cuando el programa dice “enciende el LED”, la placa envía una señal de salida. El LED es, por tanto, un dispositivo de salida: recibe órdenes desde el programa.

Pero, ¿qué ocurre si queremos que nuestro programa reaccione a algo que pasa en el mundo real? Por ejemplo, que encienda un LED cuando alguien pulsa un botón. Para eso necesitamos dispositivos de entrada: dispositivos que envían información hacia la placa de desarrollo para que el programa pueda leerla.

El pulsador (o botón) es uno de los dispositivos de entrada más sencillos. Lo pulsamos y nuestro programa puede detectarlo.

SalidaEntrada
DirecciónDel programa al exteriorDel exterior al programa
EjemplosLED, motor, zumbadorPulsador, sensor de luz
¿Quién decide?El programaEl usuario o el entorno

¿Qué es un pulsador?

Un pulsador o botón es un componente electrónico muy sencillo que funciona como un interruptor momentáneo. Cuando lo presionamos, cierra el circuito y permite que la corriente eléctrica fluya. Cuando lo soltamos, el circuito se abre y la corriente deja de fluir.


Pulsador y su funcionamiento interno

A diferencia de un interruptor convencional (como el de la luz de una habitación), el pulsador sólo está activo mientras lo mantenemos presionado. En cuanto lo soltamos, vuelve a su posición original.

En el diagrama puedes ver que:

  • No presionado: el circuito está abierto (no pasa corriente).
  • Presionado: el circuito se cierra (la corriente puede circular).

Tomar decisiones: el bloque “si…entonces”

Hasta ahora, nuestros programas ejecutaban una secuencia de bloques uno tras otro, siempre de la misma manera. Pero los programas más interesantes son los que pueden tomar decisiones y hacer cosas diferentes según lo que esté ocurriendo.

Para tomar decisiones usamos el bloque de lógica llamado “si” (en inglés if). Este bloque funciona así:

  • si algo es verdad -> hacer una cosa
  • si no -> hacer otra cosa diferente

Por ejemplo, pensemos en cómo decidimos si llevar paraguas:

  • Si está lloviendo -> entonces cojo el paraguas.
  • Si no está lloviendo -> entonces dejo el paraguas en casa.

En nuestro caso:

  • Si el pulsador está presionado -> entonces enciendo el LED.
  • Si no está presionado -> entonces apago el LED.

Este tipo de decisión se llama condicional y es uno de los conceptos más importantes en programación. ¡A partir de ahora nuestros programas serán mucho más interesantes!

La resistencia pull-up

Cuando conectamos un pulsador a un pin GPIO configurado como entrada, surge un problema: cuando el pulsador no está presionado, el pin queda “al aire” (no está conectado ni a V+ ni a GND). En esta situación, el pin podrá leer valores de manera impredecible, a veces ON y a veces OFF, sin que nosotros hayamos tocado nada.

Para evitar este problema, necesitamos asegurarnos de que el pin tenga siempre un valor conocido. Para ello podemos utilizar una resistencia pull-up: una resistencia que conectamos entre el pin GPIO y el voltaje positivo (3V3). De esta manera:

  • Cuando el pulsador no está presionado: el pin lee voltaje positivo a través de la resistencia -> el valor es ON.
  • Cuando el pulsador está presionado: el pin se conecta directamente a GND -> el valor es OFF (GND “gana” porque está conectado directamente, sin resistencia).

Parte Práctica

Necesitas los siguientes materiales:

  • Placa de desarrollo ESP32.
  • Cable de conexion USB.
  • Placa de prototipos.
  • Pulsador (botón).
  • LED rojo.
  • Resistencia de 100 Ohm.
  • Cables de conexión.

Esquema electrónico

Diagrama de conexión


Conexión de los componentes en la placa de prototipos

Paso a paso
  1. Conecta un cable negro entre el conector GND de la placa de desarrollo y la línea azul de la placa de prototipos. La línea azul será nuestra línea de 0 voltios, referencia o GND.
  2. Conecta un cable rojo entre el conector 3V3 de la placa de desarrollo y la línea roja de la placa de prototipos. La línea roja será nuestra línea de voltaje positivo (V+).
  3. Coloca el pulsador en la placa de prototipos de manera que quede a caballo entre los dos bloques centrales (cruzando el canal central).
  4. Conecta un cable desde el pin D4 (GPIO4) de la placa de desarrollo hasta uno de los terminales del pulsador.
  5. Conecta un cable negro desde el otro terminal del pulsador hasta la línea azul de GND.
  6. Conecta un cable rojo desde el pin D2 (GPIO2) de la placa de desarrollo hasta una línea libre del bloque central de la placa de prototipos.
  7. Coloca la resistencia de 100 Ohm de manera que un terminal esté en la misma línea que el cable del paso anterior.
  8. Conecta el LED rojo: el ánodo en la misma línea que el segundo terminal de la resistencia y el cátodo en una línea diferente.
  9. Conecta un cable negro entre la línea del cátodo del LED y la línea azul de GND.
  10. Conecta la placa de desarrollo al ordenador con el cable USB.

Código

¡Quiero saber más!

En esta lección vamos a utilizar por primera vez los bloques de lógica. Estos bloques nos permiten tomar decisiones en nuestro programa basándonos en condiciones que evaluamos en tiempo real.

El bloque “si” tiene dos partes principales:

  • Una condición: algo que puede ser verdadero o falso. En nuestro caso, comprobaremos si el pulsador está presionado.
  • Una acción: lo que queremos que ocurra si la condición es verdadera.

Además, podemos añadir una parte “si no” que se ejecutará cuando la condición sea falsa. Para añadirla, haz clic en el icono de engranaje del bloque “si” y arrastra un bloque “si no” dentro de la estructura.

El bloque de comparación "=" nos permite comprobar si dos valores son iguales. Lo usaremos para comparar el valor leído del botón con ON (presionado).

Encender el LED al pulsar el botón. Bloques de alto nivel.

Siguiendo la mecánica que aprendiste en lecciones anteriores, construye y ejecuta el siguiente sketch:

Paso a paso
  1. Haz clic en Dispositivos y arrastra un bloque “LED con nombre” al bloque de configuración. Escribe “MiLED” como nombre y selecciona el pin GPIO2. Si quieres usar el LED interno de la placa de desarrollo, usa el pin GPIO2. Si prefieres usar un LED externo como en la Lección 3, selecciona el pin al que lo hayas conectado.

  2. Vuelve a hacer clic en Dispositivos y arrastra un bloque “Botón/interruptor con nombre” al bloque de configuración, debajo del anterior. Escribe “MiBoton” como nombre y selecciona el pin GPIO4.

  3. Ahora vamos a añadir la lógica de decisión. Haz clic en el icono Lógica de la caja de herramientas y arrastra un bloque “si” al bucle principal.

  4. Para añadir la parte “si no”, haz clic en el icono del engranaje del bloque “si” y arrastra un elemento “si no” dentro de la estructura que aparece. Después cierra la ventana.

  5. Necesitamos una condición para el bloque “si”. Haz clic en Lógica y arrastra un bloque de comparación (el que tiene el símbolo =) a la zona de condición del bloque “si”.

  6. En el lado izquierdo de la comparación, haz clic en Dispositivos y arrastra un bloque “leer valor del botón” (asegúrate de que muestra “MiBoton”).

  7. En el lado derecho de la comparación, haz clic en Dispositivos y selecciona un bloque ON/OFF. Ponlo en ON.

  8. Dentro de la sección “hacer” del bloque “si”, añade un bloque “poner LED” con el nombre “MiLED” y valor 100 (encendido al 100%).

  9. Dentro de la sección “si no”, añade otro bloque “poner LED” con el nombre “MiLED” y valor 0 (apagado).

  10. Pulsa en el botón Ejecutar y espera a que el sketch se compile y se transfiera a la placa. Si todo ha ido bien, el LED se encenderá cuando mantengas presionado el pulsador y se apagará cuando lo sueltes.

Encender el LED al pulsar el botón. Bloques de bajo nivel.

Construye y ejecuta el siguiente sketch:

Paso a paso
  1. Haz clic en Dispositivos y arrastra un bloque “configurar pin” al bloque configuración. Especifica pin número 4 y ponlo como entrada con pull-up. Esto configura el pin GPIO4 como entrada y activa la resistencia pull-up interna.
  2. Arrastra otro bloque “configurar pin”. Especifica pin número 2 y ponlo como salida.
  3. Haz clic en Lógica y arrastra un bloque “si” al bucle principal. Añade la parte “si no” como en el ejercicio anterior.
  4. Para la condición, usa un bloque de comparación con “leer valor de pin 4” en el lado izquierdo y OFF en el derecho. Con la entrada con pull-up, el pin lee OFF cuando el pulsador está presionado.
  5. Dentro de “hacer”, añade un bloque “poner pin 2 a ON”.
  6. Dentro de “si no”, añade un bloque “poner pin 2 a OFF”.
  7. Pulsa Ejecutar y comprueba que funciona igual que con los bloques de alto nivel.

Ejercicios adicionales o retos

  1. Modifica el sketch para que el LED parpadee mientras mantienes el botón presionado en lugar de quedarse encendido de manera fija.
  1. Conecta un segundo LED de otro color a un pin GPIO diferente. Programa el sketch para que, cuando el botón esté presionado, se encienda un LED y se apague el otro. Cuando el botón no esté presionado, que se intercambien.

  2. Conecta dos pulsadores. Programa el sketch para que cada pulsador controle un LED diferente de manera independiente.

Resumen de lo aprendido

  • Hemos aprendido la diferencia entre dispositivos de entrada (como el pulsador) y de salida (como el LED).
  • Hemos conectado un pulsador a la placa de desarrollo y aprendido a leer su estado desde nuestro programa.
  • Hemos utilizado el bloque de lógica “si…entonces…si no” para que nuestro programa tome decisiones basándose en el estado del pulsador.
  • Hemos aprendido qué es una resistencia pull-up y por qué es necesaria para leer correctamente el estado de un pulsador.
  • Hemos utilizado tanto bloques de alto nivel como de bajo nivel para conseguir el mismo resultado.

Próximos pasos

  • Aprende a leer el estado de un pulsador mediante interrupciones en la lección 8.

Soluciones a ejercicios adicionales

Mostrar

Parpadeo del LED mientras el botón está presionado

Para conseguir que el LED parpadee en lugar de quedarse encendido cuando presionamos el botón, añadimos la secuencia de parpadeo dentro de la parte “hacer” del bloque “si”.

LED parpadeando mientras el botón está presionado

Cuando el botón está presionado (ON), el programa ejecuta la secuencia:

  1. Encender LED al 100%.
  2. Esperar 500 milisegundos.
  3. Apagar LED (valor 0).
  4. Esperar 500 milisegundos.

Cuando el botón no está presionado, el LED permanece apagado. De esta forma, el LED parpadea solo mientras mantenemos el botón presionado.