P2: Controla el LED RGB desde el ordenador

Control de un LED RGB mediante órdenes enviadas desde el monitor COM del ordenador.

Controla el LED RGB desde el ordenador

Qué vas a repasar en este proyecto

En este proyecto combinaremos lo aprendido en las tres lecciones anteriores:

  • Control de los canales rojo, verde y azul de un LED RGB.
  • Recepción y envío de texto por el puerto COM.
  • Uso de una variable para guardar un mensaje.
  • Uso de condiciones para decidir qué hacer según la orden recibida.

Requisitos previos

Este proyecto pone en práctica los conceptos aprendidos en L4: LED de intensidad variable, L5: El LED RGB, L6: El puerto serie y L7: El pulsador.

Enunciado

Construye un programa que permita controlar el color del LED RGB desde el ordenador. En el monitor COM podrás escribir estas órdenes:

OrdenQué debe hacer la placa
rojoEncender el LED en rojo.
verdeEncender el LED en verde.
azulEncender el LED en azul.

El LED comenzará apagado y mantendrá el color elegido hasta que llegue otra orden válida. Cada vez que cambie de color, la placa enviará una confirmación, por ejemplo: Color cambiado a rojo.

Si recibe una orden desconocida, conservará el color y responderá: Orden desconocida. Usa: rojo, verde o azul.

Antes de empezar

En L6 hicimos un programa de eco: la placa devolvía el texto recibido. Ahora ese texto será una orden que provoca una acción física.

Piensa en el recorrido de una orden: escribes rojo en el ordenador, la placa guarda el texto en una variable, comprueba qué palabra has enviado, cambia el LED y responde por COM.

Prepara una tabla con cada orden, los valores R, G y B que necesita y el mensaje de confirmación. Decide también qué debe ocurrir si escribes una palabra como hola.

Pistas

Consulta estas pistas solo si te hace falta. ¡Primero inténtalo sin mirar!

Ver pistas
  • Configura el puerto COM a 115200 bps: el monitor COM funciona siempre a esa velocidad.
  • Conserva el montaje de L5: GPIO4 para rojo, GPIO16 para verde y GPIO17 para azul.
  • Crea una variable llamada Mensaje con valor inicial "" (texto vacío).
  • Comprueba si hay datos disponibles antes de leer. Lee el texto una sola vez y guárdalo en Mensaje.
  • Usa el bloque de comparación = de Lógica para comprobar si Mensaje es igual al texto rojo, verde o azul.
  • Amplía un bloque si con dos ramas si no, si y una rama final si no para la orden desconocida.
  • Para cada color, pon su canal a 100 y los otros dos a 0.
  • Escribe las órdenes en minúsculas, sin comillas ni espacios al principio o al final.
  • No necesitas esperas: si no hay una nueva orden, no cambies el LED.

Solución

Ver solución

Materiales

  • Placa de desarrollo ESP32.
  • Placa de expansión BatSTEM.
  • Cable de conexión USB.
  • Placa de prototipos.
  • LED RGB de 4 patas y cátodo común.
  • 3 resistencias de 100 Ohm.
  • Cables de conexión.
  • Ordenador con acceso a BatSTEM Cloud.

Montaje

Usa el mismo montaje de L5: El LED RGB:

  1. Conecta GND de la placa de expansión a la línea azul de la placa de prototipos.
  2. Coloca el LED RGB con cada pata en una línea diferente.
  3. Conecta la pata común a GND.
  4. Conecta el canal rojo a GPIO4 mediante una resistencia de 100 Ohm.
  5. Conecta el canal verde a GPIO16 mediante otra resistencia de 100 Ohm.
  6. Conecta el canal azul a GPIO17 mediante otra resistencia de 100 Ohm.
  7. Conecta la placa al ordenador.

Programa

En el bloque configuración:

  1. Configura el puerto COM a 115200 bps.
  2. Crea un LED RGB llamado MiLEDRGB y asigna GPIO4 a R, GPIO16 a G y GPIO17 a B.
  3. Crea la variable Mensaje con valor inicial "".
  4. Pon los tres canales del LED a 0 para que comience apagado.

En el bucle principal:

  1. Añade un bloque si con la condición hay datos disponibles en el puerto COM.
  2. Dentro, pon Mensaje al valor de leer texto del puerto COM.
  3. A continuación, añade otro bloque si. Usa su engranaje para añadir dos ramas si no, si y una rama si no.
  4. Compara Mensaje con rojo, verde y azul en las tres condiciones. En cada rama, cambia los tres canales del LED y escribe la confirmación correspondiente, con salto de línea.
  5. En la rama final si no, escribe Orden desconocida. Usa: rojo, verde o azul. No cambies el LED en esa rama.

Programa de bloques que recibe una orden por COM, selecciona el color del LED RGB y confirma el resultado.

CondiciónRGBRespuesta por COM
Mensaje = rojo10000Color cambiado a rojo
Mensaje = verde01000Color cambiado a verde
Mensaje = azul00100Color cambiado a azul
Cualquier otra ordenSin cambiosSin cambiosSin cambiosOrden desconocida. Usa: rojo, verde o azul

La comparación = pregunta si dos valores son iguales; no cambia la variable. El bloque poner Mensaje a…, en cambio, guarda un nuevo valor. Las ramas si / si no, si / si no permiten ejecutar únicamente la respuesta correspondiente a la orden recibida.

Todo el procesamiento del mensaje debe quedar dentro de si hay datos disponibles. Así, la placa responde una vez por orden y no llena continuamente el monitor con el mismo mensaje.

Comprueba el resultado

  1. Ejecuta el sketch y abre Mon. COM. El LED debe comenzar apagado.
  2. Escribe rojo y envíalo: el LED debe ponerse rojo y aparecer Color cambiado a rojo.
  3. Espera unos segundos sin enviar nada: el color debe mantenerse y no deben aparecer nuevas respuestas.
  4. Envía verde y después azul. Comprueba el color y la confirmación en cada caso.
  5. Envía hola: debe aparecer la ayuda con los comandos válidos y el LED debe seguir azul.
  6. Envía rojo de nuevo para comprobar que el programa sigue aceptando órdenes después de una desconocida.

Retos opcionales

  1. Añade la orden apagar para poner los tres canales a 0.
  2. Añade amarillo, cian y magenta mezclando dos canales, como en L5.
  3. Añade rojo suave para poner R a 20, G a 0 y B a 0. Compara su intensidad con la orden rojo.
  4. Añade una orden ayuda que muestre los comandos disponibles sin cambiar el color.
  5. Amplía las confirmaciones para que también indiquen los valores R, G y B utilizados.

Recuerda ampliar el mensaje de comandos válidos cuando añadas nuevas órdenes.

Resumen del proyecto

  • Hemos enviado órdenes desde el ordenador para controlar un componente físico.
  • Hemos guardado el texto recibido en una variable y lo hemos comparado con varias palabras.
  • Hemos usado condiciones para seleccionar el color de un LED RGB.
  • Hemos confirmado las acciones y respondido a órdenes desconocidas por el monitor COM.
  • Hemos mantenido el estado del LED hasta recibir una nueva orden válida.