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.
Entre com uma conta de professor para preparar uma sessão. Os estudantes entram com um código da turma.
Ainda não tem uma conta na LabsLand? Criar sua conta de professor
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.
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
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?
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.
Inicie o laboratório STM32 Arduino e abra a guia do editor
main.inoem CodeIDE.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.
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.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.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.
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.
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:
map modificado: ...posição baixa: pot1=... brightness=... | LED observado: ...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.
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.
Ainda não tem uma conta na LabsLand? Criar sua conta de professor