Ficha 02 · Sensores, atuadores e projeto
- Ler sensores
- Comandar atuadores
- Programação não bloqueante
- Integrar projeto
- Usar interrupções
- Depurar e ensaiar
Parte I · Sensores
Exercício 1 · Interface (6 pts)
Indica se a leitura é digital ou analógica (via ADC):
a) LDR (luz). ___
b) PIR (movimento). ___
c) Potenciómetro. ___
d) HC-SR04 (distância ultrassónica). ___
Exercício 2 · Ler sensor (10 pts)
Um LM35 dá 10 mV por °C e está ligado a A1. O programa usa a referência interna (analogReference(INTERNAL), 1,1 V). Escreve o código que lê e imprime no Monitor Série a temperatura em °C com uma casa decimal.
Parte II · Atuadores
Exercício 3 · Corrente (10 pts)
Um aluno liga um motor DC diretamente a um pino do Arduino e queima a placa.
a) Porquê? (5 pts)
b) Como se deve ligar o motor corretamente? (5 pts)
Exercício 4 · Servo (6 pts)
Escreve um sketch que move um servo (pino 10) entre 45° e 135°, trocando de posição de 1,5 em 1,5 segundos.
Parte III · Boas práticas
Exercício 5 · millis() (12 pts)
a) Por que é mau usar delay(5000) num programa que também precisa de ler um botão? (4 pts)
b) Um LED no pino 8 deve piscar, trocando de estado de 250 em 250 ms, enquanto um segundo LED (pino 11) fica aceso só enquanto um botão (pino 3, com INPUT_PULLUP) está premido. Escreve o loop() sem delay(). (8 pts)
Exercício 6 · Protocolos (6 pts)
Indica o protocolo adequado:
a) Ligar vários sensores e um LCD no mesmo barramento de 2 fios. ___
b) Depurar valores no PC. ___
c) Enviar dados para a nuvem (ESP32). ___
Parte IV · Projeto
Exercício 7 · Ventilação de um armário de rede (15 pts)
Projeta (descrição + código) o controlo de ventilação de um pequeno armário de rede. Um LM35 está em A2 e uma ventoinha de baixa tensão (5 V ou 12 V), com fonte própria e massa comum com o Arduino, é ligada por um módulo de relé no pino 8. A ventoinha liga acima de 26 °C e desliga abaixo de 24 °C (histerese). O sistema mostra a temperatura no Monitor Série a cada segundo e não usa delay() longo.
Parte V · Interrupções, depuração e ensaios
Exercício 8 · Contador de peças (12 pts)
Uma barreira ótica, ligada ao pino 3 com INPUT_PULLUP, dá um impulso a LOW cada vez que passa uma peça num tapete rolante. O programa imprime o total de peças a cada segundo.
a) Porque é preferível uma interrupção à sondagem se o loop() tiver outras tarefas lentas? (4 pts)
b) Escreve o código com interrupção, volatile e sem delay(). (8 pts)
Exercício 9 · Encontrar três erros (12 pts)
O sketch pretende acender um LED ao premir um botão (pino 2, com INPUT_PULLUP) e apagá-lo 5 s depois do último toque. Código com erros propositados (não compila):
const int LED = 8;
const int BTN = 2;
int instanteToque = 0
bool aceso = false;
void setup() {
pinMode(LED, OUTPUT);
pinMode(BTN, INPUT_PULLUP);
}
void loop() {
if (digitalRead(BTN) == HIGH) {
instanteToque = millis();
aceso = true;
digitalWrite(LED, HIGH);
}
if (aceso && millis() - instanteToque >= 5000) {
digitalWrite(LED, LOW);
aceso = false;
}
}
Identifica um erro sintático, um lógico e um de execução, e escreve o código corrigido.
Exercício 10 · Plano de ensaios (11 pts)
a) Escreve um plano de ensaios com pelo menos 5 casos para o sketch corrigido do exercício 9, com as colunas: n.º, condição de teste, resultado esperado, resultado obtido e aprovado. Inclui um caso de fronteira e um que revele o erro de execução. (8 pts)
b) Se um ensaio falhar, que fazes? (3 pts)