Arduino UNO: Medición de Distancia con Sensor Ultrasónico HC-SR04 y Pantalla OLED Adafruit
Componentes y Suministros
| Arduino UNO | × | 1 |
| Sensor Ultrasónico HC-SR04 (Genérico) | × | 1 |
| Pantalla OLED LED LCD 128x64 Adafruit | × | 1 |
Aplicaciones y Servicios Online
- Arduino IDE
Sobre el Proyecto

Cómo Usar la Pantalla OLED
Aquí tienes mi tutorial previo sobre ello:
#includesy#defines, antes desetup():
#include <SPI.h> // necesitamos todas esas librerías para OLED
#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
#define OLED_RESET 4 // pin de reset, NO LO USO
Adafruit_SSD1306 display(OLED_RESET);
- En la función
setup():
display.begin(SSD1306_SWITCHCAPVCC, 0x3C); // inicializar con dirección I2C 0x3C (128x64)
display.clearDisplay(); // limpiar display antes de empezar
- En la función
loop():
display.setCursor(22,20); // coordenadas x,y
display.setTextSize(3); // tamaño del texto
display.setTextColor(WHITE); // si escribes BLACK borra cosas
display.println(distancia); // imprime nuestra variable
display.setCursor(85,20); // establece tamaño, imprime unidades (cm/in)
display.setTextSize(3);
#ifdef CommonSenseMetricSystem // si hay #define CommonSenseMetricSystem
display.println("cm"); // imprime "cm" en OLED
#endif
#ifdef ImperialNonsenseSystem // si hay #define ImperialNonsenseSystem
display.println("in"); // imprime "in" en OLED
#endif
display.display(); // necesitas mostrar realmente todos esos datos
delay(500); // espera!, velocidad humana
display.clearDisplay(); // limpiar display en negro
Cómo Usar el Sensor Ultrasónico HC-SR04
Aquí tienes la hoja de datos: el módulo HC envía una ráfaga de pulsos y luego mide el tiempo que el eco del ultrasonido tarda en volver a su posición original.
- Generar pulso para trigger del HC, el HC hará ráfaga de pulsos:
long duration, distance; // nuestras queridas variables
digitalWrite(trigPin, LOW); // PULSO ___|---|___
delayMicroseconds(2);
digitalWrite(trigPin, HIGH);
delayMicroseconds(10);
digitalWrite(trigPin, LOW);
PulseIn()es una función poco usada, detecta la longitud del flanco alto (__----__) o bajo (----___---)
Usamos #ifdef para compilar solo las partes que necesitamos.
duration = pulseIn(echoPin, HIGH);
#ifdef CommonSenseMetricSystem
distance = (duration/2) / 29.1;
#endif
#ifdef ImperialNonsenseSystem
distance = (duration/2) / 73.914;
#endif
- Y esto para depuración por si tu OLED no funciona:
Serial.println(distance); // debug
Código
Medición de distancia por ultrasón y visualización Arduino
// CÓDIGO POR Javier Muñoz Sáez, 05/11/2016 preguntas a javimusama@gmail.com
#include <SPI.h>
#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
#define CommonSenseMetricSystem
//#define ImperialNonsenseSystem
#define trigPin 13
#define echoPin 12
#define OLED_RESET 4
Adafruit_SSD1306 display(OLED_RESET);
void setup() {
Serial.begin(9600);
pinMode(trigPin, OUTPUT);
pinMode(echoPin, INPUT);
display.begin(SSD1306_SWITCHCAPVCC, 0x3C); // inicializar con dirección I2C 0x3C (128x64)
display.clearDisplay();
}
void loop() {
long duration, distance;
digitalWrite(trigPin, LOW); // PULSO ___|---|___
delayMicroseconds(2);
digitalWrite(trigPin, HIGH);
delayMicroseconds(10);
digitalWrite(trigPin, LOW);
duration = pulseIn(echoPin, HIGH);
#ifdef CommonSenseMetricSystem
distance = (duration/2) / 29.1;
#endif
#ifdef ImperialNonsenseSystem
distance = (duration/2) / 73.914;
#endif
display.setCursor(22,20); // display OLED
display.setTextSize(3);
display.setTextColor(WHITE);
display.println(distance);
display.setCursor(85,20);
display.setTextSize(3);
#ifdef CommonSenseMetricSystem
display.println("cm");
#endif
#ifdef ImperialNonsenseSystem
display.println("in");
#endif
display.display();
delay(500);
display.clearDisplay();
Serial.println(distance); // debug
}
Esquemáticos

Proceso de manufactura
- Construya un sensor de temperatura remoto con Raspberry Pi y Python – Guía paso a paso
- Construya un Sistema de Monitorización de Temperatura y Luz Multi‑Sensor con Raspberry Pi y DS18B20
- Control de sensores y actuadores con Raspberry Pi: acelerómetro, servo y streaming de datos
- Construye un sistema aeropónico automatizado con Raspberry Pi y sensor de humedad
- Verifica y calibra tu sensor de humedad para mediciones precisas
- Monitorización Precisa de Temperatura y Humedad con SHT15 en Windows 10 IoT Core
- Autómatas Celulares en Tiempo Real con Arduino y Pantalla OLED 128x64
- Cómo Funcionan los Sensores de Distancia y sus Aplicaciones Clave
- Sensores para Arduino: Tipos, Aplicaciones y Proyectos Reales
- Tecnología de Sensores de Huella Dactilar: Principios, Aplicaciones e Integración con Arduino
- Sensores de Vibración: Principios, Tipos y Aplicaciones Industriales