Lección Teach
STM32 Mbed CodeIDE (5/8): aviso de voltaje analógico
El alumnado lee un potenciómetro con AnalogIn de Mbed, convierte el valor en un aviso de voltaje y verifica umbrales en la placa real.
¿Primera vez en LabsLand? Crea tu cuenta de docente
Resultados de aprendizaje
Leer una entrada analógica con
AnalogInde Mbed.Convertir una lectura normalizada en milivoltios aproximados.
Construir un aviso por umbrales usando LED y evidencia serie.
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.
De valor analógico a decisión
9 min
Muchos controladores reales vigilan valores que cambian gradualmente, como una tensión de batería, un nivel de sensor o un mando de ajuste, y deciden cuándo ese valor cruza un umbral de aviso. Un potenciómetro da un valor analógico cambiante y seguro para practicar ese patrón.
Esta lección usa PC_1, uno de los pines de entrada analógica de la guía STM32 Mbed CodeIDE. En la interfaz del laboratorio remoto, es el deslizador Pot. pot2. Mueve ese deslizador despacio y observa cómo cambia el valor de la consola.
Lista de pines para esta lección:
- Entrada analógica: Pot. pot2 -> PC_1
- LED verde 1: PB_13
- LED verde 2: PB_14
- LED verde 3: PB_15
Cómo una lectura analógica se convierte en aviso
Código Mbed:
AnalogIn pot(PC_1);
float reading = pot.read();
int millivolts = (int)(reading * 3300.0f);
AnalogIn pot(PC_1) crea un objeto de entrada Mbed para una tensión medida, de forma parecida a como DigitalOut creó objetos de salida para LED. pot.read() toma una muestra y devuelve un valor normalizado de aproximadamente 0.0 a 1.0. Multiplicar por 3300.0f convierte esa fracción en milivoltios aproximados para un rango de entrada de 3,3 V. El programa imprime milivoltios enteros, no texto en punto flotante.
Umbrales aproximados:
- por debajo de 1000 mV: bajo
- 1000-1999 mV: medio
- 2000-2999 mV: alto
- 3000 mV o más: aviso simulado de sobretensión/escala completa, mostrado con los tres LED verdes parpadeando juntos
El estado bajo también enciende un LED verde. En esta lección, eso significa "nivel de aviso BAJO", no "sin salida".
Comportamiento de aviso esperado:
- < 1000 mV: nivel impreso LOW; un LED verde encendido.
- 1000-1999 mV: nivel impreso MEDIUM; dos LED verdes encendidos.
- 2000-2999 mV: nivel impreso HIGH; tres LED verdes encendidos.
- >= 3000 mV: nivel impreso OVERVOLTAGE; los tres LED verdes parpadean juntos encendiéndose y apagándose.
La función auxiliar set_led() escribe 0 para encender y 1 para apagar porque estas salidas de LED verde son activas en bajo en los ejemplos del laboratorio.
Si la consola serie imprime millivolts=2450, ¿en qué rango de umbral está y qué nivel de aviso debería mostrar el programa?
Ejecutar el monitor de aviso
30 min
Abre el laboratorio STM32 Mbed CodeIDE.
Abre
main.cpp.Reemplaza el archivo con el programa siguiente.
Completa TODO 1, TODO 2 y TODO 3 con los tres límites indicados arriba. No cambies todavía ninguna otra línea.
Guarda, compila y carga. Es la compilación prevista 1 de 2.
Mueve despacio el deslizador
Pot. pot2por posiciones bajas, medias y altas.Registra al menos cuatro lecturas serie y estados de LED.
Si cuesta alcanzar un umbral, registra el valor más cercano y explícalo.
#include "mbed.h"
AnalogIn pot(PC_1);
DigitalOut led1(PB_13, 1);
DigitalOut led2(PB_14, 1);
DigitalOut led3(PB_15, 1);
// TODO 1: sustituye 0 por el límite LOW/MEDIUM en mV.
constexpr int low_medium_boundary_mv = 0;
// TODO 2: sustituye 0 por el límite MEDIUM/HIGH en mV.
constexpr int medium_high_boundary_mv = 0;
// TODO 3: sustituye 0 por el límite HIGH/OVERVOLTAGE en mV.
constexpr int overvoltage_boundary_mv = 0;
void set_led(DigitalOut &led, bool on) {
led = on ? 0 : 1;
}
void set_leds(int count) {
set_led(led1, count >= 1);
set_led(led2, count >= 2);
set_led(led3, count >= 3);
}
int main() {
printf("Analog voltage warning start\n");
bool overvoltage_flash = false;
while (true) {
float reading = pot.read();
int millivolts = (int)(reading * 3300.0f);
if (millivolts < low_medium_boundary_mv) {
overvoltage_flash = false;
set_leds(1);
printf("millivolts=%d level=LOW\n", millivolts);
} else if (millivolts < medium_high_boundary_mv) {
overvoltage_flash = false;
set_leds(2);
printf("millivolts=%d level=MEDIUM\n", millivolts);
} else if (millivolts < overvoltage_boundary_mv) {
overvoltage_flash = false;
set_leds(3);
printf("millivolts=%d level=HIGH\n", millivolts);
} else {
overvoltage_flash = !overvoltage_flash;
set_leds(overvoltage_flash ? 3 : 0);
printf("millivolts=%d level=OVERVOLTAGE flash=%d\n",
millivolts,
overvoltage_flash);
}
ThisThread::sleep_for(1000ms);
}
}
El programa anterior es un único archivo main.cpp continuo. Si tu vista PDF divide el bloque de código entre dos páginas, continúa copiando con la siguiente línea de la página siguiente.
Rellena al menos cuatro filas mientras mueves el potenciómetro. Caso de prueba identifica el rango buscado; Milivoltios serie es la lectura entera de consola en mV; Nivel impreso es la etiqueta exacta; y Estado de LED observado describe la cámara. Elige la valoración de coincidencia entre las opciones. La tabla puede mostrar filas adicionales: deja totalmente vacías las que no uses.
Copia valores de tu propia consola actual. Una línea válida empieza por
millivolts= e incluye el nivel elegido por tu código de umbrales completado.
Para level=OVERVOLTAGE, observa al menos dos segundos antes de completar la fila. flash=1 significa que los tres LED verdes están encendidos para esa muestra; flash=0 significa que los tres están apagados para esa muestra. Registra el comportamiento general como "los tres parpadean", no como una sola imagen fija.
Tabla de evidencia de aviso de voltaje
Completa cuatro filas de rangos distintos. Deja vacías las filas adicionales no usadas.
| Caso de prueba | Milivoltios serie mV | Nivel impreso | Estado de LED observado | ¿Coincidió con el umbral? |
|---|---|---|---|---|
Elige una fila de tu tabla. Cita el valor serie en milivoltios, nombra el rango de umbral al que pertenece y explica si el estado de LED coincidió con ese rango.
Ajustar el comportamiento de aviso
13 min
Elige de forma independiente una de las tres constantes de límite y cámbiala exactamente +200 mV o -200 mV. Mantén los límites en orden creciente para que todos los rangos sigan siendo alcanzables. No copies la elección de otra persona: selecciona el límite y el sentido que tengan sentido para el aviso que quieres ajustar.
Antes de editar, indica el nombre de la constante, su valor original, si sumarás o restarás 200 mV y el valor resultante.
Edita solo esa constante; guarda, compila y carga. Es la compilación prevista 2 de 2. Prueba dos posiciones alrededor del nuevo límite: la lectura más cercana por debajo y la más cercana igual o superior. Copia ambas líneas serie completas. Un valor igual al límite pertenece a la rama superior porque el código usa <. Si el deslizador salta el valor exacto, usa la lectura más cercana de cada lado e indícalo.
Pega las dos líneas serie cercanas al límite. Marca una como por debajo y la otra como igual o superior, e indica la rama impresa en cada una.
Enviar tu código
8 min
Adjunta tu main.cpp final guardado
Pulsa Comprobar archivos guardados, confirma que main.cpp contiene tu versión con el umbral ajustado y luego pulsa Adjuntar código guardado. Después de adjuntar el código, pulsa Enviar entrega al final de la actividad.