Skip to Content

Tutorial del sensor ultrasónico impermeable JSN-SR04T con Arduino

Tutorial del sensor ultrasónico impermeable JSN-SR04T con Arduino

El JSN-SR04T es un sensor ultrasónico de distancia impermeable y fácil de usar, con un rango de 25 a 450 cm. Si planeas construir un sistema para medir el nivel del agua o necesitas tomar otras mediciones de distancia en exteriores, ¡este es el sensor que necesitas!

En este artículo, he incluido un diagrama de conexiones y códigos de ejemplo para que puedas empezar a experimentar con tu sensor. Después de cada ejemplo, desgloso y explico cómo funciona el código, para que no tengas problemas en modificarlo según tus necesidades.

Primero, veremos un ejemplo que no utiliza una librería de Arduino. Luego, cubriré la fácil de usar NewPing librería que tiene algunas funciones integradas muy útiles. En el último ejemplo te mostraré cómo mostrar las distancias medidas en un display de 4 dígitos.

Pero empecemos con las piezas que necesitarás para construir este proyecto.

Piezas necesarias

A continuación encontrarás las piezas necesarias para este proyecto. Al buscar el JSN-SR04T, puede que te encuentres con la versión actualizada, el JSN-SR04T-2.0. Esta versión más nueva funciona exactamente igual pero está diseñada para 3-5 V en lugar de 5 V. Sin embargo, algunos usuarios han tenido problemas al usar los sensores a un voltaje más bajo. Usar un pulso de disparo más largo, de al menos 20 µs en lugar de 10 µs, parece ayudar si tienes lecturas erróneas.

Arduino Uno

USB Data Sync cable Arduino

Cable USB para Arduino UNO

Dupont wire set

Juego de cables Dupont

Half_breadboard56a

Protoboard

JSN-SR04T Ultrasonic Sensor Module

Sensor JSN-SR04T

 Display de 4 dígitos TM1637

Makerguides is a participant in affiliate advertising programs designed to provide a means for sites to earn advertising fees by linking to Amazon, AliExpress, Elecrow, and other sites. As an Affiliate we may earn from qualifying purchases.

Acerca del sensor JSN-SR04T

El sensor viene con un cable de 2.5 m que se conecta a una placa breakout que controla el sensor y procesa toda la señal. Ten en cuenta que solo el sensor y el cable son impermeables. ¡No sumerjas la placa breakout en agua!

Un sensor ultrasónico de distancia funciona enviando ondas ultrasónicas. Estas ondas se reflejan en un objeto y el sensor ultrasónico las detecta. Midiendo el tiempo que pasa entre el envío y la recepción de las ondas sonoras, puedes calcular la distancia entre el sensor y el objeto.

Sound impulse and its reflection to measure distance
Impulso sonoro y su reflexión para medir distancia

Pinout del JSN-SR04T

La placa breakout del JSN-SR04T tiene cuatro pines. 5Vy GNDpara la alimentación, Trigpara disparar el envío del impulso ultrasónico y la salida Echo, que devuelve un pulso cuya duración es proporcional a la distancia medida. La imagen a continuación muestra el pinout.

Pinout for JSN-SR04T board
Pinout para la placa JSN-SR04T

Funcionamiento del JSN-SR04T

Para operar el sensor, debes poner Trigen HIGH durante al menos 10 microsegundos. Esto hará que la placa envíe ocho impulsos ultrasónicos (ráfaga sonora).

Timing diagram of JSN-SR04T from datasheet
Diagrama de tiempos del JSN-SR04T desde el Datasheet

Si se recibe un sonido reflejado (eco), la salida Echopasará a nivel HIGH y la distancia se puede calcular como

distancia = tiempo de nivel alto * 340 m/s / 2

donde 340 m/s es la velocidad del sonido. Usaremos esta fórmula más adelante en nuestro código, pero como vamos a medir la distancia en cm, la constante será 0.034 cm/µs.

Ten en cuenta que los sensores ultrasónicos no funcionan como láseres con un haz enfocado. En cambio, su directividad tiene forma de burbuja y también requiere una superficie suficientemente grande y dura/reflectante para obtener mediciones precisas.

Directividad del JSN-SR04T (source)

En el caso del JSN-SR04T, el objetivo debe tener al menos 0.5 metros cuadrados y debes apuntar el sensor perpendicularmente al objetivo. La tabla a continuación muestra las especificaciones del sensor, pero ten en cuenta que el rango de medición y la resolución asumen condiciones ideales.

Especificaciones del JSN-SR04T

Voltaje de operación5 V
Corriente de operación30 mA
Corriente en reposo5 mA
Frecuencia40 kHz
Rango de medición25-450 cm
Resolución2 mm
Ángulo de medición45-75 grados
Dimensiones del sensor23.5 x 20 mm, cable de 2.5 m de largo
Dimensiones de la PCB41 x 28.5 mm
Agujero para montaje18 mm

Para más información puedes consultar la hoja de datos aquí.

JSN-SR04T vs HC-SR04

¿Cuáles son las diferencias entre este sensor y el HC-SR04? La principal diferencia, además de ser impermeable, es que este sensor usa un solo transductor ultrasónico en lugar de dos. Este transductor funciona como transmisor y receptor de las ondas ultrasónicas.

Waterproof JSN-SR04T ultrasonic distance sensor with Arduino Tutorial
El transductor del JSN-SR04T

Para más información sobre cómo funcionan los sensores ultrasónicos, puedes consultar mi artículo sobre el HC-SR04. En ese artículo se explican con más detalle los principios de funcionamiento de un sensor ultrasónico de distancia.

Conexiones – JSN-SR04T a Arduino

El diagrama de conexiones/esquemático a continuación muestra cómo conectar el sensor JSN-SR04T al Arduino. La placa breakout del JSN-SR04T tiene el mismo pinout que el HC-SR04, por lo que puede usarse como reemplazo directo. El cable del sensor se conecta al conector en la parte trasera de la placa breakout.

Wiring diagram/schematic for the JSN-SR04T ultrasonic distance sensor with Arduino
Diagrama/esquemático de conexiones para el sensor ultrasónico JSN-SR04T con Arduino

Los ejemplos de código a continuación usan los pines digitales 12 y 11 para el trigger y echo, pero por supuesto puedes cambiarlo a cualquier pin digital que prefieras.

5 V5 V
TrigPin 12
EchoPin 11
GNDGND

Código de ejemplo para el sensor JSN-SR04T con Arduino

Ahora que has conectado el sensor, es hora de conectar el Arduino al ordenador y subir algo de código. El sensor puede usarse sin una librería de Arduino. Más adelante te mostraré un ejemplo con la librería NewPing, que hace el código mucho más corto.

Sube el siguiente código de ejemplo a tu Arduino usando el IDE de Arduino. Este código también funciona para el JSN-SR04T-2.0. En las siguientes secciones, explicaré cómo funciona el código en detalle.

const int trigPin = 12;
const int echoPin = 11;

void setup() {
  Serial.begin(115200);
  pinMode(trigPin, OUTPUT);
  pinMode(echoPin, INPUT);
}

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

  digitalWrite(trigPin, HIGH);
  delayMicroseconds(10);
  digitalWrite(trigPin, LOW);

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

  Serial.print("Distance:");
  Serial.println(distance);
  delay(100);
}

Si ejecutas el código y apuntas el sensor a objetos a diferentes distancias, deberías ver distancias variables (en cm) en el Monitor Serial. ¡No olvides configurar la velocidad en baudios a 115200 para este ejemplo!

Serial Monitor showing measured distances by JSN-SR04T in cm.
Monitor Serial mostrando distancias medidas en cm

También puedes abrir el plotter serial y deberías ver una línea ondulada si mueves el sensor para medir distintas distancias.

Serial Plotter showing measured distances in cm.
Plotter Serial mostrando distancias medidas en cm

Cómo funciona el código

Primero, se definen el pin de trigger y el pin de echo. Yo los llamo trigPin y echoPin. El pin trigger está conectado al pin digital 12 y el pin echo al pin digital 11 del Arduino. La instrucción const se usa para dar un nombre a un valor constante.

const int trigPin = 12;
const int echoPin = 11;

En el setup(), comienzas inicializando la comunicación serial a una velocidad de 115200 baudios. Para mostrar la distancia medida en el monitor serial, presiona Ctrl+Shift+M o ve a Tools > Serial Monitor. Asegúrate de que la velocidad en baudios también esté configurada a 115200 en el monitor serial.

Luego, configuramos el trigPin como salida y el echoPin como entrada.

void setup() {
  Serial.begin(115200);
  pinMode(trigPin, OUTPUT);
  pinMode(echoPin, INPUT);
}

En el loop(), activas el sensor poniendo el trigPin en HIGH durante 20 µs. Ten en cuenta que para obtener una señal limpia, primero limpias el trigPin poniéndolo en LOW durante 5 microsegundos.

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

  digitalWrite(trigPin, HIGH);
  delayMicroseconds(10);
  digitalWrite(trigPin, LOW);

Luego, necesitas leer el durationdel pulso enviado por el echoPin. Uso la función pulseIn() para esto. Esta función espera a que el pin pase de LOW a HIGH, comienza a medir el tiempo, luego espera a que el pin vuelva a LOW y detiene la medición.

Después, puedes calcular la distancia usando la fórmula mencionada en la introducción de este tutorial. Ten en cuenta que usamos una constante de 0.034 para la velocidad del sonido (en lugar de 340), ya que queremos la distancia en centímetros y no en metros.

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

Finalmente, imprime la distancia calculada en el monitor serial y también muéstrala en el plotter. El retardo de 100 milisegundos al final ralentiza las mediciones a una velocidad razonable.

  Serial.print("Distance:");
  Serial.println(distance);
  delay(100);

Código de ejemplo JSN-SR04T con Arduino y librería NewPing

La NewPing librería escrita por Tim Eckel puede usarse con muchos sensores ultrasónicos de distancia. La última versión de esta librería puede descargarse aquí en bitbucket.org. Notarás que el código a continuación, que usa la librería NewPing, es mucho más corto que el código que usamos antes.

Puedes instalar la librería yendo a Sketch > Include Library > Add .ZIP Library en el IDE de Arduino.

La librería incluye algunos ejemplos que puedes usar, pero tendrás que modificarlos para que coincidan con tu configuración de hardware. He incluido un código de ejemplo modificado a continuación que puede usarse con la misma conexión que antes.

#include "newping.h"

const int trigPin = 12;
const int echoPin = 11;
const int maxDist = 450;

NewPing sonar(trigPin, echoPin, maxDist);

void setup() {
  Serial.begin(115200);
}

void loop() {
  // Wait 50ms between pings (about 20 pings/sec)
  delay(50); 

  long distance = sonar.ping_cm();

  Serial.print("Distance:");
  Serial.println(distance);
  delay(100);
}

Ejemplo: JSN-SR04T con Arduino y display de 4 dígitos

Como último ejemplo, quiero mostrarte cómo mostrar las distancias medidas en un display de 7 segmentos y 4 dígitos. El display, listado en las piezas necesarias, tiene un TM1637 driver, lo que facilita mucho su conexión y control. Empecemos con el cableado de este display además del sensor.

Conexiones – JSN-SR04T a Arduino y display de 4 dígitos

Conectaremos el sensor JSN-SR04T igual que antes, pero usaremos la protoboard para distribuir la alimentación al sensor y al display.

Wiring of JSN-SR04T with Arduino and 4-Digit Display
Cableado del JSN-SR04T con Arduino y display de 4 dígitos

El display recibe su alimentación (VSS, GND) desde la protoboard y tiene dos pines extra que debes conectar al Arduino. Conecta el pin CLK (Clock) al pin 3 del Arduino (cable blanco) y el pin DIO (Digital IO) al pin 4 del Arduino (cable gris). Y con eso completas el cableado.

Ahora, veamos el código.

Código – JSN-SR04T con Arduino y display de 4 dígitos

Mantenemos el código relacionado con el sensor JSN-SR04T tal cual. Como antes, usamos la librería NewPing, inicializada con los mismos pines, y leemos distancias mediante sonar.ping_cm().

#include "NewPing.h"
#include "TM1637Display.h"

// Display
const int clkPin = 3;
const int dioPin = 4;

// Sonar
const int trigPin = 12;
const int echoPin = 11;
const int maxDist = 450;

NewPing sonar(trigPin, echoPin, maxDist);
TM1637Display display = TM1637Display(clkPin, dioPin);

void setup() {
  Serial.begin(115200);
  display.setBrightness(5);
}

void loop() {
  long distance = sonar.ping_cm();
  Serial.print("Distance:");
  Serial.println(distance);
  display.showNumberDec(distance);
  delay(200);
}

Lo nuevo es que creamos el objeto display TM1637Display. Se inicializa con las constantes clkPin y dioPin, que son los pines a los que conectamos el display.

En la función setup(), configuramos el brillo del display, siendo 0 el brillo más bajo y 7 el más alto. Este comando también enciende el display.

Finalmente, en la función loop(), simplemente mostramos la distancia medida llamando a display.showNumberDec(distance). Y eso es todo. Ahora tienes un medidor ultrasónico de distancia que muestra las distancias en centímetros en un display de 4 dígitos.

JSN-SR04T with Arduino and 4-Digit Display
JSN-SR04T con Arduino y display de 4 dígitos

Conclusión

En este artículo, te he mostrado cómo funciona el sensor ultrasónico JSN-SR04T y cómo puedes usarlo con Arduino. Espero que te haya resultado útil e informativo.

Si quieres aprender más sobre otros sensores de distancia, los artículos a continuación pueden ser útiles:

Finalmente, si tienes alguna pregunta, sugerencia o crees que falta algo en este tutorial, por favor deja un comentario abajo.