Sanat Vidwans
Published

Build an Arduino Ultrasonic Distance Meter with OLED and LED

Build an Arduino ultrasonic distance meter with an OLED display and LED proximity alert using the HC-SR04 sensor. Perfect for beginners!

IntermediateFull instructions provided5 hours9
Build an Arduino Ultrasonic Distance Meter with OLED and LED

Things used in this project

Hardware components

Arduino UNO R3 compatible development board – 1 Qty
from https://rajivelectronics.com
×1
HC-SR04 ultrasonic distance sensor – 1 Qty
from https://rajivelectronics.com
×1
0.96-inch I2C OLED display, 128x64 SSD1306 – 1 Qty
from https://rajivelectronics.com
×1
Red LED – 1 Qty
from https://rajivelectronics.com
×1
Breadboard
from https://rajivelectronics.com
×1
Jumper wires – 1 Set
from https://rajivelectronics.com
×1
Compatible USB data cable – 1 Qty
from https://rajivelectronics.com
×1

Software apps and online services

Arduino IDE
Arduino IDE

Story

Read more

Schematics

hackster_story_CdMRzBy2ZZ.md

Complete project files (ZIP)

Code

Arduino Ultrasonic Distance Meter with OLED Display and LED Alert

C/C++
#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>

#define TRIG_PIN 9
#define ECHO_PIN 10
#define LED_PIN 6

#define SCREEN_WIDTH 128
#define SCREEN_HEIGHT 64
#define OLED_RESET -1
#define OLED_ADDRESS 0x3C

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

const float ALERT_DISTANCE = 15.0;

float measureDistance() {
  digitalWrite(TRIG_PIN, LOW);
  delayMicroseconds(2);

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

  unsigned long duration =
    pulseIn(ECHO_PIN, HIGH, 25000UL);

  if (duration == 0) return -1;

  float distance = duration * 0.0343 / 2.0;

  if (distance < 2 || distance > 400) return -1;

  return distance;
}

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

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

  digitalWrite(TRIG_PIN, LOW);
  digitalWrite(LED_PIN, LOW);

  Wire.begin();

  if (!display.begin(
      SSD1306_SWITCHCAPVCC, OLED_ADDRESS)) {
    Serial.println("OLED initialization failed");
    while (true) {
      delay(1000);
    }
  }
}

void loop() {
  float distance = measureDistance();

  bool alert = distance >= 0 &&
               distance <= ALERT_DISTANCE;

  digitalWrite(LED_PIN, alert ? HIGH : LOW);

  display.clearDisplay();
  display.setTextColor(SSD1306_WHITE);
  display.setTextSize(1);

  display.setCursor(15, 0);
  display.println("DISTANCE METER");
  display.drawLine(0, 12, 127, 12, SSD1306_WHITE);

  if (distance < 0) {
    display.setTextSize(2);
    display.setCursor(20, 25);
    display.println("NO ECHO");
    Serial.println("No valid echo");
  } else {
    display.setTextSize(2);
    display.setCursor(10, 23);
    display.print(distance, 1);
    display.println(" cm");

    display.setTextSize(1);
    display.setCursor(8, 52);

    if (alert) {
      display.println("ALERT: TOO CLOSE");
    } else {
      display.println("STATUS: CLEAR");
    }

    Serial.print("Distance: ");
    Serial.print(distance, 1);
    Serial.println(" cm");
  }

  display.display();
  delay(200);
}

Credits

Sanat Vidwans
1 project • 0 followers

Comments