Partilhar: Classroom Teams WhatsApp
aulify
UC UC00670 · T. Sist. Comp. Redes, T. Eletrónica e mais 2 cursos

Ficha 02 · Sensores, atuadores e projeto

Sensores, atuadores, millis(), protocolos, interrupções, depuração e ensaios
Versão · Aluno
Tempo · 90 minutos
Cotação · 100 pontos
Aluno(a)
Turma
Nº
Data
Objectivos da ficha

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)