Tomo 11: Radar Visual de Proximidad

¡Bienvenidos al tercer parcial y a los sistemas avanzados! Hoy le daremos a nuestro Arduino un súper poder digno de un murciélago o un submarino: la ecolocalización. Usaremos un sensor ultrasónico no solo para medir distancias, sino para visualizar esa información de múltiples maneras: en una pantalla, con un indicador físico (servo) y en una barra de LEDs. ¡Construiremos un radar interactivo completo!

🧠 Protagonista de Hoy: El Sensor Ultrasónico HC-SR04

Este sensor funciona como un sonar: emite un pulso de sonido a una frecuencia tan alta que no podemos oírla (ultrasonido) desde su pin Trig (Disparador). Luego, escucha el "eco" de ese sonido rebotando en un objeto con su pin Echo (Eco). El tiempo que tarda el eco en regresar nos permite calcular la distancia con gran precisión usando la velocidad del sonido.

pinout ultrasonico

🧠 El Código: El Cerebro del Radar Visual

Este código integra la lectura del sensor, el control de la pantalla, el movimiento del servo y la lógica para la barra de LEDs, todo en un solo sketch.

Código Arduino

/*
 * Misión 11 (Final): Radar Visual de Proximidad
 * Descripción: Mide distancia, la muestra en LCD, mueve un servo y
 * controla una barra de 8 LEDs de forma proporcional.
 * Por: Profe Campos
 * CECyTEM 05 Guacamayas
*/

// --- LIBRERÍAS ---
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
#include <Servo.h>

// --- PINES ---
const int pinTrig = 3;
const int pinEcho = 2;
const int pinServo = 5;
// Array para los pines de los 8 LEDs
const int pinesLeds[] = {6, 7, 8, 9, 10, 11, 12, 13};
const int numLeds = 8;

// --- OBJETOS ---
LiquidCrystal_I2C lcd(0x27, 16, 2);
Servo miServo;

// --- VARIABLES ---
long duracion;
int distancia;
int angulo;

void setup() {
  Serial.begin(9600);
  
  pinMode(pinTrig, OUTPUT);
  pinMode(pinEcho, INPUT);
  
  // Configurar todos los pines de los LEDs como salida
  for (int i = 0; i < numLeds; i++) {
    pinMode(pinesLeds[i], OUTPUT);
  }
  
  miServo.attach(pinServo);
  
  lcd.init();
  lcd.backlight();
  lcd.print("Radar Activado");
  delay(1500);
  lcd.clear();
}

void loop() {
  // --- PASO 1: MEDIR LA DISTANCIA ---
  digitalWrite(pinTrig, LOW);
  delayMicroseconds(2);
  digitalWrite(pinTrig, HIGH);
  delayMicroseconds(10);
  digitalWrite(pinTrig, LOW);
  duracion = pulseIn(pinEcho, HIGH);
  distancia = duracion * 0.0343 / 2;

  // --- PASO 2: MOSTRAR EN MONITOR Y LCD ---
  Serial.print("Distancia: ");
  Serial.print(distancia);
  Serial.println(" cm");
  
  lcd.clear();
  lcd.setCursor(0, 0);
  lcd.print("Distancia:");
  lcd.setCursor(0, 1);
  lcd.print(distancia);
  lcd.print(" cm");

  // --- PASO 3: MOVER EL SERVO ---
  angulo = map(distancia, 4, 50, 0, 180);
  miServo.write(angulo);

  // --- PASO 4: CONTROLAR LA BARRA DE LEDS ---
  // Mapeamos la distancia (de 50 a 4 cm) al número de LEDs (0 a 8)
  // Nota: Los valores de distancia están invertidos para que a menor distancia, más LEDs se enciendan.
  int ledsEncendidos = map(distancia, 50, 4, 0, numLeds);
  
  // Nos aseguramos que el valor esté siempre entre 0 y 8
  ledsEncendidos = constrain(ledsEncendidos, 0, numLeds);

  // Recorremos todos los LEDs y los encendemos o apagamos según corresponda
  for (int i = 0; i < numLeds; i++) {
    if (i < ledsEncendidos) {
      digitalWrite(pinesLeds[i], HIGH); // Encendemos si su índice es menor
    } else {
      digitalWrite(pinesLeds[i], LOW); // Apagamos si su índice es mayor
    }
  }

  delay(100);
}
        

🔌 Manos a la Obra: El Circuito

Este es nuestro circuito más poblado hasta ahora. Integraremos el sensor ultrasónico, el servo, la pantalla LCD y los 8 LEDs. La clave es la organización de los cables.

Diagrama del Circuito 11

Diagrama de conexión del sensor ultrasónico, servo, LCD y 8 LEDs

💡 Conceptos Clave de la Misión

🚀 ¡Inténtalo Tú Mismo! (Retos)