Lição do Teach
STM32 com a API do Arduino (4/4): minicontrolador
Os estudantes combinam entrada de potenciômetro, decisões, saída RGB e evidências do Serial para construir um minicontrolador STM32 Arduino compacto.
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
Projetar um minicontrolador com entrada, decisão, saída e modo manual.
Escolher e justificar um limite com base em leituras reais.
Testar os três ramos de uma decisão e comunicar o resultado.
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.
Entenda o desafio e projete testes
10 min
Seu minicontrolador terá três estados:
- Potenciômetro abaixo do limite: cor verde.
- Potenciômetro acima do limite: cor vermelha.
- Botão pressionado: cor azul, mesmo que o potenciômetro diga outra coisa.
O desafio não é apenas copiar o programa. No final, você deverá ter um minicontrolador testado que lê uma entrada, decide um estado, altera o LED RGB, registra evidências por meio do Serial e incorpora uma pequena melhoria que você consegue defender.
Antes de programar, pense como se estivesse testando um pequeno produto. Um bom teste deve dizer o que você moverá, qual cor espera ver e quais dados do Serial confirmariam que o controlador tomou a decisão correta.
O programa inicial imprimirá linhas exatamente neste formato: state=<green/red/manual> pot1=<leitura ADC> button=<released/pressed>.
Escreva três linhas separadas, uma para cada caso. Utilize este formato: Caso N | RGB esperado: ... | Serial: state=... button=...
Complete uma linha para cada situação:
- B1 solto e potenciômetro abaixo do limite.
- B1 solto e potenciômetro no limite ou acima dele.
- B1 mantido pressionado e potenciômetro no limite ou acima dele.
Construa e verifique o minicontrolador
27 min
A função setRgb(red, green, blue) evita repetir três linhas toda vez que você muda a cor. Cada argumento representa um brilho PWM entre 0 e 255. O limite inicial é de 600 contagens ADC, mas você deverá compará-lo com leituras reais.
bool armazena true ou false. Como o botão 1 é ativo em LOW, o valor booleano buttonPressed se torna verdadeiro quando a leitura é LOW. if / else if / else verifica os ramos de cima para baixo e executa apenas o primeiro ramo verdadeiro; por isso, a condição manual deve vir primeiro. const char* state armazena um rótulo de texto curto para Serial; você não precisa alterar essa sintaxe.
Você copiará um programa inicial, testará e ajustará. O resultado final deverá ser um controlador pequeno mas completo: lê POT_1, decide com THRESHOLD, permite o modo manual com BUTTON_1, altera o LED RGB e registra pelo Serial qual estado foi escolhido.
Entradas e saídas usadas pelo minicontrolador
A montagem remota já está conectada. Este mapa mostra apenas as duas entradas e os três canais RGB usados neste desafio; não é necessário alterar a fiação.
Inicie o laboratório STM32 Arduino por este bloco. No CodeIDE, abra
main.inoe cole o programa inicial abaixo.Substitua TODO 1 por uma expressão booleana verdadeira somente quando o modo manual for solicitado. Substitua TODO 2 por uma comparação verdadeira quando a leitura de ADC estiver no limite ou acima dele. Procure por
TODO; nenhum pode permanecer.Salve, selecione Compile e aguarde a confirmação de sucesso. Depois, selecione Upload e aguarde até a placa real receber o programa inicial.
Abra o console Serial do CodeIDE em 115200 baud. Aguarde as linhas
state=... pot1=... button=...se repetirem.Teste 1 — estado automático inferior: solte B1 e coloque
Pot. pot1aproximadamente em um terço de seu percurso. Copie a leitura ADC e complete a linhaposição inferior, B1 solto.Teste 2 — estado automático superior: mantenha B1 solto e coloque
Pot. pot1aproximadamente em dois terços de seu percurso. Copie a leitura ADC e complete a linhaposição superior, B1 solto.Teste 3 — comando manual: mantenha o potenciômetro na posição superior, pressione B1 até o Serial informar o estado manual, depois solte-o e complete a linha
posição superior, B1 pressionado. Este teste verifica se o botão tem prioridade.Preencha as três primeiras linhas da tabela. Na pergunta logo abaixo, calcule o ponto médio arredondado das duas leituras ADC com o botão solto; esse ponto médio será o limite calibrado para o centro da faixa de controle escolhida.
#include <Arduino.h>
const int POT_1 = PC0;
const int BUTTON_1 = PC5; // Ativo LOW
const int RGB_RED = PA8;
const int RGB_GREEN = PA9;
const int RGB_BLUE = PA10;
const int THRESHOLD = 600;
void setRgb(int red, int green, int blue) {
analogWrite(RGB_RED, red);
analogWrite(RGB_GREEN, green);
analogWrite(RGB_BLUE, blue);
}
void setup() {
pinMode(BUTTON_1, INPUT);
pinMode(RGB_RED, OUTPUT);
pinMode(RGB_GREEN, OUTPUT);
pinMode(RGB_BLUE, OUTPUT);
Serial.begin(115200);
}
void loop() {
int reading = analogRead(POT_1);
bool buttonPressed = digitalRead(BUTTON_1) == LOW;
const char* state;
if (TODO_MANUAL_CONDITION) { // TODO 1: verdadeiro somente quando o modo manual é solicitado
setRgb(0, 0, 255);
state = "manual";
} else if (TODO_HIGH_CONDITION) { // TODO 2: leitura no limite ou acima dele
setRgb(255, 0, 0);
state = "red";
} else {
setRgb(0, 180, 0);
state = "green";
}
Serial.print("state=");
Serial.print(state);
Serial.print(" pot1=");
Serial.print(reading);
Serial.print(" button=");
if (buttonPressed) {
Serial.println("pressed");
} else {
Serial.println("released");
}
delay(100);
}
Use seis linhas na tabela. As linhas 1 a 3 documentam o programa inicial e devem ser concluídas antes da modificação. As linhas 4 a 6 repetem os mesmos três casos após a calibração e a melhoria do diagnóstico. Cada linha deve relacionar entrada, decisão e evidência do hardware real:
- Linhas 1 e 4: B1 solto, potenciômetro na posição inferior de calibração.
- Linhas 2 e 5: B1 solto, potenciômetro na posição superior de calibração.
- Linhas 3 e 6: B1 mantido pressionado na posição superior de calibração.
- Em Valores vistos no Serial, copie aproximadamente
state,pot1ebutton. - Nas linhas melhoradas, copie também o novo campo
margin. Recrie cada posição dentro de cerca de 30 contagens ADC de sua leitura inicial.
| Versão | Teste | Valores vistos no Serial (pot1 em contagens ADC) | Limite contagens ADC | Resultado esperado | Saída observada | Veredicto |
|---|---|---|---|---|---|---|
Usando as duas linhas de calibração com o botão solto, calcule (leitura inferior + leitura superior) / 2 e arredonde para uma contagem ADC inteira. Informe as duas leituras, o cálculo e o limite final calibrado. Não edite THRESHOLD antes de registrar esse cálculo.
Calibrar e adicionar um diagnóstico
15 min
Substitua 600 em THRESHOLD pelo seu ponto médio arredondado. Em seguida, adicione um diagnóstico Serial logo após o valor impresso de pot1: imprima margin= e depois reading - THRESHOLD. Uma margem negativa significa abaixo do limite calibrado; zero ou uma margem positiva significa igual ou superior a ela.
Salve, compile, faça upload e reabra Serial em 115200 baud. Repita os mesmos três casos de teste e preencha as linhas aprimoradas 4 a 6. O diagnóstico só é útil se o estado visível, state, e o sinal de margin concordarem; o modo manual ainda deve ter prioridade, mesmo quando a margem for positiva.
Informe seu limite calibrado e cite as duas novas instruções Serial. Em seguida, use as linhas aprimoradas 4 a 6 para mostrar que as margens negativa e positiva corresponderam aos ramos automáticos e que o comando manual continuou tendo prioridade.
Apresente o controlador
8 min
Envie seu main.ino final
Salve main.ino antes de anexá-lo. A captura deve mostrar o minicontrolador final, com o limite calibrado, a saída Serial margin e nenhum token TODO.
Apresente o minicontrolador em 4 a 6 frases: indique sua finalidade e entradas; resuma as três decisões e saídas; cite o resultado dos seis testes; explique o que o sinal de margin mostrou; e mencione uma limitação realista.
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