Medindo Distância com o ESP8266 e o Sensor Ultrassônico HC-SR04
Medindo Distância com o ESP8266 e o Sensor Ultrassônico HC-SR04
No artigo anterior vimos como controlar LEDs via Wi-Fi com o ESP8266. Agora vamos dar um passo além no mundo da automação e do IoT: transformar o ESP8266 em um “sensor de presença/distância” usando um módulo ultrassônico HC-SR04, o mesmo princípio usado em sensores de estacionamento e em robôs que desviam de obstáculos.
É um projeto simples, barato e muito didático — ótimo tanto para quem está começando com eletrônica quanto para quem quer integrar leitura de distância a projetos maiores de automação residencial.

O que você vai precisar
- 1x placa ESP8266 (NodeMCU ou Wemos D1 Mini)
- 1x sensor ultrassônico HC-SR04
- Protoboard
- Jumpers macho-macho e macho-fêmea
- 2x resistores (para o divisor de tensão do pino Echo — veja o aviso abaixo)
- Cabo USB e Arduino IDE configurada para o ESP8266
Como funciona o HC-SR04
O sensor tem dois pinos principais: Trig (disparo) e Echo (eco). O microcontrolador envia um pulso elétrico de 10 microsegundos no Trig, o sensor emite um som ultrassônico (inaudível para nós) e aguarda o eco voltar após bater em um obstáculo. O tempo entre o disparo e o retorno do eco é lido no pino Echo com a função pulseIn().
Como o som viaja a aproximadamente 343 m/s (0,0343 cm por microsegundo), e o pulso faz o caminho de ida e volta, a distância é calculada assim:
distância (cm) = (duração do pulso × 0,0343) / 2Esquema de ligação
| HC-SR04 | ESP8266 (NodeMCU) |
|---|---|
| VCC | 5V (pino Vin) |
| GND | GND |
| Trig | GPIO12 (D6) |
| Echo | GPIO14 (D5) — via divisor de tensão |
⚠️ Atenção com o pino Echo O HC-SR04 opera em 5V e o pino Echo devolve um sinal de 5V. As entradas do ESP8266 toleram no máximo cerca de 3,3V. Ligar o Echo direto pode danificar a placa a médio prazo. Use um divisor de tensão simples (por exemplo, um resistor de 1kΩ em série e outro de 2kΩ para o GND) entre o Echo e o GPIO14, reduzindo o sinal para a faixa segura antes de conectar ao ESP8266.
🖼️ Prompt para gerar diagrama de ligação (IA) Ilustração vetorial estilo diagrama técnico (flat design) mostrando uma placa ESP8266 NodeMCU conectada a um sensor ultrassônico HC-SR04, com fios coloridos identificando VCC, GND, Trig e Echo, incluindo destaque visual para um pequeno divisor de tensão com dois resistores no fio do Echo, fundo branco, estilo clean, paleta de azul e verde-água.
Código completo
Este é o sketch para a Arduino IDE. Basta copiar, colar e enviar para o seu ESP8266:
const int trigPin = 12; // define o pino 12 (D6)para disparar o som
const int echoPin = 14; //define o pino 14 (D5) para ouvir o som
#define VELOCIDADE_DO_SOM 0.0343 //define a velocidade do som em cm por microsegundos
long duracao;
//variável para armazenar a duração do eco
float distanciaCm;
// variável para armazenar a distância calculada
void setup() {
Serial.begin(115200); //inicia a comunicação serial para exibir os resultados
pinMode(trigPin, OUTPUT); //configura o pino 'trig' como saída
pinMode(echoPin, INPUT); //configura o pino 'echo' como entrada
}
void loop() {
digitalWrite(trigPin, LOW); //inicia o trigger como desligado
delayMicroseconds(2);//atrasa em 2 microsegundos a execução
digitalWrite(trigPin, HIGH); //dispara o pulso de ultrasom
delayMicroseconds(10); //define em 10 microsegundos a duração do pulso de ultrasom
digitalWrite(trigPin,LOW);//para o pulso de ultrasom
duracao = pulseIn(echoPin,HIGH); //lê o pino echo que retorna o tempo de viagem do pulso de ultrasom
distanciaCm = duracao * VELOCIDADE_DO_SOM /2; //calcula a distância em centímetros
Serial.print("Distância em cm: "); //exibe no monitor serial a mensagem "Distância em cm:"
Serial.println(distanciaCm);//exibe o valor da distância e muda de linha
delay(1000); //aguarda 1 segundo para fazer a próxima leitura
}Entendendo o código passo a passo
- Configuração dos pinos: o
trigPiné saída (envia o pulso) e oechoPiné entrada (recebe a resposta). - Disparo do pulso: colocamos o Trig em LOW por 2 microsegundos para “limpar” o pino, depois HIGH por 10 microsegundos — esse é o disparo padrão exigido pelo datasheet do HC-SR04.
- Leitura do eco:
pulseIn(echoPin, HIGH)mede, em microsegundos, quanto tempo o pino Echo ficou em nível alto — ou seja, o tempo de ida e volta do som. - Cálculo da distância: multiplicamos pela velocidade do som e dividimos por 2, já que o som percorre o caminho até o obstáculo e volta.
- Saída no Monitor Serial: o valor é impresso a cada 1 segundo, na velocidade de 115200 bps.
Testando no Monitor Serial
Depois de enviar o código, abra o Monitor Serial da Arduino IDE (velocidade 115200) e aproxime ou afaste a mão do sensor. Você verá os valores de distância em centímetros mudando em tempo real. Se os números ficarem instáveis, verifique o alinhamento do sensor e possíveis interferências de objetos próximos às laterais.

Próximos passos: e se essa leitura fosse por Wi-Fi?
Esse é só o primeiro passo. Assim como fizemos no artigo de controle de LEDs por Wi-Fi, o próximo desafio natural é expor essa leitura de distância em um servidor web hospedado no próprio ESP8266 — ou até enviar os dados para um app ou painel remoto. Assim, dá para acompanhar a distância de qualquer lugar da rede, sem precisar do Monitor Serial aberto.
Conclusão
Com poucos componentes e um código enxuto, já temos um sensor de distância funcional rodando no ESP8266. É a base para projetos como sensores de estacionamento, medidores de nível de reservatório, alarmes de presença e robótica com desvio de obstáculos. Fique de olho nos próximos artigos, onde vamos conectar esse sensor à rede Wi-Fi.
Gostou do projeto? Confira também o artigo sobre controle de LEDs via Wi-Fi com o ESP8266 para continuar explorando o universo do IoT com placas ESP8266.
Compartilhe:




Publicar comentário