Código Arduino e vídeo para o sensor de distância ultrassônico HC-SR04 com display OLED SSD1306
Neste tutorial, vamos demonstrar como usar o sensor de distância ultrassônico HC-SR04 em conjunto com o display OLED SSD1306 para visualizar medições de distância. Este projeto permite medir distâncias sem a necessidade de um computador, tornando-o ideal para várias aplicações, incluindo robótica. Ao final deste projeto, você terá uma montagem funcional que exibe as leituras de distância diretamente na tela OLED.


À medida que avançamos, vou explicar as conexões de fiação necessárias para ambos os componentes e fornecer um passo a passo do código Arduino que integra esses componentes. Isso ajudará você a entender como o sensor mede a distância e como apresentar esses dados no display OLED. Para mais esclarecimentos, você pode consultar o vídeo associado a este tutorial (no vídeo em 00:00).
Hardware explicado
Os principais componentes deste projeto são o sensor de distância ultrassônico HC-SR04 e o display OLED SSD1306. O HC-SR04 funciona usando ondas ultrassônicas; ele emite um pulso ultrassônico pelo pino de disparo e escuta o eco no pino de eco. Ao calcular o tempo que o som leva para retornar, ele pode determinar a distância até um objeto. Este sensor é muito eficaz para medições de curto alcance, tipicamente até 400-500 cm.
O display OLED SSD1306 é um display com interface I2C que permite exibir texto e gráficos. Ele se comunica por meio de dois pinos: SDA (linha de dados) e SCL (linha de clock). Na nossa configuração, esses pinos se conectam a pinos específicos do Arduino, permitindo integração e controle fáceis.
Detalhes da ficha técnica
| Fabricante | Diversos |
|---|---|
| Número da peça | HC-SR04 |
| Tensão lógica/E/S | 5 V |
| Tensão de alimentação | 5 V |
| Corrente de saída (por canal) | 15 mA |
| Corrente de pico (por canal) | 20 mA |
| Orientação sobre a frequência PWM | Não aplicável |
| Limiares de lógica de entrada | 0.3*Vcc a 0.7*Vcc |
| Queda de tensão / RDS(on)/ saturação | Não aplicável |
| Limites térmicos | 0-70 °C |
| Pacote | módulo de 4 pinos |
| Notas / variantes | Módulo padrão |
- Garanta alimentação adequada (5 V) para ambos os componentes.
- Use resistores pull-up se necessário para a comunicação I2C.
- Mantenha as linhas de trigger e echo curtas para evitar interferência.
- Verifique a orientação do sensor ultrassônico para leituras precisas.
- Use uma superfície estável para a tela para evitar vibrações mecânicas.
Instruções de fiação

Para conectar o sensor ultrassônico HC-SR04, comece ligando o pino VCC (geralmente vermelho) ao pino 5V do Arduino. Em seguida, conecte o pino GND (normalmente preto ou amarelo) a um dos pinos GND do Arduino. O pino trigger (frequentemente azul) deve ser ligado ao pino digital 12 do Arduino, enquanto o pino echo (geralmente verde) deve ser conectado ao pino digital 11.
Para o display OLED SSD1306, conecte o pino VCC ao pino 5V do Arduino e o pino GND ao pino GND. O pino SCL deve ser conectado ao pino A5 e o pino SDA ao pino A4 do Arduino. Se você estiver usando um modelo diferente de Arduino que possua pinos I2C dedicados, conecte o display diretamente a esses pinos em vez disso.
Exemplos de Código e Tutorial Passo a Passo
Na função setup, inicializamos o display e a comunicação serial. O trecho a seguir demonstra como o display é configurado:
void setup() {
Serial.begin(9600);// set serial monitor with 9600 baud
display.begin(SSD1306_SWITCHCAPVCC, 0x3C); // initialize with the I2C addr 0x3D
}Aqui, o display é inicializado com o endereço I2C, permitindo que ele se comunique com o Arduino. O monitor serial também é configurado para imprimir os valores de distância.
No loop principal, limpamos a tela, medimos a distância e a exibimos. O trecho de código a seguir mostra como lidamos com a medição da distância:
void loop() {
display.clearDisplay();
String distance = String(sonar.ping_cm());// get distance and convert it to string for display
robojaxText(distance +"cm", 3, 20, 3, false);
display.display();
delay(50); // Wait 50ms between pings
}Este loop mede continuamente a distância e atualiza o display com a leitura atual. A função robojaxText é usada para exibir o texto na tela OLED.
Demonstração / O que esperar
Quando a configuração estiver concluída e o código for carregado, você deverá ver a distância exibida na tela OLED em centímetros. Ao aproximar ou afastar um objeto do sensor, o valor exibido deverá mudar de acordo. Certifique-se de que o sensor esteja orientado corretamente e não esteja obstruído (no vídeo em 02:30).
Marcadores de tempo do vídeo
- 00:00- Introdução ao projeto
- 01:15- Instruções de fiação
- 02:30- Explicação do código
- 04:00- Demonstração do sensor
/*
* This is the Arduino code for the HC-SR04 Ultrasonic Distance Sensor with SSD1306 Display
* to measure the distance using Arduino for a robotic car and other applications
* Watch the video https://youtu.be/Pgx5fNF4Q6M
*
* Written by Ahmad Shamshiri for Robojax Video
* Date: December 21, 2017, in Ajax, Ontario, Canada
* Permission granted to share this code given that this
* note is kept with the code.
* Disclaimer: this code is "AS IS" and for educational purposes only.
*
*/
/* Original Code
from https://github.com/adafruit/Adafruit_SSD1306
// https://playground.arduino.cc/Code/NewPing
* Modified for Robojax video on December 21, 2017
// ---------------------------------------------------------------------------
// Example NewPing library sketch that does a ping about 20 times per second.
// ---------------------------------------------------------------------------
*/
//// start of SSD1306 display
#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
#define OLED_RESET 4
Adafruit_SSD1306 display(OLED_RESET);
#define NUMFLAKES 10
#define XPOS 0
#define YPOS 1
#define DELTAY 2
#define LOGO16_GLCD_HEIGHT 64
#define LOGO16_GLCD_WIDTH 128
static const unsigned char PROGMEM logo16_glcd_bmp[] =
{ B00000000, B11000000,
B00000001, B11000000,
B00000001, B11000000,
B00000011, B11100000,
B11110011, B11100000,
B11111110, B11111000,
B01111110, B11111111,
B00110011, B10011111,
B00011111, B11111100,
B00001101, B01110000,
B00011011, B10100000,
B00111111, B11100000,
B00111111, B11110000,
B01111100, B11110000,
B01110000, B01110000,
B00000000, B00110000 };
#if (SSD1306_LCDHEIGHT != 64)
#error("Height incorrect, please fix Adafruit_SSD1306.h!");
#endif
//// end of SSD1306 display
// ---------------------------------------------------------------------------
// Example NewPing library sketch that does a ping about 20 times per second.
// ---------------------------------------------------------------------------
#include <NewPing.h>
#define TRIGGER_PIN 12 // Arduino pin tied to trigger pin on the ultrasonic sensor.
#define ECHO_PIN 11 // Arduino pin tied to echo pin on the ultrasonic sensor.
#define MAX_DISTANCE 200 // Maximum distance we want to ping for (in centimeters). Maximum sensor distance is rated at 400-500cm.
NewPing sonar(TRIGGER_PIN, ECHO_PIN, MAX_DISTANCE); // NewPing setup of pins and maximum distance.
void setup() {
Serial.begin(9600);// set serial monitor with 9600 baud
display.begin(SSD1306_SWITCHCAPVCC, 0x3C); // initialize with the I2C addr 0x3D (for the 128x64)
}// setup end
void loop() {
display.clearDisplay();
robojaxText("Distance", 3, 0, 2, false);
String distance = String(sonar.ping_cm());// get distance and convert it to string for display
robojaxText(distance +"cm", 3, 20, 3, false);
display.display();
delay(50); // Wait 50ms between pings (about 20 pings/sec). 29ms should be the shortest delay between pings.
Serial.print("Ping: ");
Serial.print(sonar.ping_cm()); // Send ping, get distance in cm and print result (0 = outside set distance range)
Serial.println("cm");
}// loop end
/*
* robojaxText(String text, int x, int y,int size, boolean d)
* text is the text string to be printed
* x is the integer x position of text
* y is the integer y position of text
* size is the text size, 1, 2, 3 etc
* d is either true or false. Use true to display.
*/
void robojaxText(String text, int x, int y,int size, boolean d) {
display.setTextSize(size);
display.setTextColor(WHITE);
display.setCursor(x,y);
display.println(text);
if(d){
display.display();
}
}
Recursos e referências
-
ExternoBiblioteca Ultrassônica HC-SR04 do site oficial da Arduinoplayground.arduino.cc
Arquivos📁
Nenhum arquivo disponível.