Imaginate 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 ultrasonico. En este tutorial vas a construir un detector de proximidad que enciende una alerta cuando un objeto entra dentro de una distancia que tu 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 ultrasonico resistente al agua. A diferencia del clasico 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 comun se arruinaria.

Al terminar vas a entender como funciona la medicion por ultrasonido, como conectar el sensor al Arduino, y como ajustar la distancia de disparo con una sola linea de codigo.

Como funciona la medicion por ultrasonido

El principio es el mismo que usan los murcielagos 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 envio y el regreso del pulso, el sistema calcula a que distancia esta el objeto.

En el modulo, el pin Trig (de trigger, disparo) es el que ordena enviar el pulso ultrasonico. El pin Echo se mantiene en bajo hasta que el modulo termina la medicion, y entonces lo pone en alto durante el mismo tiempo que tardo el pulso en ir y volver. Ese ancho de pulso es justamente el dato que el Arduino traduce a centimetros.

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

Sensor ultrasonico JSN SR04T conectado a un Arduino sobre la mesa de trabajo

Materiales que vas a necesitar

Este proyecto es de los baratos y rapidos de armar. El corazon es el sensor JSN SR04T y un Arduino; el resto son componentes basicos de cualquier kit maker.

  • Arduino Uno o Nano (uno cualquiera de los dos sirve)
  • Sensor ultrasonico 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 rele)

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, asi que tenes 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 ahi salen las dos lineas de senal:

  • 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 traves de la resistencia de 1k ohm hacia GND

En este montaje se usan los pines digitales 9, 10 y 12, pero no es obligatorio: podes mover esas senales a casi cualquier pin digital, siempre que actualices los numeros en el codigo. El siguiente diagrama muestra la conexion completa con el Arduino Uno R3, el LED indicador y el sensor JSN SR04T.

Diagrama de conexion del sensor JSN SR04T y el LED al Arduino Uno R3

El codigo para Arduino

Este sketch funciona tal cual en un Arduino Uno o en un Nano. La logica es simple: dispara un pulso ultrasonico, mide el tiempo de eco, lo convierte a centimetros y, si el objeto esta dentro de la distancia limite, 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 esta en la linea distance = duration * 0.034 / 2;. El 0.034 es la velocidad del sonido expresada en centimetros por microsegundo, y se divide entre 2 porque el pulso recorre el camino de ida y de vuelta, asi que el tiempo total corresponde al doble de la distancia real al objeto.

Para cambiar la distancia de disparo solo tenes que editar el numero en if (senseDistance <= 50). Si en vez de 50cm queres que reaccione a 100cm, cambia el 50 por 100. Y la duracion de la alerta se ajusta en delay(5000), que esta en milisegundos: 5000 son 5 segundos.

Prueba el detector

Una vez cargado el codigo, acerca lentamente tu mano o un objeto hacia la sonda. Apenas cruces el umbral de 50cm, el LED se va a encender y quedara 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 deteccion

Si el LED no responde, revisa que el Trig este realmente en D9 y el Echo en D10 (es facil invertirlos), y que la placa de control tenga sus 5V y GND bien conectados. Si las lecturas saltan de forma erratica, recorda que por debajo de 20cm el sensor pierde precision: aleja un poco el objeto y vas a ver mediciones estables.

Variantes y mejoras

Este detector es una excelente base. Con cambios chicos podes llevarlo bastante mas lejos:

  • Activar cargas reales con un rele: cambia el LED del pin D12 por un modulo rele y vas a poder encender una ampolleta, una sirena o una electrovalvula cuando algo se acerque. Aca es donde tiene sentido la fuente de 9 a 12VDC, para alimentar tanto el rele como la carga.
  • Mostrar la distancia en una pantalla: agrega una pantalla OLED SSD1306 por I2C y reemplaza la simple alerta por un numero en centimetros en tiempo real. Util para calibrar a ojo la distancia de disparo.
  • Alerta sonora: suma un buzzer activo en paralelo al LED para que ademas 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, podes montarla sobre un estanque mirando hacia abajo y medir cuanta agua queda segun la distancia a la superficie.

Personalizacion para Chile

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

  • Sensor Ultrasonico 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 funcion que el Arduino Uno o Nano del original a un precio mas conveniente. Si preferis el oficial, tambien esta 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 basicos que vienen en la mayoria de los kits de inicio, o los consigues sueltos por unos pocos pesos. Para la version con rele, suma una fuente de 12V 1A con plug DC.

Recursos

  • Tutorial original (ingles): Ultrasonic Proximity Sensor Arduino por T.K. Hareendran en Codrey Electronics.
  • Documentacion adicional: datasheet del modulo JSN SR04T (busca "JSN SR04T datasheet" para los detalles de Trig, Echo y rangos de medicion).

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