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.
¿Primera vez que activas Teach? Puedes realizar una sesión de clase sin costo. 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:
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.
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, 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.
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
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.
¿Primera vez en LabsLand? Crea tu cuenta de docente