Teach Lecciones con laboratorios remotos

Lección Teach

STM32 con Arduino API (4/4): mini-controlador

El alumnado combina potenciómetro, decisiones, salida RGB/LED y evidencia serie para construir un mini-controlador STM32 con API Arduino.

  • STM32 Nucleo (Arduino)
  • 60 min
  • Secundaria (15–18 años)
  • Español
  • Sistemas embebidos

¿Primera vez que activas Teach? Puedes realizar una sesión de clase sin costo. El alumnado entra con un código de clase.

Mapa de entradas y salida con el potenciómetro pot1 leído en PC0 y el botón B1 leído en PC5 entrando en main.ino, que gobierna las salidas RGB PA8, PA9 y PA10.
STM32 Nucleo (Arduino)

Resultados de aprendizaje

  • Diseñar un mini-controlador con entrada, decisión, salida y modo manual.

  • Elegir y justificar un umbral usando lecturas reales.

  • Probar las tres ramas de una decisión y comunicar el resultado.

Vista previa de la actividad del estudiante

Contenido de la actividad

Solo vista previa. En una sesión de clase, los estudiantes pueden completar respuestas y entregar su trabajo al docente.

1

Entender el reto y diseñar pruebas

10 min

Tu mini-controlador tendrá tres estados:

- Potenciómetro por debajo del umbral: color verde.
- Potenciómetro por encima del umbral: color rojo.
- Botón pulsado: color azul, aunque el potenciómetro indique otra cosa.

El reto no es solo copiar el programa. Al final debes tener un mini-controlador
probado: lee una entrada, decide un estado, cambia el RGB, escribe evidencia por
Serial y conserva una mejora pequeña que puedas defender.

Antes de programar, piensa como si fueras a probar un producto pequeño. Una
buena prueba debe decir qué vas a tocar, qué color esperas ver y qué dato de
Serial confirmaría que el controlador tomó la decisión correcta.

El código inicial imprimirá líneas con esta forma exacta:
estado=<verde/rojo/manual> pot1=<lectura ADC> boton=<suelto/pulsado>.

Escribe tres líneas separadas, una por cada caso. Usa este formato:
Caso N | RGB esperado: ... | Serial: estado=... boton=...

Completa una línea para cada situación:

1. B1 suelto y potenciómetro por debajo del umbral.
2. B1 suelto y potenciómetro en el umbral o por encima.
3. B1 mantenido y potenciómetro en el umbral o por encima.

2

Construir y comprobar el mini-controlador

27 min

La función setRgb(rojo, verde, azul) evita repetir tres líneas cada vez que
cambias de color. Cada argumento es un brillo PWM de 0 a 255. El umbral
inicial es 600 cuentas ADC, pero debes compararlo con lecturas reales.

bool guarda true o false. Como el botón 1 es activo en LOW, el booleano
botonPulsado es verdadero cuando la lectura es LOW. if / else if / else
comprueba ramas de arriba abajo y ejecuta solo la primera verdadera, por eso la
condición manual debe ir primero. const char* estado guarda una etiqueta de
texto breve para Serial; no necesitas modificar esa sintaxis.

Vas a copiar un programa inicial, probarlo y ajustarlo. El resultado final debe ser
un controlador pequeño pero completo: lee POT_1, decide con UMBRAL, permite
modo manual con BOTON_1, cambia el RGB y escribe por Serial qué estado eligió.

Entradas y salida usadas por el mini-controlador

Mapa de entradas y salida con el potenciómetro pot1 leído en PC0 y el botón B1 leído en PC5 entrando en main.ino, que gobierna las salidas RGB PA8, PA9 y PA10.

El montaje remoto ya está cableado. Este mapa contiene solo las dos entradas y
los tres canales RGB usados en el reto; no debes cambiar ninguna conexión.

  1. Inicia el laboratorio STM32 Arduino desde este bloque. En CodeIDE, abre main.ino y pega el código inicial de abajo.

  2. Sustituye TODO 1 por una expresión booleana verdadera solo cuando se solicita el modo manual. Sustituye TODO 2 por una comparación verdadera cuando la lectura ADC está en el umbral o por encima. Busca TODO; no puede quedar ninguno.

  3. Guarda, pulsa Compilar y espera un resultado correcto. Después pulsa Subir y espera a que la placa reciba el programa inicial.

  4. Abre la consola Serial de CodeIDE a 115200 baudios. Espera líneas repetidas estado=... pot1=... boton=....

  5. Prueba 1 - automático inferior: suelta B1 y coloca Pot. pot1 aproximadamente a un tercio de su recorrido. Copia la lectura ADC y completa la fila posición inferior, B1 suelto.

  6. Prueba 2 - automático superior: mantén B1 suelto y coloca Pot. pot1 aproximadamente a dos tercios de su recorrido. Copia la lectura ADC y completa la fila posición superior, B1 suelto.

  7. Prueba 3 - anulación manual: conserva esa posición superior, pulsa y mantén B1 hasta que Serial indique estado manual, suéltalo y completa la fila posición superior, B1 mantenido. Esta prueba comprueba que el botón tiene prioridad.

  8. Completa las tres primeras filas de la tabla. En la pregunta que aparece justo debajo, calcula el punto medio redondeado de las dos lecturas ADC con B1 suelto; será el umbral calibrado para el centro del rango elegido.

#include <Arduino.h>

const int POT_1 = PC0;
const int BOTON_1 = PC5;  // Activo en LOW
const int RGB_ROJO = PA8;
const int RGB_VERDE = PA9;
const int RGB_AZUL = PA10;

const int UMBRAL = 600;

void setRgb(int rojo, int verde, int azul) {
  analogWrite(RGB_ROJO, rojo);
  analogWrite(RGB_VERDE, verde);
  analogWrite(RGB_AZUL, azul);
}

void setup() {
  pinMode(BOTON_1, INPUT);
  pinMode(RGB_ROJO, OUTPUT);
  pinMode(RGB_VERDE, OUTPUT);
  pinMode(RGB_AZUL, OUTPUT);
  Serial.begin(115200);
}

void loop() {
  int lectura = analogRead(POT_1);
  bool botonPulsado = digitalRead(BOTON_1) == LOW;
  const char* estado;

  if (TODO_CONDICION_MANUAL) { // TODO 1: verdadera solo si se solicita modo manual
    setRgb(0, 0, 255);
    estado = "manual";
  } else if (TODO_CONDICION_ALTA) { // TODO 2: lectura en el umbral o por encima
    setRgb(255, 0, 0);
    estado = "rojo";
  } else {
    setRgb(0, 180, 0);
    estado = "verde";
  }

  Serial.print("estado=");
  Serial.print(estado);
  Serial.print(" pot1=");
  Serial.print(lectura);
  Serial.print(" boton=");
  if (botonPulsado) {
    Serial.println("pulsado");
  } else {
    Serial.println("suelto");
  }

  delay(100);
}

Usa seis filas. Las filas 1-3 documentan el programa inicial y deben completarse
antes del cambio. Las filas 4-6 repiten los mismos tres casos tras la
calibración y la mejora diagnóstica. Cada fila debe conectar entrada, decisión y evidencia de hardware real:

- Filas 1 y 4: B1 suelto, potenciómetro en la posición de calibración inferior.
- Filas 2 y 5: B1 suelto, potenciómetro en la posición de calibración superior.
- Filas 3 y 6: B1 mantenido en la posición de calibración superior.
- En Valores vistos por Serial, copia estado, pot1 y boton de forma
aproximada.
- En las filas mejoradas copia también el nuevo campo margen. Reproduce cada
posición con una diferencia máxima aproximada de 30 cuentas respecto a su lectura inicial.

Versión Prueba Valores vistos por Serial (pot1 en cuentas ADC) Umbral cuentas ADC Salida esperada Salida observada Veredicto

Usando las dos filas de calibración con B1 suelto, calcula (lectura inferior + lectura superior) / 2 y redondea a una cuenta ADC entera. Indica ambas lecturas, el cálculo y el umbral calibrado final. No edites UMBRAL hasta escribir este cálculo.

3

Calibrar y añadir un diagnóstico

15 min

Sustituye 600 en UMBRAL por tu punto medio redondeado. Después añade un
diagnóstico de Serial justo después del valor pot1: imprime margen= seguido
de lectura - UMBRAL. Un margen negativo significa que está por debajo del
límite calibrado; cero o positivo significa que está en él o por encima.

Guarda, compila, sube y vuelve a abrir Serial a 115200 baudios. Repite los mismos
tres casos de prueba y anota las filas mejoradas 4-6. El diagnóstico solo es útil
si el estado visible, estado y el signo de margen coinciden; el modo manual
debe seguir teniendo prioridad aunque el margen sea positivo.

Indica tu umbral calibrado y cita las dos instrucciones nuevas de Serial. Después usa las filas 4-6 para demostrar que los márgenes negativo/positivo coincidieron con las ramas automáticas y que la anulación manual conservó la prioridad.

4

Presentar el controlador

8 min

Entrega tu main.ino final

Guarda main.ino antes de adjuntarlo. El snapshot debe mostrar el
mini-controlador final, con el umbral calibrado, la salida margen de Serial y
ningún token TODO.

Presenta el mini-controlador en 4-6 frases: indica su finalidad y entrada; resume las tres decisiones y salidas; cita el resultado de las seis filas; explica qué mostró el signo de margen; y nombra una limitación realista.

Convierte esta vista previa en una sesión de clase real

Activa LabsLand Teach para usar esta lección con tus estudiantes. La primera vez que actives Teach, podrás realizar una sesión de clase sin costo.