Questão nº 39
Questão de Engenharia Elétrica · FCC TRT15 2024 (nº 39)
T1 = 2 µs
T2 = 10 µsO programa para o teste do sensor está estruturado conforme segue:
// Teste do sensor ultrassônico // Tempo T em microssegundos // Distância D em valores inteiros e em centímetros // Velocidade padrão do som: 340 m/s // Variáveis const int ECHO = 6; const int TRIG = 7; long T; int D; void setup() { pinMode(ECHO, INPUT); pinMode(TRIG, OUTPUT); Serial.begin(9600); } void loop() { pulsoTempo(); // Função 1 - gera o pulso de disparo e mede o tempo D = distancia(); // Função 2 - calcula a distância entre sensor e obstáculo Serial.print(T); Serial.print(" "); Serial.println(D); delay(1000); } // Função 1 int pulsoTempo() { // código a ser identificado } // Função 2 int distancia() { <fórmula para calcular a distância entre o sensor e o obstáculo, em centímetros>; return D; }
O código da função pulsoTempo que gera o sinal de disparo e mede o tempo de ida e volta entre sensor e obstáculo é:
- A```
int pulsoTempo()
{
digitalWrite(TRIG, LOW);
delay(2);
digitalWrite(TRIG, HIGH);
delay(10);
T = pulseOut (ECHO, HIGH);
}
``` - B```
int pulsoTempo()
{
digitalWrite(TRIG, LOW);
delayMicroseconds(2);
digitalWrite(TRIG, HIGH);
delayMicroseconds(10);
digitalWrite(TRIG, LOW);
T = pulseIn (ECHO, HIGH);
}
``` (alternativa correta) - C```
int pulsoTempo()
{
digitalWrite(TRIG, LOW);
delay(2000);
digitalWrite(TRIG, HIGH);
delay(10000);
digitalWrite(TRIG, LOW);
T = pulseIn (ECHO, HIGH);
}
``` - D```
int pulsoTempo()
{
T = pulseOut (ECHO, LOW);
digitalWrite(TRIG, LOW);
delayMicroseconds(2);
digitalWrite(TRIG, HIGH);
delayMicroseconds(10);
digitalWrite(TRIG, LOW);
}
``` - E```
int pulsoTempo()
{
digitalWrite(TRIG, LOW);
delayMicroseconds(2000);
digitalWrite(TRIG, HIGH);
delayMicroseconds(10000);
T = pulseIn (ECHO, LOW);
}
```
Resposta comentada
Gabarito Alternativa B
O sensor ultrassônico HC-SR04 mede distâncias enviando um pulso de som e cronometrando o tempo que leva para o eco retornar. A função `pulseIn()` é usada para medir a duração de um pulso (HIGH ou LOW) em um pino, sendo fundamental para capturar o tempo de retorno do eco.
(A) Incorreta: Usa `delay()` em vez de `delayMicroseconds()`, resultando em atrasos de milissegundos (muito longos) em vez de microssegundos, e tenta usar `pulseOut()` que não é uma função padrão do Arduino para medir pulsos.
(B) Correta: Gera o pulso de disparo de 10µs no pino TRIG usando `delayMicroseconds()` e, em seguida, mede corretamente o tempo do pulso de retorno (HIGH) no pino ECHO com `pulseIn()`, armazenando o valor na variável `T`.
(C) Incorreta: Usa `delay()` em vez de `delayMicroseconds()`, o que gera atrasos de milissegundos (muito longos) para o pulso de disparo, impedindo o funcionamento correto do sensor.
(D) Incorreta: Tenta usar `pulseOut()` (função inexistente para medição) antes de disparar o sensor, e o resultado da medição não é atribuído à variável `T` de forma correta.
(E) Incorreta: Usa `delayMicroseconds()` com valores incorretos (2000µs e 10000µs, que são 2ms e 10ms, respectivamente, em vez de 2µs e 10µs) para o pulso de disparo, e tenta medir um pulso LOW no ECHO, enquanto o sensor envia um pulso HIGH para o eco.
Fonte: FCC TRT15 2024 Analista Judiciário - Área Apoio Especializado - Especialidade Engenharia (Elétrica) (Caderno Tipo 003). Reproduzida para fins de estudo.
