Código de Pesquisa

Código Arduino e vídeo para o sensor de distância ultrassônico HC-SR04 com display OLED SSD1306

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.

How HC-SR04 ulrasonic sensor work
SSD1306 OLED display

À 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

FabricanteDiversos
Número da peçaHC-SR04
Tensão lógica/E/S5 V
Tensão de alimentação5 V
Corrente de saída (por canal)15 mA
Corrente de pico (por canal)20 mA
Orientação sobre a frequência PWMNão aplicável
Limiares de lógica de entrada0.3*Vcc a 0.7*Vcc
Queda de tensão / RDS(on)/ saturaçãoNão aplicável
Limites térmicos0-70 °C
Pacotemódulo de 4 pinos
Notas / variantesMó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

Arduino wiring for HC-SR04 ultrasonic SSD1306 128x64 OLED
Arduino wiring for HC-SR04 ultrasonic SSD1306 128x64 OLED

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

Imagens

HC-SR04 ulrasonic sensor
HC-SR04 ulrasonic sensor
How HC-SR04 ulrasonic sensor work
How HC-SR04 ulrasonic sensor work
Arduino wiring for HC-SR04 ultrasonic SSD1306 128x64 OLED
Arduino wiring for HC-SR04 ultrasonic SSD1306 128x64 OLED
SSD1306 OLED display
SSD1306 OLED display
SSD1306 OLED display-dimensions
SSD1306 OLED display-dimensions
SSD1306_128x64_OLDE-4
SSD1306_128x64_OLDE-4
SSD1306 OLED display-back
SSD1306 OLED display-back
44-This is the Arduino code for an HC-SR04 ultrasonic distance sensor with an SSD1306 display.
Idioma: C++
/*
 * 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

Arquivos📁

Nenhum arquivo disponível.