> [!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.