from machine import Pin, time_pulse_us # PIN para GPIO
#time_pulse_us -> para medir o tempo de pulso
import time # Para funções de tempo como delay
# Define os pinos conectados ao TRIG e ECHO do HC-SR04
TRIG_PIN = 5; # GPIO5 do ESP32 conectado ao pino TRIG do sensor
ECHO_PIN = 18; # GPIO18 do ESP32 conectado ao pino ECHO do sensor
#Inicializa o pino TRIG como saída
trig = Pin(TRIG_PIN, mode=Pin.OUT)
#Inicializa o pino ECHO como entrada
echo = Pin(ECHO_PIN, mode=Pin.IN)
#Função que realiza a medição de distância
def medir_distancia():
#Garante que p TRIG comece em nível baixo
trig.value(0)
time.sleep_us(2) #Aguarda 2 microsegundos
#Envia um pulso de 10 microssegundos para o pino TRIG
trig.value(1)
time.sleep_us(10)
trig.value(0)
# Usa a função time_pulse_us para medir a duração do pulso HIGH do pino ECHO
# Essa função espera o pino ir para HIGH e depois para LOW, e retorna o tempo total em microssegundos
# O timeout de 30000us (30ms) evita travamento caso não haja resposta
duracao = time_pulse_us(echo,1,30000)
# Se a medição falahar (por exemplo, por timeout), retorna erro
if duracao < 0:
print("Erro: sem resposta do sensor")
return None
#Calcula a distância em centímetros:
#A fórmula é: distância = (tempo / 2) / 29.1
# - Divide por 2 porque o som vai até o objeto e volta.
# - 29.1 é a conversão baseada na velocidade do som (~343 m/s)
distancia_cm = (duracao / 2) / 29.1
return distancia_cm
# Loop principal
while True:
distancia = medir_distancia() # Chama a função para medir a distância
if distancia:
# Exibe a distância formatada com 2 casa decimais
print("Distancia: {:.2f} cm".format(distancia))
else:
#Exibe mensagem de falha
print("Falha na medição")
time.sleep(1) # Aguarda 1 segundo antes de medir novamente