En muchos proyectos con Arduino, ya sea para aprender o simplemente por diversión, solemos usar materiales como acrílico, plástico o incluso piezas recicladas. Sin embargo, una alternativa cada vez más popular y creativa es usar LEGO.
Aunque LEGO no es naturalmente compatible con componentes electrónicos, hoy en día existen muchos modelos 3D en sitios como Instructables o Thingiverse que permiten adaptar sensores y piezas electrónicas a los bloques. Por ejemplo, te comparto aquí un archivo STL que facilita el montaje de un sensor ultrasónico sobre una estructura LEGO, lo que hace mucho más sencillo y estético armar nuestros proyectos.
Este proyecto en particular está pensado para quienes alguna vez han querido automatizar una barrera o pluma de acceso con electrónica. Utilizando Arduino, un sensor ultrasónico, un servo, un buzzer y LEDs, diseñamos una barrera automática que se activa al detectar un objeto a una distancia determinada. Además, cuenta con un contador de activaciones y una alerta sonora con buzzer. Todo esto montado sobre estructura de LEGO, con el sensor ultrasónico bien fijado gracias a una pieza impresa en 3D, y el resto del circuito discretamente colocado detrás.
Te comparto todo el proyecto, junto con fotos del armado, para que puedas inspirarte y comenzar a construir tu propia versión.
Materiales
- Arduino Uno (o compatible)
- Sensor ultrasónico HC-SR04
- Servo SG90 o MG995
- Display LCD 16×2 con interfaz I2C
- Buzzer pasivo o activo
- Cables de conexión (jumper wires)
- Protoboard o placa de pruebas
Circuito

3D
Código
#include <Wire.h>
#include <Servo.h>
#include <LiquidCrystal_I2C.h>
#define TRIG_PIN 7
#define ECHO_PIN 6
#define SERVO_PIN 9
#define BUZZER_PIN 8 // Pin donde conectamos el buzzer
Servo miServo;
LiquidCrystal_I2C lcd(0x27, 16, 2); // Dirección I2C 0x27 (puede variar)
int contadorAperturas = 0;
bool barreraAbierta = false;
void setup() {
Serial.begin(9600);
pinMode(TRIG_PIN, OUTPUT);
pinMode(ECHO_PIN, INPUT);
miServo.attach(SERVO_PIN);
miServo.write(0); // Barrera cerrada por defecto
pinMode(BUZZER_PIN, OUTPUT); // Configurar buzzer como salida
lcd.init();
lcd.backlight();
lcd.setCursor(0, 0);
lcd.print("Distancia:");
lcd.setCursor(0, 1);
lcd.print("Aperturas: 0");
}
void loop() {
long duracion;
int distancia;
// Medición del sensor ultrasónico
digitalWrite(TRIG_PIN, LOW);
delayMicroseconds(2);
digitalWrite(TRIG_PIN, HIGH);
delayMicroseconds(10);
digitalWrite(TRIG_PIN, LOW);
duracion = pulseIn(ECHO_PIN, HIGH);
distancia = duracion * 0.034 / 2;
// Mostrar distancia en LCD
lcd.setCursor(10, 0);
lcd.print(" "); // Limpiar valores anteriores
lcd.setCursor(10, 0);
lcd.print(distancia);
lcd.print("cm");
Serial.print("Distancia: ");
Serial.print(distancia);
Serial.println(" cm");
if (distancia > 0 && distancia <= 20) {
if (!barreraAbierta) { // Solo cuenta si la barrera estaba cerrada
contadorAperturas++;
// Mostrar en LCD
lcd.setCursor(11, 1);
lcd.print(" "); // Limpiar valores anteriores
lcd.setCursor(11, 1);
lcd.print(contadorAperturas);
// Sonido del buzzer cuando se abre la barrera
tone(BUZZER_PIN, 1000); // Frecuencia de 1000 Hz
delay(500); // Sonido de 0.5s
noTone(BUZZER_PIN); // Apagar buzzer
barreraAbierta = true;
}
miServo.write(90);
delay(3000);
} else {
miServo.write(0);
barreraAbierta = false;
}
delay(500);
}
Mi versión






Aplicaciones
- 🚗 Control de accesos
- 🚶♂️ Barrera de entrada para personas
- 🎮 Automatización de juegos con LEGO
- 🎓 Proyectos educativos de electrónica y programación
Versiones y mejoras posibles
- Agregar comunicación Bluetooth o WiFi para monitorear aperturas en tiempo real.
- Usar una batería recargable para hacerlo portátil.
- Integrar reconocimiento NFC o RFID para permitir acceso solo a tarjetas autorizadas.