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.
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
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.
Mapa de pin analógico y LED de aviso
Usa este mapa solo para esta lección: mueve el deslizador Pot. pot2 para PC_1 y observa los tres LED verdes controlados por PB_13, PB_14 y PB_15.
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ó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.
Guarda, compila y carga.
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);
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 < 1000) {
overvoltage_flash = false;
set_leds(1);
printf("millivolts=%d level=LOW\n", millivolts);
} else if (millivolts < 2000) {
overvoltage_flash = false;
set_leds(2);
printf("millivolts=%d level=MEDIUM\n", millivolts);
} else if (millivolts < 3000) {
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 de tabla mientras mueves el potenciómetro. Usa posiciones diferentes cuando sea posible: baja, media, alta y el valor más alto que puedas alcanzar. En la columna Lectura, escribe una etiqueta breve como posición baja, posición media, posición alta o valor más alto. En cada fila, copia de la consola el valor de milivoltios y el nivel impreso; después escribe el estado de LED que viste en la cámara.
Líneas serie de ejemplo:
millivolts=742 level=LOW
millivolts=1840 level=MEDIUM
millivolts=2510 level=HIGH
millivolts=3120 level=OVERVOLTAGE flash=1
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.
Fila de ejemplo: posición media | 1840 | MEDIUM | dos LED verdes encendidos | sí.
Tabla de evidencia de aviso de voltaje
| Lectura | Milivoltios serie | 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
Cambia un umbral en 200 mV. Por ejemplo, cambia el límite entre medio y alto de 2000 mV a 2200 mV editando esta línea:
} else if (millivolts < 2000) {
a:
} else if (millivolts < 2200) {
Esto desplaza hacia arriba el límite MEDIUM/HIGH. Los valores por debajo de 2200 mV deberían imprimir ahora MEDIUM; los valores de 2200 mV o más deberían imprimir HIGH hasta el umbral de sobretensión.
Compila y carga de nuevo. Prueba al menos dos posiciones del potenciómetro cerca del límite cambiado: una justo por debajo del nuevo límite y otra justo por encima. Copia ambas líneas serie como evidencia. Si no puedes acercarte mucho al límite, registra el valor más cercano por debajo y el más cercano por encima, y explica esa limitación.
¿Qué umbral cambiaste? Pega las dos lecturas serie cercanas al límite que usaste, indica en qué lado del nuevo límite estaba cada lectura y explica qué diferencia produjo el cambio en el comportamiento observado.
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.