> [!TLDR] Usando o sensor HC-SR04 com o ESP32
> Este guia explica como usar um sensor de distância ultrassônico HC-SR04 com um microcontrolador ESP32. O código envia um pulso de disparo (trigger) para o pino TRIG do sensor e, em seguida, mede a duração do pulso de eco recebido no pino ECHO usando a função `pulseIn()`. Essa duração é então convertida para distância em centímetros e polegadas usando a velocidade do som, e os resultados são impressos no monitor serial.
# Introdução
Usar o [[Sensor de Distância Ultrassônico HC-SR04|HC-SR04]] com um [[ESP32]] envolve o controle de pinos GPIO (General Purpose Input/Output - Entrada/Saída de Propósito Geral). Aqui está um passo a passo de como fazer isso!
## Requisitos
- Hardware
- [[ESP32]] - O [ESP32](app://obsidian.md/ESP32) é uma série de microcontroladores de baixo custo e baixo consumo de energia. É também um sistema em um único chip (system-in-one-chip) com microcontrolador, Wi-Fi e Bluetooth integrados.
- [[Sensor de Distância Ultrassônico HC-SR04|HC-SR04]] - Sensor de distância ultrassônico.
- Software
- [[Arduino IDE]] ou [[Wokwi]] para programar/simular o código a ser executado no [[ESP32]].
- Certifique-se de [[Instalando o driver da ESP32 no Windows|instalar o driver do ESP32]] para conseguir enviar o código para o [[ESP32]].
# Conexões de Hardware
* **[[Sensor de Distância Ultrassônico HC-SR04]]:**
* **Pino VCC:** Conecte ao VCC do [[ESP32]]
* **Pino TRIG:** Conecte a um pino digital GPIO do [[ESP32]]
* **Pino ECHO:** Conecte a um pino digital GPIO do [[ESP32]]
* **Pino GND:** Conecte ao GND do [[ESP32]]
![[HC-SR04 with ESP32 image.png]]
# Exemplo de Código 1 - Maneira Simples de Medir Distância
```cpp
#define PIN_TRIG 19
#define PIN_ECHO 18
void setup() {
Serial.begin(115200);
pinMode(PIN_TRIG, OUTPUT);
pinMode(PIN_ECHO, INPUT);
}
void loop() {
// Start a new measurement:
digitalWrite(PIN_TRIG, HIGH);
delayMicroseconds(10);
digitalWrite(PIN_TRIG, LOW);
// Read the result:
int duration = pulseIn(PIN_ECHO, HIGH);
Serial.print("Distance in CM: ");
Serial.println(duration / 58);
Serial.print("Distance in inches: ");
Serial.println(duration / 148);
delay(1000);
}
```
## Explicação
Este código Arduino usa um sensor de distância ultrassônico HC-SR04 para medir distâncias e imprimi-las no monitor serial. Vamos analisar o código passo a passo:
* `#define PIN_TRIG 19`: Esta linha define uma constante chamada `PIN_TRIG` e atribui a ela o valor 19. Este pino será usado para acionar (disparar) o HC-SR04 para iniciar uma medição.
* `#define PIN_ECHO 18`: Esta linha define uma constante chamada `PIN_ECHO` e atribui a ela o valor 18. Este pino receberá o pulso de eco do HC-SR04.
* `pinMode(PIN_TRIG, OUTPUT)`: Configura o `PIN_TRIG` (pino 19) como uma saída. Isso é necessário porque o Arduino enviará um sinal através deste pino para acionar o sensor.
* `pinMode(PIN_ECHO, INPUT)`: Configura o `PIN_ECHO` (pino 18) como uma entrada. O Arduino ficará escutando o sinal de eco neste pino.
* `digitalWrite(PIN_TRIG, HIGH)`: Define o `PIN_TRIG` como ALTO (HIGH) por 10 microssegundos. Este pulso curto aciona o HC-SR04 para enviar uma rajada ultrassônica.
* `delayMicroseconds(10)`: Pausa o programa por 10 microssegundos. Isso garante que o pulso de disparo seja longo o suficiente para que o sensor o detecte.
* `digitalWrite(PIN_TRIG, LOW)`: Define o `PIN_TRIG` de volta para BAIXO (LOW). O pulso de disparo precisa ser curto.
* `int duration = pulseIn(PIN_ECHO, HIGH)`: Esta é a parte central da medição de distância. A função `pulseIn()` mede a duração de um pulso (em microssegundos) em um determinado pino. Neste caso, ela está medindo o tempo em que o `PIN_ECHO` permanece em ALTO (HIGH), que corresponde ao tempo que a rajada ultrassônica levou para viajar até o objeto e retornar.
* `Serial.print("Distance in CM: ");`: Imprime o texto "Distance in CM: " no monitor serial.
* `Serial.println(duration / 58)`: Calcula a distância em centímetros e a imprime no monitor serial. A divisão por 58 é derivada da velocidade do som no ar e da conversão de microssegundos para centímetros. (A velocidade do som é de aproximadamente 343 metros/segundo, ou 0,0343 cm/microssegundo. Como o som viaja até o objeto e volta, o cálculo é: distância = (0,0343 cm/µs * duração µs) / 2, o que simplifica para aproximadamente duração / 58.2).
* `Serial.print("Distance in inches: ");`: Imprime o texto "Distance in inches: " no monitor serial.
* `Serial.println(duration / 148)`: Calcula a distância em polegadas e a imprime no monitor serial. A divisão por 148 é um cálculo semelhante, mas com a conversão para polegadas.