Teach Lições com laboratórios remotos

Lição do Teach

STM32 com a API do Arduino (3/4): potenciômetro e RGB

Os estudantes leem um potenciômetro com analogRead(), convertem o valor para uma saída RGB e testam, na placa real, a cor e o comportamento nos extremos da faixa.

  • STM32 Nucleo (Arduino)
  • 55 min
  • Ensino médio / formação técnica introdutória em eletrônica
  • Português (Brasil)
  • Sistemas embarcados

Entre com uma conta de professor para preparar uma sessão. Os estudantes entram com um código da turma.

Caminho do sinal do potenciômetro pot1 em PC0, através dos valores analogRead de 0 a 1023 e valores map de 0 a 255, até as saídas RGB PWM em PA8, PA9 e PA10.
STM32 Nucleo (Arduino)

Objetivos de aprendizagem

  • Ler uma entrada analógica e convertê-la para uma faixa útil.

  • Usar PWM para controlar o brilho de uma saída RGB.

  • Usar o console Serial como evidência de depuração.

Visualização da atividade do estudante

Conteúdo da atividade

Apenas visualização. Em uma sessão de aula, os estudantes podem preencher respostas e entregar o trabalho ao professor.

1

Duas faixas diferentes

8 min

analogRead(PC0) retorna uma leitura que trataremos como um valor entre 0 e 1023. analogWrite(PA10, brightness) espera brilho entre 0 e 255. É por isso que usamos map: ele converte um intervalo em outro.

Acompanhe o valor da entrada à saída

Caminho do sinal do potenciômetro pot1 em PC0, através dos valores analogRead de 0 a 1023 e valores map de 0 a 255, até as saídas RGB PWM em PA8, PA9 e PA10.

O programa usará esta conversão:

int reading = analogRead(POT_1);
int brightness = map(reading, 0, 1023, 0, 255);

Com a conversão direta mostrada, o que deve acontecer quando a leitura do potenciômetro estiver próxima do máximo?

2

Controle o brilho com uma leitura analógica

29 min

Serial.begin(115200) define a taxa de comunicação como 115200 baud. Depois do upload, abra o console Serial do CodeIDE e selecione 115200 se ele pedir uma taxa. Cada linha deve mostrar uma leitura do ADC (contagens de 0-1023) e um brilho PWM (0-255). map(value, inLow, inHigh, outLow, outHigh) coloca um valor no ponto correspondente entre os dois pontos finais de saída.

  1. Inicie o laboratório STM32 Arduino e abra a guia do editor main.ino em CodeIDE.

  2. Cole o programa inicial. Para TODO 1, escolha um dos pinos RGB declarados. Para os TODOs 2 e 3, complete um mapeamento PWM direto, de modo que a leitura mínima produza escuridão e a leitura máxima produza brilho total.

  3. Procure TODO; substitua os três antes de compilar. Salve, compile e aguarde a confirmação de sucesso; depois, faça upload e aguarde a nova confirmação.

  4. Abra Serial em 115200 baud. Se nenhuma linha aparecer após um upload bem-sucedido, confirme a taxa do console e reabra o console antes de alterar o código.

  5. Teste inicial: mova o potenciômetro 1 para as posições baixa, média e alta. Em cada posição, espere 3 a 5 linhas do Serial se estabilizarem, copie um par aproximado de valores e observe o canal RGB escolhido.

  6. Preencha todas as três linhas da tabela e a explicação imediatamente abaixo da tabela antes de modificar o map.

#include <Arduino.h>

const int POT_1 = PC0;
const int RGB_RED = PA8;
const int RGB_GREEN = PA9;
const int RGB_BLUE = PA10;
const int RGB_OUTPUT = TODO_RGB_OUTPUT;  // TODO 1: um pino RGB declarado para controlar

void setup() {
  pinMode(RGB_OUTPUT, OUTPUT);
  Serial.begin(115200);
}

void loop() {
  int reading = analogRead(POT_1);
  int brightness = map(reading, 0, 1023,
                       TODO_PWM_AT_MIN, TODO_PWM_AT_MAX);  // TODO 2-3: extremos do mapeamento direto

  analogWrite(RGB_OUTPUT, brightness);

  Serial.print("pot1=");
  Serial.print(reading);
  Serial.print(" brightness=");
  Serial.println(brightness);

  delay(200);
}

Preencha a tabela após mover o potenciômetro e verificar Serial. Use apenas três linhas e deixe as outras em branco se o TEACH mostrar mais:

  • Linha 1: potenciômetro em posição baixa.
  • Linha 2: potenciômetro em posição intermediária.
  • Linha 3: potenciômetro em posição alta.
  • Em Leitura Serial e Brilho calculado, copie os valores aproximados; eles não precisam ser exatos.
  • Em Saída observada, nomeie o canal RGB e descreva seu brilho.
Posição do potenciômetro Leitura Serial (contagens ADC) Brilho calculado (PWM 0-255) Saída observada Isso faz sentido?

Use pelo menos duas linhas para explicar a relação entre a leitura do potenciômetro e o brilho observado.

3

Inverter somente após registrar o teste inicial

8 min

Depois de completar as três linhas iniciais, troque os dois extremos PWM em map para inverter a conversão. Não altere RGB_OUTPUT. Salve, compile, faça upload, reabra Serial em 115200 baud e teste novamente apenas as posições mínima e máxima. Assim, você obtém uma comparação clara sem misturar uma mudança de canal com uma mudança de conversão.

Responda em três linhas usando este formato:

  1. map modificado: ...
  2. posição baixa: pot1=... brightness=... | LED observado: ...
  3. posição alta: pot1=... brightness=... | LED observado: ...

Em seguida, acrescente uma frase explicando como as duas observações mostram que a conversão foi invertida.

4

Envie seu código

10 min

Envie seu main.ino final

Salve main.ino antes de anexá-lo. A captura deve mostrar o map invertido que foi testado, a saída RGB escolhida, as mensagens Serial e nenhum token TODO.

Explique por que um valor entre 0 e 1023 não pode ser usado diretamente como brilho PWM se a faixa de brilho esperada for de 0 a 255.

Transforme esta visualização em uma sessão de aula

Continue para o LabsLand Teach para usar esta lição com seus estudantes e conferir o acesso disponível para sua conta.