Skip to Content

Tutorial sensore di distanza ad ultrasuoni impermeabile JSN-SR04T con Arduino

Tutorial sensore di distanza ad ultrasuoni impermeabile JSN-SR04T con Arduino

Il JSN-SR04T è un sensore di distanza a ultrasuoni impermeabile e facile da usare, con un raggio di misura da 25 a 450 cm. Se stai pensando di costruire un sistema per misurare il livello dell’acqua o se hai bisogno di effettuare altre misurazioni di distanza all’aperto, questo è il sensore che fa per te!

In questo articolo ho incluso uno schema di collegamento e codici di esempio per permetterti di iniziare a sperimentare con il tuo sensore. Dopo ogni esempio, spiego come funziona il codice, così non avrai problemi a modificarlo secondo le tue esigenze.

Per prima cosa vedremo un esempio che non utilizza una libreria Arduino. Successivamente, parlerò della facile da usare NewPing libreria che offre alcune funzionalità integrate molto utili. Nell’ultimo esempio ti mostrerò come visualizzare le distanze misurate su un display a 4 cifre.

Ma iniziamo con i componenti necessari per realizzare questo progetto.

Componenti necessari

Di seguito trovi i componenti richiesti per questo progetto. Quando cerchi il JSN-SR04T, potresti imbatterti nella versione aggiornata, il JSN-SR04T-2.0. Questa versione più recente funziona esattamente allo stesso modo ma è progettata per 3-5 V invece di 5 V. Tuttavia, alcuni utenti hanno riscontrato problemi usando i sensori a tensioni più basse. Usare un impulso di trigger più lungo di almeno 20 µs invece di 10 µs sembra aiutare in caso di letture errate.

Arduino Uno

USB Data Sync cable Arduino

Cavo USB per Arduino UNO

Dupont wire set

Set di fili Dupont

Half_breadboard56a

Breadboard

JSN-SR04T Ultrasonic Sensor Module

Sensore JSN-SR04T

 Display a 4 cifre 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.

Informazioni sul sensore JSN-SR04T

Il sensore è fornito con un cavo lungo 2,5 m che si collega a una breakout board che controlla il sensore e gestisce l’elaborazione del segnale. Nota che solo il sensore e il cavo sono impermeabili. Non immergere la breakout board stessa in acqua!

Un sensore di distanza a ultrasuoni funziona inviando onde ultrasoniche. Queste onde vengono riflesse da un oggetto e il sensore le rileva. Misurando il tempo trascorso tra l’invio e la ricezione delle onde sonore, puoi calcolare la distanza tra il sensore e l’oggetto.

Sound impulse and its reflection to measure distance
Impulso sonoro e sua riflessione per misurare la distanza

Pinout del JSN-SR04T

La breakout board del JSN-SR04T ha quattro pin. 5V e GNDper l’alimentazione, Trigper attivare l’invio dell’impulso ultrasonico e l’uscita Echo, che restituisce un impulso la cui durata è proporzionale alla distanza misurata. L’immagine sottostante mostra il pinout.

Pinout for JSN-SR04T board
Pinout della scheda JSN-SR04T

Funzionamento del JSN-SR04T

Per far funzionare il sensore, devi impostare Triga HIGH per almeno 10 microsecondi. Questo farà sì che la scheda invii otto impulsi ultrasonici (burst sonico).

Timing diagram of JSN-SR04T from datasheet
Diagramma temporale del JSN-SR04T da Datasheet

Se viene ricevuto un suono riflesso (eco), l’uscita Echoandrà a livello HIGH e la distanza può essere calcolata come

distanza = tempo livello alto * 340 m/s / 2

dove 340 m/s è la velocità del suono. Useremo questa formula più avanti nel codice, ma poiché misureremo la distanza in cm, la costante sarà 0,034 cm/µs.

Nota che i sensori a ultrasuoni non sono come i laser con un fascio focalizzato. La loro direttività ha una forma a bolla e richiede una superficie sufficientemente grande e dura/riflettente per misurazioni accurate.

Direttività del JSN-SR04T (source)

Nel caso del JSN-SR04T, il bersaglio dovrebbe avere almeno 0,5 metri quadrati di superficie e il sensore va puntato perpendicolarmente al bersaglio. La tabella sottostante mostra le specifiche del sensore, ma tieni presente che portata e risoluzione assumono condizioni ideali.

Specifiche del JSN-SR04T

Tensione di funzionamento5 V
Corrente di funzionamento30 mA
Corrente a riposo5 mA
Frequenza40 kHz
Campo di misura25-450 cm
Risoluzione2 mm
Angolo di misura45-75 gradi
Dimensioni del sensore23,5 x 20 mm, cavo lungo 2,5 m
Dimensioni PCB41 x 28,5 mm
Foro di montaggio18 mm

Per maggiori informazioni puoi consultare il datasheet qui.

JSN-SR04T vs HC-SR04

Quali sono le differenze tra questo sensore e il HC-SR04? La differenza principale, oltre all’impermeabilità, è che questo sensore usa un solo trasduttore ultrasonico invece di due. Questo trasduttore funge sia da trasmettitore che da ricevitore delle onde ultrasoniche.

Waterproof JSN-SR04T ultrasonic distance sensor with Arduino Tutorial
Il trasduttore del JSN-SR04T

Per maggiori informazioni su come funzionano i sensori a ultrasuoni, puoi leggere il mio articolo sul HC-SR04. In quell’articolo i principi di funzionamento di un sensore di distanza a ultrasuoni sono spiegati in modo più dettagliato.

Collegamenti – JSN-SR04T ad Arduino

Lo schema di collegamento qui sotto mostra come connettere il sensore JSN-SR04T all’Arduino. La breakout board del JSN-SR04T ha lo stesso pinout esatto dell’HC-SR04, quindi può essere usata come sostituto diretto. Il cavo del sensore può essere inserito nel connettore sul retro della breakout board.

Wiring diagram/schematic for the JSN-SR04T ultrasonic distance sensor with Arduino
Schema di collegamento per il sensore di distanza a ultrasuoni JSN-SR04T con Arduino

Gli esempi di codice qui sotto usano i pin digitali 12 e 11 per il trigger e l’echo, ma ovviamente puoi cambiarli con qualsiasi pin digitale tu voglia.

5 V5 V
TrigPin 12
EchoPin 11
GNDGND

Codice di esempio per il sensore JSN-SR04T con Arduino

Ora che hai collegato il sensore, è il momento di connettere l’Arduino al computer e caricare un po’ di codice. Il sensore può essere usato senza una libreria Arduino. Più avanti ti mostrerò un esempio con la libreria NewPing, che rende il codice molto più breve.

Carica il seguente codice di esempio sul tuo Arduino usando l’IDE Arduino. Questo codice funziona anche per il JSN-SR04T-2.0. Nelle sezioni successive spiegherò in dettaglio come funziona il codice.

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 esegui il codice e punti il sensore verso oggetti a distanze diverse, dovresti vedere distanze variabili (in cm) apparire sul Monitor Seriale. Non dimenticare di impostare la velocità di trasmissione a 115200 per questo esempio!

Serial Monitor showing measured distances by JSN-SR04T in cm.
Monitor Seriale che mostra le distanze misurate in cm

Puoi anche aprire il Serial Plotter e dovresti vedere una linea ondulata se muovi il sensore per misurare varie distanze.

Serial Plotter showing measured distances in cm.
Serial Plotter che mostra le distanze misurate in cm

Come funziona il codice

Per prima cosa, vengono definiti il pin trigger e il pin echo. Li chiamo trigPin e echoPin. Il pin trigger è collegato al pin digitale 12 e il pin echo al pin digitale 11 sull’Arduino. L’istruzione const serve per dare un nome a un valore costante.

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

Nel setup(), inizi impostando la comunicazione seriale a 115200 baud. Per visualizzare la distanza misurata nel monitor seriale, premi Ctrl+Shift+M o vai su Tools > Serial Monitor. Assicurati che anche nel monitor seriale la velocità sia impostata a 115200.

Successivamente, impostiamo trigPin come uscita e echoPin come ingresso.

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

Nel loop(), attivi il sensore impostando trigPin a HIGH per 20 µs. Nota che per ottenere un segnale pulito inizi azzerando trigPin impostandolo a LOW per 5 microsecondi.

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

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

Poi devi leggere la durationdell’impulso inviato dal echoPin. Uso la funzione pulseIn() per questo. Questa funzione aspetta che il pin passi da LOW a HIGH, inizia a misurare il tempo, poi aspetta che il pin torni LOW e ferma la misurazione.

Dopodiché puoi calcolare la distanza usando la formula menzionata all’inizio di questo tutorial. Nota che usiamo la costante 0,034 per la velocità del suono (invece di 340), poiché vogliamo la distanza in centimetri e non in metri.

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

Infine, stampa la distanza calcolata nel monitor seriale e mostrala anche nel plotter. Il ritardo di 100 millisecondi alla fine rallenta le misurazioni a una frequenza ragionevole.

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

Codice di esempio JSN-SR04T con Arduino e libreria NewPing

La NewPing libreria scritta da Tim Eckel può essere usata con molti sensori di distanza a ultrasuoni. L’ultima versione di questa libreria può essere scaricata qui su bitbucket.org. Potresti notare che il codice qui sotto, che usa la libreria NewPing, è molto più breve rispetto al codice usato prima.

Puoi installare la libreria andando su Sketch > Include Library > Add .ZIP Library nell’IDE Arduino.

La libreria include alcuni esempi che puoi usare, ma dovrai modificarli per adattarli al tuo hardware. Ho incluso un esempio modificato qui sotto che può essere usato con lo stesso schema di collegamento di prima.

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

Esempio: JSN-SR04T con Arduino e display a 4 cifre

Come ultimo esempio, voglio mostrarti come visualizzare le distanze misurate su un display 7 segmenti a 4 cifre. Il display, elencato tra i componenti necessari, ha un driver TM1637, che lo rende molto facile da collegare e controllare. Iniziamo con il collegamento di questo display oltre al sensore.

Collegamenti – JSN-SR04T ad Arduino e display a 4 cifre

Collegheremo il sensore JSN-SR04T come prima ma useremo la breadboard anche per distribuire l’alimentazione al sensore e al display.

Wiring of JSN-SR04T with Arduino and 4-Digit Display
Collegamento del JSN-SR04T con Arduino e display a 4 cifre

Il display riceve alimentazione (VSS, GND) dalla breadboard e ha due pin extra che devi collegare all’Arduino. Collega il pin CLK (Clock) al pin 3 dell’Arduino (filo bianco) e il pin DIO (Digital IO) al pin 4 dell’Arduino (filo grigio). E così il collegamento è completo.

Ora diamo un’occhiata al codice.

Codice – JSN-SR04T con Arduino e display a 4 cifre

Manteniamo il codice relativo al sensore JSN-SR04T così com’è. Come prima usiamo la libreria NewPing, inizializzata con gli stessi pin, e leggiamo le distanze tramite 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);
}

La novità è che creiamo l’oggetto display TM1637Display. Viene inizializzato con le costanti clkPin e dioPin, che sono i pin a cui abbiamo collegato il display.

Nella funzione setup(), impostiamo la luminosità del display, con 0 come luminosità minima e 7 come massima. Questo comando accende anche il display.

Infine, nella funzione loop(), visualizziamo semplicemente la distanza misurata chiamando display.showNumberDec(distance). E questo è tutto. Ora hai un misuratore di distanza a ultrasuoni che mostra le distanze in centimetri su un display a 4 cifre.

JSN-SR04T with Arduino and 4-Digit Display
JSN-SR04T con Arduino e display a 4 cifre

Conclusione

In questo articolo ti ho mostrato come funziona il sensore di distanza a ultrasuoni JSN-SR04T e come usarlo con Arduino. Spero che tu l’abbia trovato utile e interessante.

Se vuoi saperne di più su altri sensori di distanza, gli articoli qui sotto potrebbero esserti utili:

Infine, se hai domande, suggerimenti o pensi che manchi qualcosa in questo tutorial, lascia pure un commento qui sotto.