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.
Inicia sesión con una cuenta docente para preparar una sesión. El alumnado entra con un código de clase.
¿Primera vez en LabsLand? Crea tu cuenta de docente
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.
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:
- B1 suelto y potenciómetro por debajo del umbral.
- B1 suelto y potenciómetro en el umbral o por encima.
- B1 mantenido y potenciómetro en el umbral o por encima.
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
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.
Inicia el laboratorio STM32 Arduino desde este bloque. En CodeIDE, abre
main.inoy pega el código inicial de abajo.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.Guarda, pulsa Compilar y espera un resultado correcto. Después pulsa Subir y espera a que la placa reciba el programa inicial.
Abre la consola Serial de CodeIDE a 115200 baudios. Espera líneas repetidas
estado=... pot1=... boton=....Prueba 1 - automático inferior: suelta B1 y coloca
Pot. pot1aproximadamente a un tercio de su recorrido. Copia la lectura ADC y completa la filaposición inferior, B1 suelto.Prueba 2 - automático superior: mantén B1 suelto y coloca
Pot. pot1aproximadamente a dos tercios de su recorrido. Copia la lectura ADC y completa la filaposición superior, B1 suelto.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.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,pot1ybotonde 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.
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.
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
Continúa a LabsLand Teach para usar esta lección con tu alumnado y revisar el acceso disponible para tu cuenta.
¿Primera vez en LabsLand? Crea tu cuenta de docente