ESP8266 - Sensor Ultrassônico

Este tutorial ensina você a usar o ESP8266 e um sensor ultrassônico para medir a distância até obstáculos ou objetos. Em detalhes, vamos aprender:

Hardware Necessário

1×ESP8266 NodeMCU ESP-12F
1×Alternatively, ESP8266 D1 Mini NodeMCU ESP-12F
1×Alternatively, ESP8266 NodeMCU ESP-12E (Uno-form)
1×Micro USB Cable
1×Alternatively, ESP8266 NodeMCU ESP-12F (SMD-form)
1×Cabo USB Tipo-A para Tipo-C (para PC com USB-A)
1×Cabo USB Tipo-C para Tipo-C (para PC com USB-C)
1×Sensor Ultrassônico
1×Fios Jumper
1×(Recomendado) Placa de Expansão com Bornes de Parafuso para ESP8266

Or you can buy the following kits:

1×DIYables Sensor Kit (18 sensors/displays)
Divulgação: Alguns dos links desta seção são links de afiliado da Amazon. Podemos receber uma comissão pelas compras feitas por meio desses links, sem custo adicional para você. Agradecemos o seu apoio.

Sobre o Sensor Ultrassônico

O sensor ultrassônico HC-SR04 é usado para determinar a distância até um objeto por meio de ondas ultrassônicas.

Pinagem do Sensor Ultrassônico

O sensor ultrassônico HC-SR04 tem quatro pinos:

  • Pino VCC: deve ser conectado ao VCC (5V)
  • Pino GND: deve ser conectado ao GND (0V)
  • Pino TRIG: este pino recebe o sinal de controle (pulso) do ESP8266.
  • Pino ECHO: este pino envia um sinal (pulso) para o ESP8266. O ESP8266 mede a duração do pulso para calcular a distância.
Pinagem do sensor ultrassônico

Como Funciona

Esta seção traz um conhecimento mais aprofundado. NÃO se preocupe se você não entender. Pule esta seção se ela parecer difícil demais e volte outro dia. Continue lendo as próximas seções.
  1. O microcontrolador produz um pulso de 10 microssegundos no pino TRIG, o que faz o sensor ultrassônico emitir ondas ultrassônicas.
  2. A onda ultrassônica é refletida ao atingir um obstáculo.
  3. Em seguida, o sensor ultrassônico detecta a onda ultrassônica refletida e mede o seu tempo de percurso.
  4. O sensor ultrassônico gera um pulso no pino ECHO, com a duração do pulso igual ao tempo de percurso da onda ultrassônica.
  5. O microcontrolador mede a duração do pulso no pino ECHO e calcula a distância entre o sensor e o obstáculo.

Como Obter a Distância do Sensor Ultrassônico

  1. Para calcular a distância a partir do sensor ultrassônico, dois passos devem ser seguidos (1 e 6 na seção Como Funciona):
  2. Gere um pulso de 10 microssegundos no pino TRIG.
  3. Meça a duração do pulso no pino ECHO.
  4. Calcule a distância entre o sensor e o obstáculo.

Cálculo da Distância

Temos:

  • O tempo de percurso da onda ultrassônica (µs): travel_time = pulse_duration
  • A velocidade da onda ultrassônica: speed = SPEED_OF_SOUND = 340 m/s = 0.034 cm/µs

Então:

  • A distância percorrida pela onda ultrassônica (cm): travel_distance = speed × travel_time = 0.034 × pulse_duration
  • A distância entre o sensor e o obstáculo (cm): distance = travel_distance / 2 = 0.034 × pulse_duration / 2 = 0.017 × pulse_duration

ESP8266 - Sensor Ultrassônico

Podemos usar dois pinos de um ESP8266 para medir a distância com um sensor ultrassônico: um pino é conectado ao pino TRIG para gerar um pulso de 10µs, e o outro pino é conectado ao pino ECHO para medir o pulso do sensor.

Diagrama de Ligação

Diagrama de ligação do sensor ultrassônico com ESP8266 NodeMCU

This image is created using Fritzing. Click to enlarge image

Para mais informações, veja Pinagem do ESP8266 e como alimentar o ESP8266 e outros componentes.

Como Programar o Sensor Ultrassônico

  • Gere um pulso de 10 microssegundos no pino D5 do ESP8266 usando as funções digitalWrite() e delayMicroseconds(). Por exemplo:
  • Coloque o pino em HIGH com digitalWrite(), espere 10 microssegundos com delayMicroseconds() e depois coloque o pino em LOW com digitalWrite().
digitalWrite(D5, HIGH); delayMicroseconds(10); digitalWrite(D5, LOW);
  • Meça a duração do pulso (µs) no pino D6 do Arduino usando a função pulseIn(). Por exemplo:
duration_us = pulseIn(D6, HIGH);
  • Calcule a distância (cm):
distance_cm = 0.017 * duration_us;

Código ESP8266

const int TRIG_PIN = D5; // The ESP8266 pin D5 connected to Ultrasonic Sensor's TRIG pin const int ECHO_PIN = D6; // The ESP8266 pin D6 connected to Ultrasonic Sensor's ECHO pin float duration_us, distance_cm; void setup() { // begin serial port Serial.begin (9600); // Configure the trigger pin to output mode pinMode(TRIG_PIN, OUTPUT); // Configure the echo pin to input mode pinMode(ECHO_PIN, INPUT); } void loop() { // Produce a 10-microsecond pulse to the TRIG pin. digitalWrite(TRIG_PIN, HIGH); delayMicroseconds(10); digitalWrite(TRIG_PIN, LOW); // Measure the pulse duration from the ECHO pin duration_us = pulseIn(ECHO_PIN, HIGH); // calculate the distance distance_cm = 0.017 * duration_us; // print the value to Serial Monitor Serial.print("distance: "); Serial.print(distance_cm); Serial.println(" cm"); delay(500); }

Passos Rápidos

Para começar com o ESP8266 no Arduino IDE, siga estes passos:

  • Veja o tutorial como configurar o ambiente para o ESP8266 no Arduino IDE se esta for a sua primeira vez usando o ESP8266.
  • Ligue os componentes como mostrado no diagrama.
  • Conecte a placa ESP8266 ao seu computador usando um cabo USB.
  • Abra o Arduino IDE no seu computador.
  • Escolha a placa ESP8266 correta, como (por exemplo, NodeMCU 1.0 (ESP-12E Module)), e a respectiva porta COM.
  • Copie o código e abra-o no Arduino IDE.
  • Clique no botão Upload do Arduino IDE para compilar e fazer o upload do código para o ESP8266.
Como fazer upload do código para o ESP8266 NodeMCU usando o Arduino IDE
  • Abra o Serial Monitor
  • Mova a mão perto do sensor ultrassônico
  • Veja no Serial Monitor a distância entre o sensor e a sua mão
∞
Newbiely | Arduino IDE 2.3.8
──
☐
✕
File
Edit
Sketch
Tools
Help
Nodemcu 1.0 (ESP-12E Module)
Newbiely.ino
···
8 Serial.println("Hello World!");
Output
Serial Monitor
Message (Enter to send message to 'Nodemcu 1.0 (ESP-12E Module)' on 'COM15')
New Line
9600 baud
distance: 29.4 cm distance: 27.6 cm distance: 26.9 cm distance: 17.4 cm distance: 16.9 cm distance: 14.3 cm distance: 15.6 cm distance: 13.1 cm
Ln 11, Col 1
Nodemcu 1.0 (ESP-12E Module) on COM15
2

Explicação do Código

Veja a explicação linha por linha contida nos comentários do código-fonte!

Como Filtrar o Ruído das Medições de Distância do Sensor Ultrassônico

O resultado da medição de um sensor ultrassônico pode incluir ruído, o que pode causar operações indesejadas em certas aplicações. Para remover o ruído, o algoritmo a seguir pode ser usado:

  1. Faça várias medições e armazene-as em um array
  2. Ordene o array em ordem crescente
  3. Filtre o ruído
    • Algumas das menores amostras são consideradas ruído → ignore-as
    • Algumas das maiores amostras são consideradas ruído → ignore-as
    • Calcule a média das amostras do meio

    O código de exemplo abaixo faz 20 medições:

    • As cinco menores amostras devem ser descartadas.
    • As cinco maiores amostras devem ser descartadas.
    • Deve-se tirar a média das 10 amostras do meio (da 5ª à 14ª).
    /* * Este código de ESP8266 NodeMCU foi desenvolvido por pt.newbiely.com * Este código de ESP8266 NodeMCU é disponibilizado ao público sem nenhuma restrição. * Para tutoriais completos e diagramas de ligação, visite: * https://pt.newbiely.com/tutorials/esp8266/esp8266-ultrasonic-sensor */ #define TRIG_PIN D5 // The ESP8266 pin connected to Ultrasonic Sensor's TRIG pin #define ECHO_PIN D6 // The ESP8266 pin connected to Ultrasonic Sensor's ECHO pin float filterArray[20]; // array to store data samples from sensor float distance; // store the distance from sensor void setup() { // begin serial port Serial.begin (9600); // Configure the trigger and echo pins to output mode pinMode(TRIG_PIN, OUTPUT); pinMode(ECHO_PIN, INPUT); } void loop() { // 1. TAKING MULTIPLE MEASUREMENTS AND STORE IN AN ARRAY for (int sample = 0; sample < 20; sample++) { filterArray[sample] = ultrasonicMeasure(); delay(30); // to avoid untrasonic interfering } // 2. SORTING THE ARRAY IN ASCENDING ORDER for (int i = 0; i < 19; i++) { for (int j = i + 1; j < 20; j++) { if (filterArray[i] > filterArray[j]) { float swap = filterArray[i]; filterArray[i] = filterArray[j]; filterArray[j] = swap; } } } // 3. FILTERING NOISE // + the five smallest samples are considered as noise -> ignore it // + the five biggest samples are considered as noise -> ignore it // ---------------------------------------------------------------- // => get average of the 10 middle samples (from 5th to 14th) double sum = 0; for (int sample = 5; sample < 15; sample++) { sum += filterArray[sample]; } distance = sum / 10; // print the value to Serial Monitor Serial.print("distance: "); Serial.print(distance); Serial.println(" cm"); } float ultrasonicMeasure() { // Produce a 10-microsecond pulse to the TRIG pin. digitalWrite(TRIG_PIN, HIGH); delayMicroseconds(10); digitalWrite(TRIG_PIN, LOW); // Measure the pulse duration from the ECHO pin float duration_us = pulseIn(ECHO_PIN, HIGH); // calculate the distance float distance_cm = 0.017 * duration_us; return distance_cm; }

Vídeo

Desafie-se

Use um sensor ultrassônico em qualquer um dos projetos a seguir:

  • Construa um sistema de prevenção de colisão para um carrinho de controle remoto.
  • Estime o nível de enchimento de uma lixeira.
  • Monitore o nível de uma lixeira.
  • Automatize a abertura e o fechamento de uma lixeira. Dica: Veja ESP8266 - Servo Motor.

Aplicações do Sensor Ultrassônico

  • Prevenção de Colisões
  • Estimativa de Capacidade
  • Estimativa de Altura
  • Identificação de Objetos Próximos

※ NOSSAS MENSAGENS

  • Fique à vontade para compartilhar o link deste tutorial. Porém, por favor, não use nosso conteúdo em outros sites. Investimos muito esforço e tempo para criar este conteúdo, por favor respeite nosso trabalho!