Skip to Content

Tutorial do Sensor de Distância Ultrassónico Impermeável JSN-SR04T com Arduino

Tutorial do Sensor de Distância Ultrassónico Impermeável JSN-SR04T com Arduino

O JSN-SR04T é um sensor de distância ultrassónico à prova de água, fácil de usar, com um alcance de 25 a 450 cm. Se está a planear construir um sistema de medição de nível de água ou se precisa de fazer outras medições de distância ao ar livre, então este é o sensor que precisa!

Neste artigo, incluí um diagrama de ligação e códigos de exemplo para que possa começar a experimentar com o seu sensor. Após cada exemplo, explico detalhadamente como o código funciona, para que não tenha problemas em modificá-lo conforme as suas necessidades.

Primeiro, vamos ver um exemplo que não usa uma biblioteca Arduino. De seguida, vou abordar a fácil de usar NewPing biblioteca que tem algumas funcionalidades integradas interessantes. No último exemplo, vou mostrar como exibir as distâncias medidas num Display de 4 Dígitos.

Mas vamos começar pelas peças que vai precisar para construir este projeto.

Peças necessárias

Abaixo encontra as peças necessárias para este projeto. Ao procurar o JSN-SR04T, pode encontrar a versão atualizada, o JSN-SR04T-2.0. Esta versão mais recente funciona exatamente da mesma forma, mas é classificada para 3-5 V em vez de 5 V. No entanto, alguns utilizadores encontraram problemas ao usar os sensores a uma voltagem mais baixa. Usar um pulso de trigger mais longo, de pelo menos 20 µs em vez de 10 µs, parece ajudar se estiver a ter leituras incorretas.

Arduino Uno

USB Data Sync cable Arduino

Cabo USB para Arduino UNO

Dupont wire set

Conjunto de fios Dupont

Half_breadboard56a

Breadboard

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.

Sobre o Sensor JSN-SR04T

O sensor vem com um cabo de 2,5 m que se liga a uma placa breakout que controla o sensor e processa todo o sinal. Note que apenas o sensor e o cabo são à prova de água. Não mergulhe a placa breakout na água!

Um sensor de distância ultrassónico funciona emitindo ondas ultrassónicas. Estas ondas são refletidas por um objeto e o sensor ultrassónico deteta-as. Medindo o tempo entre o envio e a receção das ondas sonoras, pode calcular a distância entre o sensor e o objeto.

Sound impulse and its reflection to measure distance
Impulso sonoro e o seu eco para medir distância

Pinout do JSN-SR04T

A placa breakout do JSN-SR04T tem quatro pinos.5V e GNDpara a alimentação, Trigpara disparar o envio do impulso ultrassónico e a saída Echo, que retorna um pulso proporcional ao comprimento da distância medida. A imagem abaixo mostra o pinout.

Pinout for JSN-SR04T board
Pinout da placa JSN-SR04T

Função do JSN-SR04T

Para operar o sensor, deve definir Trig para HIGH durante pelo menos 10 microssegundos. Isto fará com que a placa envie oito impulsos ultrassónicos (rajada sonora).

Timing diagram of JSN-SR04T from datasheet
Diagrama de temporização do JSN-SR04T do Datasheet

Se um som refletido (eco) for recebido, a saída Echoficará em nível HIGH e a distância pode ser calculada como

distância = tempo em nível alto * 340 m/s / 2

onde 340 m/s é a velocidade do som. Usaremos esta fórmula mais tarde no código, mas como vamos medir a distância em cm, a constante será 0,034 cm/µs.

Note que sensores ultrassónicos não funcionam como lasers com um feixe focado. Em vez disso, a sua diretividade tem a forma de uma bolha e requer uma superfície suficientemente grande e dura/reflectora para medições precisas.

Diretividade do JSN-SR04T (source)

No caso do JSN-SR04T, o alvo deve ter pelo menos 0,5 metros quadrados e deve apontar o sensor perpendicularmente ao alvo. A tabela abaixo mostra as especificações do sensor, mas tenha em conta que o alcance e a resolução assumem condições ideais.

Especificações do JSN-SR04T

Tensão de operação5 V
Corrente de operação30 mA
Corrente em repouso5 mA
Frequência40 kHz
Alcance de medição25-450 cm
Resolução2 mm
Ângulo de medição45-75 graus
Dimensões do sensor23,5 x 20 mm, cabo de 2,5 m
Dimensões da PCB41 x 28,5 mm
Orifício de montagem18 mm

Para mais informações, pode consultar a folha de dados aqui.

JSN-SR04T vs HC-SR04

Quais as diferenças entre este sensor e o HC-SR04? A principal diferença, além de ser à prova de água, é que este sensor usa apenas um transdutor ultrassónico em vez de dois. Este transdutor serve tanto como transmissor como receptor das ondas ultrassónicas.

Waterproof JSN-SR04T ultrasonic distance sensor with Arduino Tutorial
O Transdutor do JSN-SR04T

Para mais informações sobre como funcionam os sensores ultrassónicos, pode consultar o meu artigo sobre o HC-SR04. Neste artigo, os princípios de funcionamento de um sensor de distância ultrassónico são explicados em maior detalhe.

Ligação – JSN-SR04T ao Arduino

O diagrama de ligação/esquemático abaixo mostra como ligar o sensor JSN-SR04T ao Arduino. A placa breakout do JSN-SR04T tem o mesmo pinout exato que o HC-SR04, por isso pode ser usado como substituto direto. O cabo do sensor pode ser ligado ao conector na parte traseira da placa breakout.

Wiring diagram/schematic for the JSN-SR04T ultrasonic distance sensor with Arduino
Diagrama/esquemático de ligação do sensor de distância ultrassónico JSN-SR04T com Arduino

Os exemplos de código abaixo usam os pinos digitais 12 e 11 para o trigger e echo, mas claro que pode alterar para qualquer pino digital que desejar.

5 V5 V
TrigPino 12
EchoPino 11
GNDGND

Código de exemplo para sensor JSN-SR04T com Arduino

Agora que ligou o sensor, é hora de conectar o Arduino ao computador e carregar algum código. O sensor pode ser usado sem uma biblioteca Arduino. Mais tarde, mostrarei um exemplo com a biblioteca NewPing, que torna o código muito mais curto.

Carregue o seguinte código de exemplo no seu Arduino usando o Arduino IDE. Este código funciona também para o JSN-SR04T-2.0. Nas secções seguintes, explicarei detalhadamente como o código funciona.

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);
}

Se executar o código e apontar o sensor para objetos a diferentes distâncias, deverá ver distâncias variadas (em cm) aparecerem no Monitor Serial. Não se esqueça de definir a taxa de baud para 115200 neste exemplo!

Serial Monitor showing measured distances by JSN-SR04T in cm.
Monitor Serial mostrando distâncias medidas em cm

Também pode abrir o plotter serial e deverá ver uma linha ondulada se mover o sensor para medir várias distâncias.

Serial Plotter showing measured distances in cm.
Plotter Serial mostrando distâncias medidas em cm

Como o código funciona

Primeiro, definem-se os pinos trigger e echo. Eu chamo-lhes trigPin e echoPin. O pino trigger está ligado ao pino digital 12 e o echo ao pino digital 11 do Arduino. A instrução const é usada para dar um nome a um valor constante.

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

No setup(), começa-se por inicializar a comunicação serial a 115200 baud. Para mostrar a distância medida no monitor serial, pressione Ctrl+Shift+M ou vá a Tools > Serial Monitor. Certifique-se de que a taxa de baud está também definida para 115200 no monitor serial.

De seguida, definimos o trigPin como saída e o echoPin como entrada.

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

No loop(), ativa-se o sensor definindo o trigPin para HIGH durante 20 µs. Note que para obter um sinal limpo começa-se por limpar o trigPin, definindo-o para LOW durante 5 microssegundos.

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

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

De seguida, é necessário ler o durationdo pulso enviado pelo echoPin. Eu uso a função pulseIn() para isso. Esta função espera que o pino passe de LOW para HIGH, inicia a contagem, depois espera que o pino volte a LOW e para a contagem.

Depois, pode calcular a distância usando a fórmula mencionada na introdução deste tutorial. Note que usamos a constante 0,034 para a velocidade do som (em vez de 340), pois queremos a distância em centímetros e não em metros.

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

Finalmente, imprime a distância calculada no monitor serial e também a mostra no plotter. O atraso de 100 milissegundos no final desacelera as medições para uma taxa razoável.

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

Código de exemplo JSN-SR04T com Arduino e biblioteca NewPing

NewPing biblioteca escrita por Tim Eckel pode ser usada com muitos sensores de distância ultrassónicos. A versão mais recente desta biblioteca pode ser descarregada aqui em bitbucket.org. Pode notar que o código abaixo, que usa a biblioteca NewPing, é muito mais curto do que o código que usamos antes.

Pode instalar a biblioteca indo a Sketch > Include Library > Add .ZIP Library no Arduino IDE.

A biblioteca inclui alguns exemplos que pode usar, mas terá de os modificar para corresponder à sua configuração de hardware. Incluí um código de exemplo modificado abaixo que pode ser usado com a mesma ligação 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);
}

Exemplo: JSN-SR04T com Arduino e Display de 4 Dígitos

Como último exemplo, quero mostrar como exibir as distâncias medidas num Display de 7 Segmentos de 4 Dígitos. O display, listado nas peças necessárias, tem um driver TM1637, que torna muito fácil a ligação e controlo. Vamos começar pela ligação deste display além do sensor.

Ligação – JSN-SR04T ao Arduino e Display de 4 Dígitos

Vamos ligar o sensor JSN-SR04T como antes, mas usar a breadboard para distribuir a alimentação ao sensor e ao display.

Wiring of JSN-SR04T with Arduino and 4-Digit Display
Ligação do JSN-SR04T com Arduino e Display de 4 Dígitos

O display recebe a alimentação (VSS, GND) da breadboard e tem dois pinos extra que deve ligar ao Arduino. Ligue o pino CLK (Clock) ao pino 3 do Arduino (fio branco) e o DIO (Digital IO) ao pino 4 do Arduino (fio cinzento). E assim fica completa a ligação.

Agora, vamos ver o código.

Código – JSN-SR04T com Arduino e Display de 4 Dígitos

Mantemos o código relacionado com o sensor JSN-SR04T como está. Como antes, usamos a biblioteca NewPing, inicializada com os mesmos pinos, e lemos as distâncias via 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);
}

O que é novo é que criamos o objeto do display TM1637Display. Ele é inicializado com as constantes clkPin e dioPin, que são os pinos a que ligámos o display.

Na função setup(), definimos o brilho do display, sendo 0 o brilho mais baixo e 7 o mais alto. Este comando também liga o display.

Finalmente, na função loop(), simplesmente mostramos a distância medida chamando display.showNumberDec(distance). E é tudo. Agora tem um medidor de distância ultrassónico que mostra distâncias em centímetros num display de 4 dígitos.

JSN-SR04T with Arduino and 4-Digit Display
JSN-SR04T com Arduino e Display de 4 Dígitos

Conclusão

Neste artigo, mostrei como funciona o sensor de distância ultrassónico JSN-SR04T e como pode usá-lo com Arduino. Espero que tenha achado útil e informativo.

Se quiser aprender mais sobre outros sensores de distância, os artigos abaixo podem ser úteis:

Por fim, se tiver alguma dúvida, sugestão, ou se achar que falta algo neste tutorial, por favor deixe um comentário abaixo.