CodificaLab

Fazendo Funcionar

ESP32 com sensor ultrassônico de distância HC-SR04 e display OLED SSD 1306

Published by

on

Um sensor ultrassônico pode ser usado para medir distâncias enviando e recebendo ondas ultrassônicas. Logo, um sensor de distância ultrassônico HC-SR04 consiste, na verdade, em dois transdutores ultrassônicos. Um atua como um transmissor que converte o sinal elétrico em pulsos de som ultrassônico de 40 KHz. O outro atua como receptor e escuta os pulsos transmitidos.

Ao receber esses pulsos, o receptor produz um pulso de saída cuja largura é proporcional
à distância do objeto à sua frente.

Figura 1

Conforme a figura acima, tudo começa quando o pino de disparo (Trigger na figura) é definido como ALTO por 10µs. Em resposta, o sensor transmite um
conjunto de oito pulsos ultrassônicos de 40 kHz. Este padrão de 8 pulsos é especialmente projetado para que o receptor possa distinguir os pulsos transmitidos do ruído ultrassônico ambiente. Esses oito pulsos ultrassônicos viajam pelo ar para longe do transmissor. Enquanto isso, o pino de eco (echo na figura 1) vai para HIGH para iniciar a contagem de tempo do sinal de retorno, o eco.

Se esses pulsos forem refletidos de volta, o pino de eco ficará baixo assim que o sinal for recebido. A largura do pulso recebido é usada para calcular a distância do objeto refletido. Isso pode ser resolvido usando a equação distância-velocidade-tempo.

Calculando a distância

Suponha que temos um objeto na frente do sensor a uma distância desconhecida e recebemos um pulso de 500µs de largura no pino de eco, como mostrado na figura. Agora vamos calcular a que distância o objeto está do sensor. Para isso usaremos a equação abaixo.

Aqui temos o valor do tempo, ou seja, 500 µs, e conhecemos a velocidade, que é a velocidade do som. São 340 m/s no ar, em temperatura de 20 ºC. Para calcular a distância, podemos converter a velocidade do som em cm/µs (centímetros por microssegundos), que nos dá 0,034 cm/µs. Com essa informação podemos calcular a distância. Lembre-se de que o pulso de eco indica o tempo que leva para o sinal ser enviado e refletido de volta. Então, para obter a distância, você deve dividir o resultado por dois.

Conectando o sensor HC-SR204 e o display ao ESP32

Para ilustrar melhor o conteúdo mencionado neste artigo faremos uso do simulador de ESP32 online Wokwi, onde será possível visualizar na prática de forma virtual, o funcionamento do código e do sensor de distância .

Para começar o projeto, vamos elaborar a montagem. Conecte o sensor HC-SR04 na placa ESP32. O sensor tem quatro pinos: VCC, GND, TRIG e ECHO. Conecte o pino VCC a uma fonte de alimentação de 5V na placa ESP32, o pino GND a um pino terra, o pino TRIG a um pino de saída digital (pino D18, como no exemplo da figura 2) e o pino ECHO a um pino de entrada digital (pino D5, como no exemplo da figura 2).

O display Oled já foi usado por nós em exemplos anteriores. O modelo que estamos usando tem quatro pinos e se comunica com o ESP32 usando o protocolo de comunicação I2C. Os pinos mais adequados para comunicação I2C no ESP32 são GPIO 22(SCL) e GPIO 21(SDA).

Figura 2

Para usar este exemplo, certifique-se de ter as bibliotecas Adafruit SSD1306 e Adafruit GFX instaladas. Relembrando, na IDE do Arduino, vá para Ferramentas > Gerenciador de Biblioteca , procure por “ SSD1306” e instale a biblioteca SSD1306 da Adafruit. Após instalar a biblioteca Adafruit SSD1306, digite “GFX ” na caixa de pesquisa para instalar a biblioteca Adafruit GFX Library.

Em seguida, basta usar o código a seguir e fazer o upload do código para a placa.

Link para download

Link para o simulador

/*********
  Este código permite medir distância com o sensor ultrassônico HC-SR04,
  enviando os dados de medição para o display OLED SSD1306.
*********/

// carrega bibliotecas

#include <Wire.h>  // Biblioteca para usar I2C
#include <Adafruit_GFX.h> 
#include <Adafruit_SSD1306.h>


#define SCREEN_WIDTH 128 // Largura do display OLED, em pixels
#define SCREEN_HEIGHT 64 // Altura do display OLED, em pixels
// Para conectar o SSD1306 display ao I2C (pinos SDA e SCL) 
Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, -1);

const int trigPin = 18;
const int echoPin = 5;

//define a velocidade do som em cm/uS
#define SOUND_SPEED 0.034


long duration;
float distanceCm;
float distanceInch;

void setup() {
  /// setup do display
    if(!display.begin(SSD1306_SWITCHCAPVCC, 0x3C)) { // 0x3C é o endereço no barramento I2C
    Serial.println(("SSD1306 falha"));
    for(;;);
  }
  delay(2000);
  
  display.setTextSize(1);
  display.setTextColor(WHITE);
  /// fim setup do display
  
  Serial.begin(115200); // Inicia a comunicação serial
  pinMode(trigPin, OUTPUT); // Ajusta trigPin como saída
  pinMode(echoPin, INPUT); // Ajusta echoPin como entrada
}

void loop() {
  // limpa trigPin
  digitalWrite(trigPin, LOW);
  delayMicroseconds(2);
  // Mantem trigPin em estado HIGH por 10 microssegundos
  digitalWrite(trigPin, HIGH);
  delayMicroseconds(10);
  digitalWrite(trigPin, LOW);
  
  // Lê o echoPin, retorna o tempo de viagem da onda sonora em microssegundos
  duration = pulseIn(echoPin, HIGH);
  
  // Calcula a distância
  distanceCm = duration * SOUND_SPEED/2;
  
  // Imprime a distância no monitor serial
  Serial.print("Distancia (cm): ");
  Serial.println(distanceCm);

  // Escrita no display
  
  display.clearDisplay();
  display.setCursor(0, 10); // posição da próxima escrita (coluna, linha)
  display.print("Dist: ");
  display.print(distanceCm);
  display.print(" cm");
  display.display(); 
  
  delay(1000);
}

Verificando o código no simulador

Acessando o simulador Wokwi, você encontrará duas partes segmentadas dentro dele. A primeira metade é onde iremos escrever o código do ESP32 e também onde adicionamos as bibliotecas utilizadas no projeto. Na segunda metade é onde realizamos a montagem do circuito e adicionamos elementos como o microcontrolador, resistores, sensores e outros dispositivos ao circuito. Na segunda metade também é onde executamos a simulação.

Pressionando o botão verde, “Start the simulation”, o simulador dará início ao processo de compilar o código e em seguida irá executar o programa. Ao iniciar a execução do programa, o simulador irá exibir o monitor serial no canto direito abaixo da tela, juntamente com a visualização prática do circuito virtual.

Caso o circuito possua algum sensor que dependa de um valor de entrada, pode-se simular este valor clicando sobre o sensor e personalizando o valor de acordo com o que desejar.

Concluindo

Este tutorial é um guia de introdução ao uso de um sensor HC-SR04 em conjunto com o micrcontrolador ESP32, com uma demonstração prática no simulador e com uma explicação sobre o funcionamento de um sensor de distância ultrassônico.

Esperamos que este guia tenha sido útil. Leia as últimas publicações. Dúvidas e recomendações, não hesite de comentar.

Deixe um comentário