image 1 e1779885627163 Saravati

Como fazer uma trena digital com Arduino, sensor ultrassônico e display OLED

image 1 Saravati

Neste projeto, vamos criar uma trena digital usando Arduino. A ideia é medir a distância de um objeto utilizando um sensor ultrassônico HC-SR04 e mostrar o valor em tempo real em um display OLED.

Esse é um projeto simples, visual e muito didático para aprender conceitos importantes como:

  • leitura de sensores
  • cálculo de distância
  • uso de display OLED
  • comunicação I2C
  • programação com Arduino

Materiais necessários

Para montar o projeto, você vai precisar de:

Como funciona o sensor HC-SR04

O sensor HC-SR04 mede distância usando ondas ultrassônicas. Ele possui dois transdutores principais:

  • TRIG: envia o pulso ultrassônico
  • ECHO: recebe o retorno do sinal

O Arduino envia um pulso pelo pino TRIG. O sensor emite uma onda sonora. Quando essa onda bate em um objeto, ela retorna ao sensor. O tempo que ela leva para voltar é medido no pino ECHO.

Com esse tempo, calculamos a distância usando a fórmula: distância = tempo × velocidade do som / 2.

Dividimos por 2 porque o som vai até o objeto e volta.

No código, usamos: distancia = duracao * 0.0343 / 2.

O valor 0.0343 representa aproximadamente a velocidade do som em centímetros por microssegundo.

Pinagem do projeto

Sensor HC-SR04 no Arduino

HC-SR04 Arduino Uno/Nano

VCC 5V
GND GND
TRIG D9
ECHO D8

Display OLED I2C no Arduino

OLED I2C Arduino Uno/Nano

VCC 5V
GND GND
SDA A4
SCL A5

No Arduino Uno e Nano, os pinos I2C padrão são:
SDA = A4
SCL = A5

Bibliotecas necessárias

No Arduino IDE, instale as seguintes bibliotecas:

  1. Adafruit SSD1306
  2. Adafruit GFX Library
    Para instalar:
  3. Abra a Arduino IDE.
  4. Vá em Sketch > Incluir Biblioteca > Gerenciar Bibliotecas.
  5. Pesquise por Adafruit SSD1306 e instale.
  6. Pesquise por Adafruit GFX Library e instale.

Código completo do projeto

Copie e cole o código abaixo na Arduino IDE:

#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>

#define SCREEN_WIDTH 128
#define SCREEN_HEIGHT 64
#define OLED_RESET -1

Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, OLED_RESET);

#define TRIG_PIN 9
#define ECHO_PIN 8

void setup() {
Serial.begin(9600);

pinMode(TRIG_PIN, OUTPUT);
pinMode(ECHO_PIN, INPUT);

if (!display.begin(SSD1306_SWITCHCAPVCC, 0x3C)) {
Serial.println("OLED nao encontrado!");
while (true);
}

display.clearDisplay();
display.setTextColor(SSD1306_WHITE);
display.setTextSize(1);
display.setCursor(0, 0);
display.println("Trena Digital");
display.println("com Arduino");
display.display();

delay(1500);
}

void loop() {
long duracao;
float distancia;

digitalWrite(TRIG_PIN, LOW);
delayMicroseconds(2);

digitalWrite(TRIG_PIN, HIGH);
delayMicroseconds(10);
digitalWrite(TRIG_PIN, LOW);

duracao = pulseIn(ECHO_PIN, HIGH);

distancia = duracao * 0.0343 / 2;

Serial.print("Distancia: ");
Serial.print(distancia);
Serial.println(" cm");

display.clearDisplay();

display.setTextSize(1);

display.setCursor(0, 0);
display.println("Distancia:");

display.setTextSize(2);
display.setCursor(0, 25);
display.print(distancia, 1);
display.println(" cm");

display.display();

delay(500);
}

Inclusão das bibliotecas

include <Wire.h>

include <Adafruit_GFX.h>

include <Adafruit_SSD1306.h>

A biblioteca Wire.h faz a comunicação I2C com o display OLED. As bibliotecas da Adafruit controlam o display e permitem escrever textos, números e gráficos.

Configuração do display

define SCREEN_WIDTH 128

define SCREEN_HEIGHT 64

define OLED_RESET -1

Aqui definimos o tamanho do display OLED, que neste projeto é de 128×64 pixels.
Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, OLED_RESET);
Esse comando cria o objeto responsável por controlar o display.

Definição dos pinos do sensor

define TRIG_PIN 9

define ECHO_PIN 8

O pino TRIG está ligado no pino digital 9 do Arduino.
O pino ECHO está ligado no pino digital 8.

Inicialização

pinMode(TRIG_PIN, OUTPUT);
pinMode(ECHO_PIN, INPUT);

O pino TRIG é saída, pois envia o pulso para o sensor.
O pino ECHO é entrada, pois recebe o retorno do sinal.

Leitura da distância

digitalWrite(TRIG_PIN, LOW);
delayMicroseconds(2);

digitalWrite(TRIG_PIN, HIGH);
delayMicroseconds(10);
digitalWrite(TRIG_PIN, LOW);

Esse trecho envia um pulso curto ao sensor.

Depois usamos:
duracao = pulseIn(ECHO_PIN, HIGH);

Essa função mede o tempo que o pino ECHO ficou em nível alto.

Por fim:

distancia = duracao * 0.0343 / 2;

Esse cálculo converte o tempo em distância em centímetros.

Resultado esperado

Ao aproximar ou afastar um objeto do sensor, o display OLED mostrará a distância em
tempo real:

Distancia:
24.5 cm

Também é possível acompanhar o valor pelo Serial Monitor da Arduino IDE.

Possíveis problemas e soluções

O OLED não aparece

Teste trocar o endereço: 0x3C
por: 0x3D

A distância aparece zerada

Verifique:
se o TRIG está no pino D9;
se o ECHO está no pino D8;
se o sensor está alimentado com 5V;
se o GND está conectado corretamente.

A distância fica instável

Tente:
manter o objeto em uma superfície plana;
evitar medir tecidos ou superfícies irregulares;
aumentar o delay entre leituras;
fazer uma média de várias medições.

Melhorias para o projeto

Você pode evoluir essa trena digital adicionando:

  • barra gráfica no OLED;
  • buzzer de proximidade;
  • botão para congelar a medição;
  • conversão para metros;
  • interface mais bonita;
  • medição máxima e mínima;
  • indicador visual de distância segura;
  • caixa impressa em 3D.

Conclusão

Neste projeto, criamos uma trena digital com Arduino, utilizando um sensor ultrassônico HC-SR04 e um display OLED. Esse projeto é uma ótima forma de aprender como sensores funcionam na prática e como
podemos transformar leituras físicas em informações visuais no display. Com poucos componentes, é possível criar uma aplicação útil, didática e com grande impacto visual.

Saiba mais sobre a parceria Saravati e Sara Educação

Este “Guia de Montagem” é uma colaboração especial entre a Saravati e a Sara Educação, criado pelo Professor Felipe Rosa. Nosso objetivo é enriquecer a comunidade de entusiastas da eletrônica, IoT e automação com recursos educacionais de alta qualidade. Através dessa parceria, buscamos inspirar e capacitar criadores em seus projetos, disponibilizando esses guias em nosso blog e nas redes sociais.

@saravatirobotica no Instagram e Tiktok

@sara.educacao no Instagram e Tiktok