Imagínate una barrera invisible que avisa apenas algo se le acerca: una puerta de garaje que detecta tu auto, un dispensador que reacciona cuando pones la mano, o una alarma que se dispara si alguien se aproxima demasiado a una zona. Todo eso se arma con un Arduino y un solo sensor ultrasónico. En este tutorial vas a construir un detector de proximidad que enciende una alerta cuando un objeto entra dentro de una distancia que tú defines, sin importar el color, la forma o el material de ese objeto.

La gracia de este proyecto es que usa el JSN SR04T, un sensor ultrasónico resistente al agua. A diferencia del clásico HC SR04 (esos dos "ojitos" plateados que se ven en todos lados), el JSN SR04T trae la sonda separada de la placa por un cable de 2.5 metros, y esa sonda es impermeable. Eso lo hace ideal para exteriores, estanques, riego o cualquier lugar con humedad donde un sensor común se arruinaría.

Al terminar vas a entender cómo funciona la medición por ultrasonido, cómo conectar el sensor al Arduino, y cómo ajustar la distancia de disparo con una sola línea de código.

Cómo funciona la medición por ultrasonido

El principio es el mismo que usan los murciélagos para orientarse en la oscuridad. El sensor emite un pulso de sonido de alta frecuencia, inaudible para nosotros, y queda esperando el eco. Cuando ese sonido choca contra un objeto cercano, rebota y vuelve a la sonda. Midiendo el tiempo exacto entre el envío y el regreso del pulso, el sistema calcula a qué distancia está el objeto.

En el módulo, el pin Trig (de trigger, disparo) es el que ordena enviar el pulso ultrasónico. El pin Echo se mantiene en bajo hasta que el módulo termina la medición, y entonces lo pone en alto durante el mismo tiempo que tardó el pulso en ir y volver. Ese ancho de pulso es justamente el dato que el Arduino traduce a centímetros.

El JSN SR04T mide en un rango aproximado de 20cm a 600cm. Existe una versión actualizada, el JSN SR04T-2.0, que funciona igual pero acepta de 3 a 5V en vez de solo 5V. Si te toca esa versión, ten presente que su distancia mínima medible es de 20cm.

Sensor ultrasónico JSN SR04T conectado a un Arduino sobre la mesa de trabajo

Materiales que vas a necesitar

Este proyecto es de los baratos y rápidos de armar. El corazón es el sensor JSN SR04T y un Arduino; el resto son componentes básicos de cualquier kit maker.

  • Arduino Uno o Nano (uno cualquiera de los dos sirve)
  • Sensor ultrasónico JSN SR04T con su sonda y placa de control
  • LED de 5mm como indicador de alerta
  • Resistencia de 1k ohm en serie con el LED
  • Protoboard y cables jumper para armar sin soldar
  • Fuente de 9 a 12VDC (opcional, solo si vas a usar el sistema fuera del PC o sumarle un relé)

Ojo con un detalle importante: solo la sonda y el cable del JSN SR04T son impermeables. La placa de control que viene en el otro extremo NO lo es, así que tienes que mantenerla dentro de una caja seca.

Conexiones del circuito

El cableado es directo. La placa de control del sensor se alimenta con los 5V y GND del propio Arduino, no necesita fuente aparte para funcionar. De ahí salen las dos líneas de señal:

  • Trig del sensor al pin D9 del Arduino
  • Echo del sensor al pin D10 del Arduino
  • Salida de alerta en el pin D12, donde conectas el LED a través de la resistencia de 1k ohm hacia GND

En este montaje se usan los pines digitales 9, 10 y 12, pero no es obligatorio: puedes mover esas señales a casi cualquier pin digital, siempre que actualices los números en el código. El siguiente diagrama muestra la conexión completa con el Arduino Uno R3, el LED indicador y el sensor JSN SR04T.

Diagrama de conexión del sensor JSN SR04T y el LED al Arduino Uno R3

El código para Arduino

Este sketch funciona tal cual en un Arduino Uno o en un Nano. La lógica es simple: dispara un pulso ultrasónico, mide el tiempo de eco, lo convierte a centímetros y, si el objeto está dentro de la distancia límite, enciende la salida de alerta durante 5 segundos.

C++
const int trigPin = 9;     //US Sensor TRIG
const int echoPin = 10;    //US Sensor ECHO
const int driveSignal = 12; //Alert OUT

long duration;
int distance;
int senseDistance;

void setup() {
  pinMode(trigPin, OUTPUT);
  pinMode(echoPin, INPUT);
  pinMode(driveSignal, OUTPUT);
}

void loop() {
  digitalWrite(trigPin, LOW);
  delayMicroseconds(5);
  digitalWrite(trigPin, HIGH);
  delayMicroseconds(10);
  digitalWrite(trigPin, LOW);

  duration = pulseIn(echoPin, HIGH);
  distance = duration * 0.034 / 2;
  senseDistance = distance;

  if (senseDistance <= 50) { //Sense Distance
    digitalWrite(driveSignal, HIGH);
    delay(5000); //Alert Duration
    digitalWrite(driveSignal, LOW);
  }
  else {
    digitalWrite(driveSignal, LOW);
  }
}

La parte clave está en la línea distance = duration * 0.034 / 2;. El 0.034 es la velocidad del sonido expresada en centímetros por microsegundo, y se divide entre 2 porque el pulso recorre el camino de ida y de vuelta, así que el tiempo total corresponde al doble de la distancia real al objeto.

Para cambiar la distancia de disparo solo tienes que editar el número en if (senseDistance <= 50). Si en vez de 50cm quieres que reaccione a 100cm, cambia el 50 por 100. Y la duración de la alerta se ajusta en delay(5000), que está en milisegundos: 5000 son 5 segundos.

Prueba el detector

Una vez cargado el código, acerca lentamente tu mano o un objeto hacia la sonda. Apenas cruces el umbral de 50cm, el LED se va a encender y quedará prendido durante 5 segundos antes de volver a evaluar. En la foto siguiente se ve el montaje funcionando con el LED encendido al detectar un objeto cercano.

Montaje del detector de proximidad con el LED encendido indicando detección

Si el LED no responde, revisa que el Trig esté realmente en D9 y el Echo en D10 (es fácil invertirlos), y que la placa de control tenga sus 5V y GND bien conectados. Si las lecturas saltan de forma errática, recuerda que por debajo de 20cm el sensor pierde precisión: aleja un poco el objeto y vas a ver mediciones estables.

Variantes y mejoras

Este detector es una excelente base. Con cambios chicos puedes llevarlo bastante más lejos:

  • Activar cargas reales con un relé: cambia el LED del pin D12 por un módulo relé y vas a poder encender una ampolleta, una sirena o una electroválvula cuando algo se acerque. Acá es donde tiene sentido la fuente de 9 a 12VDC, para alimentar tanto el relé como la carga.
  • Mostrar la distancia en una pantalla: agrega una pantalla OLED SSD1306 por I2C y reemplaza la simple alerta por un número en centímetros en tiempo real. Útil para calibrar a ojo la distancia de disparo.
  • Alerta sonora: suma un buzzer activo en paralelo al LED para que además de la luz tengas un pitido. Ideal para una alarma de estacionamiento o un sensor de nivel de estanque.
  • Sensor de nivel de agua: como la sonda es impermeable, puedes montarla sobre un estanque mirando hacia abajo y medir cuánta agua queda según la distancia a la superficie.

Personalización para Chile

En Chile consigues todo lo necesario para este proyecto en MechatronicStore, con stock local y despacho rápido:

  • Sensor Ultrasónico Resistente a Salpicaduras JSN SR04T (SKU X3-5) por $10.490. Es exactamente el sensor del tutorial, con la sonda impermeable y la placa de control.
  • Arduino Uno R3 compatible (SKU N-301) por $7.890. Cumple la misma función que el Arduino Uno o Nano del original a un precio más conveniente. Si prefieres el oficial, también está el Arduino Uno R3 (SKU X4-8) por $9.990.
  • Protoboard 830 puntos GL-12 (SKU C-302) para armar el circuito sin soldar.

El LED de 5mm y la resistencia de 1k ohm son componentes básicos que vienen en la mayoría de los kits de inicio, o los consigues sueltos por unos pocos pesos. Para la versión con relé, suma una fuente de 12V 1A con plug DC.

Recursos

  • Tutorial original (inglés): Ultrasonic Proximity Sensor Arduino por T.K. Hareendran en Codrey Electronics.
  • Documentación adicional: datasheet del módulo JSN SR04T (busca "JSN SR04T datasheet" para los detalles de Trig, Echo y rangos de medición).

Versión chilena con componentes en stock local en MechatronicStore. Tutorial inspirado en el trabajo original de Codrey Electronics.