Teach Remote lab lessons

Teach lesson

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)
  • Embedded systems
STM32 Nucleo (Arduino)
STM32 Nucleo (Arduino)

Learning Outcomes

  • 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.

Student activity preview

Activity Content

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

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.