Teach Remote lab lessons

Teach lesson

STM32 Mbed CodeIDE (5/8): aviso de tensão analógica

Os estudantes leem um potenciômetro com Mbed AnalogIn, convertem o valor em uma indicação de tensão e verificam na placa real o comportamento dos limites.

  • STM32 Nucleo (Mbed)
  • 60 min
  • Ensino médio / formação técnica introdutória em eletrônica
  • Português (Brasil)
  • Embedded systems
STM32 Nucleo (Mbed)
STM32 Nucleo (Mbed)

Learning Outcomes

  • Ler uma entrada analógica com Mbed AnalogIn.

  • Converter uma leitura normalizada em milivolts aproximados.

  • Criar um aviso por limites usando LEDs e evidências seriais.

Student activity preview

Activity Content

Preview only. In a class session, students can fill in responses and submit their work to the teacher.

1

Do valor analógico à decisão

9 min

Muitos controladores reais observam valores que mudam gradualmente, como tensão da bateria, nível do sensor ou botão de ajuste, e então decidem quando o valor ultrapassou um limite de aviso. Um potenciômetro fornece um valor analógico de mudança seguro para praticar esse padrão.

Esta lição usa PC_1, um dos pinos de entrada analógica no guia STM32 Mbed CodeIDE. Na IU do laboratório remoto, este é o controle deslizante Pot. pot2. Mova o controle deslizante lentamente e observe a mudança do valor do console.

Lista de verificação de pinos para esta lição:

- Entrada analógica: Pot. pot2 -> PC_1
- LED verde 1: PB_13
- LED verde 2: PB_14
- LED verde 3: PB_15

Como uma leitura analógica se torna um aviso

Caminho do sinal do potenciômetro pot2 em PC1, através de uma leitura AnalogIn de 0,0 a 1,0, conversão para milivolts, decisões de limite e os LEDs verdes em PB13 para PB15.

Em código Mbed:

AnalogIn pot(PC_1);
float reading = pot.read();
int millivolts = (int)(reading * 3300.0f);

AnalogIn pot(PC_1) cria um objeto de entrada Mbed para uma tensão medida, semelhante a como DigitalOut criou objetos de saída para LEDs. pot.read() pega uma amostra e retorna um valor normalizado de cerca de 0,0 a 1,0. Multiplicar por 3300.0f converte essa fração em milivolts aproximados para uma faixa de entrada de 3,3 V. O programa imprime milivolts inteiros, não texto de ponto flutuante.

Limites aproximados:

- abaixo de 1000 mV: baixo
- 1000-1999 mV: médio
- 2000-2999 mV: alto
- 3000 mV e superior: sobretensão simulada/aviso de escala completa, mostrado pelos três LEDs verdes piscando

O estado baixo ainda ativa um LED verde. Nesta lição, isso significa "nível de aviso LOW", e não "sem saída".

Comportamento de aviso esperado:

- < 1000 mV: nível impresso LOW; um LED verde ligado.
- 1000-1999 mV: nível impresso MEDIUM; dois LEDs verdes acesos.
- 2000-2999 mV: nível impresso HIGH; três LEDs verdes acesos.
- >= 3000 mV: nível impresso OVERVOLTAGE; todos os três LEDs verdes piscam juntos.

A função auxiliar set_led() escreve 0 para acender e 1 para apagar porque essas saídas de LED verde são ativas em nível baixo nos exemplos do laboratório.

Se o console serial imprimir millivolts=2450, em qual faixa de limite ele está e qual nível de aviso o programa deve mostrar?

2

Execute o monitor de aviso

30 min

  1. Abra o laboratório STM32 Mbed CodeIDE.

  2. Abra main.cpp.

  3. Substitua o arquivo pelo programa abaixo.

  4. Complete TODO 1, TODO 2 e TODO 3 com os três valores limites indicados acima. Não altere nenhuma outra linha inicial ainda.

  5. Salve, compile e faça upload. Esta é a compilação planejada 1 de 2.

  6. Mova o controle deslizante Pot. pot2 lentamente pelas posições baixa, média e alta.

  7. Registre pelo menos quatro leituras seriais e estados LED.

  8. Se for difícil atingir um limite, registre o valor mais próximo e explique-o.

#include "mbed.h"

AnalogIn pot(PC_1);

DigitalOut led1(PB_13, 1);
DigitalOut led2(PB_14, 1);
DigitalOut led3(PB_15, 1);

// TODO 1: substitua 0 pelo limite LOW/MEDIUM em mV.
constexpr int low_medium_boundary_mv = 0;
// TODO 2: substitua 0 pelo limite MEDIUM/HIGH em mV.
constexpr int medium_high_boundary_mv = 0;
// TODO 3: substitua 0 pelo limite HIGH/OVERVOLTAGE em 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);
    }
}

O programa acima é um arquivo main.cpp contínuo. Se sua visualização PDF dividir o bloco de código em duas páginas, continue copiando com a próxima linha na página seguinte.

Preencha pelo menos quatro linhas da tabela enquanto move o potenciômetro. Use posições diferentes quando possível: baixa, média, alta e a mais alta que conseguir alcançar. Caso de teste identifica a faixa pretendida; Milivolts no serial é a leitura inteira do console em mV; Nível impresso é o rótulo exato do console; e Estado observado dos LEDs é o que a câmera mostrou. Escolha entre as opções se o resultado correspondeu ao esperado. Se houver linhas extras, deixe-as totalmente em branco.

Copie valores do seu próprio console atual. Uma linha válida começa com
millivolts= e inclui o nível selecionado pelo seu código de limite preenchido.

Para level=OVERVOLTAGE, observe por pelo menos dois segundos antes de preencher a linha. flash=1 significa que todos os três LEDs verdes estão acesos para aquela amostra; flash=0 significa que todos os três estão desativados para aquela amostra. Grave o comportamento geral como "todos os três piscando", não como uma única imagem estática.

Tabela de evidências de aviso de tensão

Preencha quatro linhas para intervalos diferentes. Deixe as linhas extras não utilizadas em branco.

Caso de teste Milivolts no serial mV Nível impresso Estado observado dos LEDs Limite correspondente?

Escolha uma linha da sua tabela. Cite o valor serial em milivolts, nomeie o intervalo de limite ao qual ele pertence e explique se o estado LED corresponde a esse intervalo.

3

Ajustar o comportamento de aviso

13 min

Escolha de forma independente uma das três constantes de limite e altere-a em exatamente +200 mV ou -200 mV. Mantenha os limites em ordem crescente para que todas as faixas continuem acessíveis. Não copie a escolha de um colega: selecione o limite e a direção que façam sentido para o comportamento desejado.

Antes de editar, indique o nome da constante, seu valor original, se irá adicionar ou subtrair 200 mV e o valor resultante.

Edite apenas essa constante e salve, compile e faça upload. Esta é a versão planejada 2 de 2. Teste duas posições em torno do novo limite: a leitura mais próxima abaixo dele e a leitura mais próxima nele ou acima dele. Copie ambas as linhas seriais completas. Uma leitura igual ao limite pertence ao ramo superior porque o código usa <. Se o controle deslizante ultrapassar o valor exato, use a leitura mais próxima de cada lado e diga isso.

Cole as duas linhas seriais próximas do limite. Rotule uma como abaixo e a outra como igual ou acima e indique a ramificação impressa para cada uma.

4

Envie seu código

8 min

Anexe seu main.cpp final salvo

Clique em Verificar arquivos salvos, confirme que main.cpp contém a versão com o limite ajustado e clique em Anexar código salvo. Depois, clique em Enviar atividade na parte inferior.