Moduli sensore a ultrasuoni HC-SR04

Indice

Questa guida completa è la tua risorsa unica per esplorare tutto ciò che c’è da sapere sull’HC-SR04. Inizieremo dalle basi, comprendendo il suo principio di funzionamento fondamentale, che è la chiave per sbloccare il suo potenziale. Quindi, passeremo a coprire aspetti importanti come le sue specifiche chiave, come interfacciarlo con microcontrollori popolari e persino approfondire scenari di utilizzo avanzati. Alla fine di questa guida, sarai ben equipaggiato per sfruttare appieno il potenziale dell’HC-SR04 nei tuoi progetti.

Cos'è il modulo sensore a ultrasuoni HC-SR04?

Il modulo sensore a ultrasuoni HC-SR04 è un dispositivo notevole e altamente versatile che si è ritagliato una nicchia nel vasto panorama dei progetti elettronici. Ciò che lo rende davvero speciale è la sua convenienza, una caratteristica che lo rende accessibile a un’ampia gamma di utenti, dagli hobbisti attenti al budget ai professionisti che cercano una soluzione conveniente per i loro progetti.

Front and back view of HC SR04 Ultrasonic Sensor Module
Front and back view of HC - SR04 Ultrasonic Sensor Module

Specifiche tecniche

Comprendere le specifiche tecniche del modulo sensore a ultrasuoni HC-SR04 è fondamentale per qualsiasi implementazione del progetto. Ecco la tabella delle specifiche tecniche:

Tensione di funzionamento
+5V DC (da 4,5V a 5,5V)
Corrente di funzionamento
~15mA (Standby: ~2mA)
Portata
da 2cm a 400cm (da 0,8" a 13ft)
Precisione
±3mm (Nelle condizioni ottimali, varia in base all'ambiente)
Risoluzione
0,3cm (1mm teoricamente possibile con calibrazione)
Angolo di rilevamento
~15° di apertura del cono
Segnale di ingresso Trigger
Impulso HIGH di 10μs per avviare la misurazione della distanza
Segnale di uscita Echo
Larghezza dell'impulso proporzionale alla distanza: 1μs = 0,017cm (basato sulla velocità del suono di 340m/s)
Frequenza massima
40kHz di frequenza ultrasonica
Ciclo di misurazione
≥60ms (per evitare interferenze tra le misurazioni)
Temperatura di funzionamento
da -15°C a +60°C (da 5°F a 140°F)
Dimensioni
45mm × 20mm × 15mm (modulo sensore)
Peso
~5g (solo modulo)

Spiegazione:

  1. Portata: L’HC-SR04 ha una portata operativa compresa tra 2 cm e 400 cm (da 0,8 in a 157 in). Questa gamma relativamente ampia lo rende adatto a numerose applicazioni. Ad esempio, in un progetto di robotica di piccole dimensioni in cui il robot deve muoversi all’interno di una stanza, la portata di 2–400 cm consente di rilevare efficacemente mobili o pareti nelle vicinanze. In un’applicazione industriale di maggiori dimensioni, può essere utilizzato per misurare la distanza tra componenti di macchinari entro questo intervallo. Tuttavia, è importante tenere presente che la precisione può variare leggermente in prossimità dei limiti estremi della portata.

  2. Risoluzione: Con una risoluzione di 0,3 cm, l’HC-SR04 è in grado di fornire misurazioni della distanza piuttosto precise. Questo livello di precisione è sufficiente per la maggior parte delle applicazioni hobbistiche e per molte applicazioni industriali. In un progetto relativo alla stampa 3D, ad esempio, il sensore può essere utilizzato per rilevare la distanza dal piano di stampa durante il livellamento automatico. La risoluzione di 0,3 cm consente di verificare che la testina di stampa si trovi all’altezza corretta rispetto al piano, contribuendo a ottenere stampe di alta qualità.

  3. Alimentazione: Funziona con un’alimentazione a 5V DC. Durante il funzionamento assorbe una corrente di circa 15mA, il che corrisponde a un consumo energetico relativamente basso. In modalità standby, l’assorbimento di corrente è ancora inferiore, meno di 2mA. Ciò lo rende una soluzione efficiente dal punto di vista energetico per i progetti alimentati a batteria. Ad esempio, in un nodo sensore IoT alimentato a batteria che utilizza l’HC-SR04 per il rilevamento della distanza, il basso consumo energetico contribuisce a prolungare la durata della batteria.

  4. Angolo operativo: L’angolo operativo dell’HC-SR04 è inferiore a 15°. Ciò significa che il sensore presenta un campo di rilevamento relativamente stretto ed è più efficace nel rilevare gli ostacoli situati direttamente di fronte ad esso. In un sistema di sicurezza per la casa intelligente, ad esempio, in cui il sensore viene utilizzato per rilevare persone che si avvicinano a una porta, l’angolo operativo ridotto consente di concentrare il rilevamento sugli oggetti che si dirigono direttamente verso il sensore, riducendo i falsi allarmi causati da oggetti presenti nelle aree periferiche.

  5. Interfaccia: Il modulo dispone di un’interfaccia a 4 pin, composta dai pin VCC, GND, Trig ed Echo. La semplicità di questa interfaccia facilita il collegamento a diversi microcontrollori e ad altri componenti elettronici.

Pinout spiegato

Pin 1
Etichetta
VCC
Funzione
Alimentazione (Positivo)
Tensione
5V DC
Collegamento
Arduino: 5V
Raspberry Pi: 5V (Massa comune con il modulo)
Pin 2
Etichetta
Trig (Trigger)
Funzione
Ingresso Trigger
▶ Impulso HIGH di 10μs per avviare la misurazione
▶ Livello LOW per il reset
Collegamento
Arduino: Qualsiasi pin digitale (es. D2)
Raspberry Pi: Qualsiasi GPIO (es. GPIO17)
Pin 3
Etichetta
Echo
Funzione
Uscita Echo
▶ Durata del livello HIGH = tempo di andata e ritorno delle onde ultrasoniche
▶ Durata massima del livello HIGH: 38ms (timeout in assenza di ostacoli)
Collegamento
Arduino: Qualsiasi pin digitale (es. D3)
Raspberry Pi: GPIO con partitore di tensione (5V→3,3V)
⚠️ Collegare direttamente il segnale Echo a 5V al Raspberry Pi può danneggiare il GPIO! Utilizzare un partitore di tensione da 1kΩ + 2kΩ.
Pin 4
Etichetta
GND
Funzione
Massa di alimentazione (Massa comune)
Collegamento
Arduino/GND
Raspberry Pi/GND

Spiegazione:

Il pin VCC è responsabile dell’alimentazione del modulo. Collegandolo a una fonte di alimentazione stabile a 5 V, preferibilmente dall’uscita a 5 V del microcontrollore, si garantisce il corretto funzionamento del modulo. Un’alimentazione stabile è fondamentale per ottenere letture accurate. Se l’alimentazione è instabile, ciò può portare a misurazioni di distanza incoerenti. Ad esempio, se si verificano picchi o cali di tensione nell’alimentazione dell’HC-SR04, il sensore potrebbe emettere impulsi ultrasonici errati o interpretare in modo errato gli echi ricevuti, con conseguenti calcoli di distanza imprecisi.

Il pin GND fornisce il collegamento a terra necessario. Completa il circuito elettrico e contribuisce a mantenere una tensione di riferimento stabile per il modulo. Senza un corretto collegamento a terra, il modulo potrebbe non funzionare affatto o fornire risultati irregolari. In un progetto basato su Arduino, il pin GND dell’HC-SR04 viene solitamente collegato al pin GND della scheda Arduino per garantire un riferimento di terra comune.

Il pin Trig è il punto in cui ha inizio la magia. Quando a questo pin viene inviato un impulso di livello alto della durata di 10 μs, esso attiva il trasmettitore a ultrasuoni, che emette una raffica di 8 impulsi di onde ultrasoniche a 40 kHz. In un progetto Raspberry Pi basato su Python, è possibile utilizzare la libreria GPIO (General-Purpose Input/Output) per generare questo impulso di livello alto della durata di 10 μs. Questo semplice meccanismo di ingresso digitale consente di controllare facilmente il processo di misurazione della distanza.

Il pin Echo è fondamentale per ottenere le informazioni sulla distanza. Una volta emesse le onde ultrasoniche, il pin Echo passa a livello HIGH. Rimane a livello HIGH fino a quando le onde riflesse vengono ricevute dal ricevitore a ultrasuoni. La durata durante la quale il pin Echo rimane a livello HIGH è direttamente proporzionale al tempo impiegato dalle onde ultrasoniche per raggiungere l'ostacolo e tornare indietro. Misurando questo intervallo di tempo, possiamo calcolare la distanza dall'ostacolo utilizzando la formula Distanza ( cm ) = Tempo ( μs ) × 0.0343 2 . In un progetto Arduino basato su C++, è possibile utilizzare la funzione pulseIn() per misurare la durata dell'impulso a livello HIGH sul pin Echo.

Componenti di base e principio di funzionamento

Componenti chiave

Per capire veramente come funziona il modulo sensore ad ultrasuoni HC – SR04, è essenziale prima familiarizzare con i suoi componenti principali. Ogni parte svolge un ruolo distinto e cruciale nel funzionamento complessivo del modulo.

  1. Trasmettitore ad ultrasuoni: Questo è il componente responsabile della fase iniziale del processo di misurazione della distanza. Emette onde ultrasoniche a una frequenza di 40 kHz. Queste onde ad alta frequenza non sono udibili all’orecchio umano ma sono la chiave del funzionamento del sensore. Quando viene attivato, il trasmettitore invia queste onde nell’ambiente circostante. Pensalo come un potente altoparlante che emette onde sonore a una frequenza ben oltre ciò che possiamo sentire. In un’applicazione di robotica, ad esempio, il trasmettitore ad ultrasuoni su un robot invierà queste onde da 40 kHz nella direzione in cui il robot si sta muovendo, preparandosi a rilevare eventuali ostacoli sul suo percorso.
  1. Ricevitore ad ultrasuoni: Come suggerisce il nome, il compito del ricevitore ad ultrasuoni è quello di catturare le onde ultrasoniche che sono state riflesse da eventuali ostacoli nella gamma del sensore. Una volta che il trasmettitore invia le onde, viaggiano attraverso l’aria fino a quando non colpiscono un oggetto. Le onde quindi si riprendono ed è compito del ricevitore raccogliere queste onde riflesse. È come un microfono altamente sensibile in grado di rilevare i più deboli echi delle onde ultrasoniche. In un sistema domotico in cui l’HC – SR04 viene utilizzato per rilevare la presenza di una persona in una stanza, il ricevitore catturerebbe le onde che rimbalzano dal corpo della persona.
  1. Circuito di controllo: Questo è il cervello dietro l’operazione. Il circuito di controllo gestisce l’intera sequenza di elaborazione del segnale. Coordina le azioni del trasmettitore e del ricevitore. Quando riceve un segnale di trigger, istruisce il trasmettitore a emettere le onde ultrasoniche. Quindi, monitora attentamente il ricevitore per le onde riflesse in entrata. Una volta ricevute le onde, il circuito di controllo calcola il tempo impiegato dalle onde per viaggiare verso l’ostacolo e ritorno. In base a questo tempo e alla velocità nota del suono nell’aria, calcola la distanza dall’ostacolo. In un ambiente industriale, il circuito di controllo in un HC – SR04 utilizzato per macchine automatizzate gestirebbe con precisione queste operazioni per garantire misurazioni della distanza accurate per il corretto funzionamento del macchinario.

Come funziona

Ora che conosciamo i componenti chiave, diamo un passo dopo passo, guarda come l’HC – SR04 misura effettivamente la distanza.

Segnale di trigger:

Il processo inizia con un segnale di trigger. Quando viene applicato un impulso alto di 10 μs al pin Trig (trigger) del modulo HC – SR04, è come dare al sensore un comando “Start”. Questo breve ma significativo impulso elettrico avvia l’intera sequenza di misurazione. Ad esempio, in un progetto basato su Arduino, useresti una semplice linea di codice per inviare questo impulso alto da 10 μs al pin trig dell’HC – SR04, dicendogli di iniziare il processo di misurazione.

Propagazione dell'onda:

Una volta attivato, il trasmettitore ad ultrasuoni entra in azione. Il modulo invia un burst di 8 impulsi ultrasonici a una frequenza di 40 kHz. Questi impulsi sono come una serie di “proiettili sonici” invisibili che esplodono nell’ambiente. Dopo aver inviato questi impulsi, il modulo entra quindi in uno stato di attesa, aspettando pazientemente che le onde colpiscano un ostacolo e rimbalzino. In uno scenario reale – mondo, se si utilizzasse l’HC – SR04 per misurare la distanza da un muro in una stanza, gli 8 impulsi viaggerebbero verso il muro, allargandosi a forma di cono con un angolo relativamente stretto di circa 15 gradi.

Rilevamento eco:

Il pin Echo è la chiave per rilevare le onde riflesse. Non appena le onde ultrasoniche vengono inviate, il perno di Echo va in alto. Questo è il modo del sensore per indicare che ha avviato il processo di misurazione. Quindi, attende il ritorno delle onde riflesse. Quando il ricevitore ad ultrasuoni cattura le onde riflesse, il pin Echo si abbassa. La durata per la quale il perno di Echo rimane alto è uguale al tempo di viaggio round – viaggio delle onde ultrasoniche. In un progetto Raspberry Pi, useresti una funzione per misurare il tempo in cui il pin Echo è alto, il che è un passaggio cruciale per calcolare la distanza.

Calcolo della distanza:

Calcolo della distanza: il passaggio finale consiste nel calcolare la distanza dall'ostacolo. La formula per calcolare la distanza in centimetri è Distanza (cm) = Tempo (μs) × 0.0343 2 . Il fattore 0.0343 deriva dalla velocità del suono nell'aria, che è di circa 343 m/s. Poiché le onde viaggiano fino all'ostacolo e poi tornano indietro (percorso di andata e ritorno), dividiamo per 2 la distanza totale percorsa per ottenere la distanza di sola andata fino all'ostacolo. Ad esempio, se il tempo misurato durante il quale il pin Echo rimane a livello HIGH è di 2000μs, la distanza viene calcolata come 2000 × 0.0343 2 = 34.3 cm. Questo calcolo è lo stesso sia che si utilizzi l'HC-SR04 in un semplice progetto hobbistico sia in un'applicazione industriale complessa.

Interfacciamento con microcontrollori popolari

Guida all'installazione di Arduino

Schema elettrico

Il collegamento del modulo sensore ad ultrasuoni HC – SR04 ad un Arduino è un processo semplice. Ecco come puoi farlo:

  • VCC: Collegare il pin VCC dell’HC – SR04 al pin 5V dell’Arduino. Ciò fornisce la potenza necessaria al modulo sensore. Un alimentatore stabile da 5 V dell’Arduino assicura che il sensore funzioni in modo ottimale.
  • GND: Il pin GND (terra) dell’HC – SR04 deve essere collegato al pin GND dell’Arduino. Ciò stabilisce un riferimento di terra comune sia per il sensore che per l’Arduino, che è fondamentale per una corretta comunicazione elettrica.
  • Lindo: Collegare il pin trig (trigger) dell’HC – SR04 al pin digitale 2 dell’Arduino. Questo è il pin in cui Arduino invierà l’impulso di livello alto 10μs per attivare il processo di misurazione della distanza – nell’HC – SR04.
  • Eco: Il pin Echo dell’HC – SR04 è collegato al pin digitale 3 dell’Arduino. L’Arduino leggerà l’impulso ad alta durata su questo pin per calcolare la distanza dall’ostacolo.
Ecco un semplice schema elettrico per illustrare le connessioni:
				
					   HC-SR04          Arduino
     VCC ------------ 5V
     GND ------------ GND
     Trig ----------- Pin digitale 2
     Echo ----------- Pin digitale 3
				
			

Esempio di codice

Ecco un esempio di codice Arduino di base per iniziare a misurare la distanza utilizzando HC – SR04:
 
				
					const int trigPin = 2;
const int echoPin = 3;

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

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

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

  Serial.print("Distanza: ");
  Serial.print(distance);
  Serial.println(" cm");

  delay(500);
}
				
			

Nella funzione setup, inizializziamo innanzitutto la comunicazione seriale a una velocità di trasmissione di 9600 baud, il che ci permette di visualizzare le letture di distanza nel Monitor seriale di Arduino. Successivamente, impostiamo il pin trigPin come pin di uscita e il pin echoPin come pin di ingresso.
Nella funzione loop, iniziamo impostando il pin trigPin su LOW per 2 microsecondi per garantire un avvio corretto. Successivamente, lo impostiamo su HIGH per 10 microsecondi per attivare il trasmettitore a ultrasuoni dell’HC-SR04. Dopodiché, riportiamo il trigPin a LOW.
La funzione pulseIn viene quindi utilizzata per misurare la durata dell’impulso di livello alto sul pin echoPin. Questa durata rappresenta il tempo impiegato dalle onde ultrasoniche per raggiungere l’ostacolo e tornare indietro. Calcoliamo quindi la distanza utilizzando la formula distanza = durata * 0,0343 / 2, dove 0,0343 è la velocità del suono in cm/μs e dividiamo per 2 poiché le onde viaggiano fino all’ostacolo e tornano indietro.
Infine, visualizziamo la distanza calcolata sul monitor seriale e aggiungiamo un ritardo di 500 millisecondi prima della misurazione successiva.

Nella funzione setup, inizializziamo innanzitutto la comunicazione seriale con una velocità di 9600 baud, che ci consente di visualizzare le misurazioni della distanza nel Monitor Seriale di Arduino. Quindi impostiamo trigPin come pin di uscita e echoPin come pin di ingresso.

Nella funzione loop, iniziamo impostando trigPin su LOW per 2 microsecondi, in modo da garantire un avvio corretto. Successivamente, lo impostiamo su HIGH per 10 microsecondi per attivare il trasmettitore a ultrasuoni dell'HC-SR04. Dopodiché, riportiamo trigPin su LOW.

La funzione pulseIn() viene quindi utilizzata per misurare la durata dell'impulso a livello HIGH su echoPin. Questa durata rappresenta il tempo impiegato dalle onde ultrasoniche per raggiungere l'ostacolo e tornare indietro. Calcoliamo quindi la distanza utilizzando la formula distance = duration * 0.0343 / 2, dove 0.0343 rappresenta la velocità del suono in cm/μs e dividiamo per 2 perché le onde percorrono il tragitto fino all'ostacolo e poi tornano indietro.

Infine, visualizziamo la distanza calcolata nel Monitor Seriale e aggiungiamo un ritardo di 500 millisecondi prima della misurazione successiva.

Consejos

  1. Medición Precisa de Alta Duración:

Quando si utilizza la funzione pulseIn(), è importante tenere presente che essa misura la durata di un impulso. Nel caso dell'HC-SR04, si tratta del periodo di tempo durante il quale il pin Echo rimane a livello HIGH. Per garantire misurazioni accurate, assicurarsi che non siano presenti interferenze elettriche che potrebbero influire sulla durata dell'impulso. Inoltre, se l'ostacolo è troppo lontano, può verificarsi un timeout dell'impulso. È possibile impostare un valore di timeout nella funzione pulseIn() per gestire correttamente questi casi. Ad esempio, long duration = pulseIn(echoPin, HIGH, 20000);, dove 20000 rappresenta il valore di timeout in microsecondi.

  1. Evitar Fuentes de Ruido:

Le onde ultrasoniche possono essere influenzate da sorgenti di rumore intenso. Quando si installa l’HC-SR04 nel proprio progetto, è consigliabile evitare aree caratterizzate da livelli sonori elevati, ad esempio in prossimità di altoparlanti o in ambienti industriali particolarmente rumorosi. Il rumore può interferire con le onde ultrasoniche emesse dal sensore, causando misurazioni della distanza imprecise. Se è necessario utilizzare il sensore in un ambiente rumoroso, si può valutare l’impiego di materiali fonoassorbenti o di appositi involucri per schermare il sensore dal rumore.

Integrazione con Raspberry Pi

Attenzione alla tensione

Uno degli aspetti principali da considerare quando si integra l’HC-SR04 con un Raspberry Pi riguarda i livelli di tensione. I pin GPIO (General-Purpose Input/Output) di un Raspberry Pi possono accettare una tensione massima di 3,3 V. Tuttavia, l’HC-SR04 funziona a 5 V e il pin Echo dell’HC-SR04 può fornire un segnale a 5 V. Collegare direttamente un segnale a 5 V a un pin GPIO del Raspberry Pi può danneggiare il dispositivo.

Per risolvere questo problema, è possibile utilizzare un circuito partitore di tensione. Un semplice partitore di tensione composto da una resistenza da 1kΩ e una da 2kΩ può essere utilizzato per convertire l'uscita a 5V del pin Echo dell'HC-SR04 in un segnale compatibile con i 3,3V del Raspberry Pi. La formula per calcolare la tensione di uscita V out di un partitore di tensione è V out = V in × R 2 R 1 + R 2 , dove V in è la tensione di ingresso (5V in questo caso), R 1 è la prima resistenza (1kΩ) e R 2 è la seconda resistenza (2kΩ). Sostituendo i valori nella formula, otteniamo V out = 5 × 2000 1000 + 2000 3.33 V , un valore che rientra nell'intervallo di tensione sicuro per il pin GPIO del Raspberry Pi.

Cableado

  • VCC: Collegare il pin VCC dell’HC-SR04 al pin 5V del Raspberry Pi. In questo modo viene alimentato il modulo sensore HC-SR04.

  • GND: Il pin GND dell’HC-SR04 deve essere collegato al pin GND del Raspberry Pi per stabilire una massa comune.

  • Trig: Collegare il pin Trig dell’HC-SR04 al GPIO 17 del Raspberry Pi. Il Raspberry Pi utilizzerà questo pin per inviare all’HC-SR04 un impulso di trigger a livello HIGH della durata di 10μs.

  • Echo: Il pin Echo dell’HC-SR04, dopo il passaggio attraverso il circuito partitore di tensione (resistenze da 1kΩ e 2kΩ), deve essere collegato al GPIO 27 del Raspberry Pi. Il Raspberry Pi leggerà la durata dell’impulso a livello HIGH su questo pin per calcolare la distanza.

Il cablaggio può essere riassunto come segue:

				
					   HC-SR04          Raspberry Pi
     VCC ------------ 5V
     GND ------------ GND
     Trig ----------- GPIO 17
     Echo (tramite partitore di tensione) ----------- GPIO 27
				
			

Código Python

Ecco un esempio di codice Python che utilizza la libreria RPi.GPIO per interfacciare l’HC – SR04 con un Raspberry Pi:
				
					import RPi.GPIO as GPIO
import time

# Imposta la modalità GPIO
GPIO.setmode(GPIO.BCM)

# Definisce i pin
TRIG = 17
ECHO = 27

# Configura i pin
GPIO.setup(TRIG, GPIO.OUT)
GPIO.setup(ECHO, GPIO.IN)

def measure_distance():
    # Invia un impulso HIGH di 10μs per attivare il sensore
    GPIO.output(TRIG, True)
    time.sleep(0.00001)
    GPIO.output(TRIG, False)

    # Attende l'inizio dell'eco
    while GPIO.input(ECHO) == 0:
        pulse_start = time.time()

    # Attende la fine dell'eco
    while GPIO.input(ECHO) == 1:
        pulse_end = time.time()

    pulse_duration = pulse_end - pulse_start
    distance = pulse_duration * 17150  # Velocità del suono in cm/s divisa per 2
    distance = round(distance, 2)

    return distance

try:
    while True:
        dist = measure_distance()
        print(f"Distanza: {dist} cm")
        time.sleep(1)

except KeyboardInterrupt:
    print("Misurazione interrotta dall'utente")
    GPIO.cleanup()
				
			

In questo codice, importiamo innanzitutto le librerie necessarie: RPi.GPIO per controllare i pin GPIO del Raspberry Pi e time per aggiungere i ritardi. Impostiamo quindi la modalità GPIO su BCM (numerazione dei canali del SoC Broadcom). Definiamo i pin TRIG ed ECHO, quindi configuriamo il pin TRIG come uscita e il pin ECHO come ingresso.

La funzione measure_distance è quella in cui viene eseguita la misurazione. Invia un impulso a livello HIGH della durata di 10μs al pin TRIG per attivare l'HC-SR04. Successivamente, attende che il pin ECHO passi a livello HIGH (indicando l'inizio dell'eco) e registra l'istante iniziale. Quindi attende che il pin ECHO torni a livello LOW (indicando la fine dell'eco) e registra l'istante finale. La differenza tra l'istante iniziale e quello finale viene utilizzata per calcolare la distanza. La distanza viene calcolata moltiplicando la durata dell'impulso per la velocità del suono in cm/s (34300 cm/s) e dividendo il risultato per 2, poiché il suono percorre il tragitto fino all'ostacolo e poi torna indietro.

Nel blocco try, misuriamo continuamente la distanza e la visualizziamo nella console ogni secondo. Se l'utente preme Ctrl + C (KeyboardInterrupt), il programma esegue la pulizia dei pin GPIO e termina correttamente.

Configurazione ESP32

Assegnazione dei pin

L’ESP32 è un potente microcontrollore con più pin GPIO (General – Purpose Input/Output). Quando si collega l’HC – SR04 a un ESP32, è possibile utilizzare i 5V dal pin VOUT dell’ESP32 per alimentare l’HC – SR04. Per i pin Trig ed Echo, è possibile collegarli a qualsiasi pin GPIO disponibile. Ad esempio, è possibile collegare il pin Trig al GPIO 14 e il pin Echo al GPIO 15. Tuttavia, assicurati di scegliere pin che non siano già in uso da altri componenti nel tuo progetto.

Codice Arduino IDE

Il codice per utilizzare l’HC – SR04 con un ESP32 nell’Arduino IDE è piuttosto simile al codice Arduino. Ecco un esempio:
				
					const int trigPin = 14;
const int echoPin = 15;

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

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

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

  Serial.print("Distanza: ");
  Serial.print(distance);
  Serial.println(" cm");

  delay(500);
}
				
			

Nella funzione setup, inizializziamo la comunicazione seriale con una velocità di 115200 baud. Impostiamo quindi trigPin come pin di uscita e echoPin come pin di ingresso.

Nella funzione loop, il processo di attivazione dell'HC-SR04 e di misurazione della distanza è lo stesso utilizzato nel codice Arduino. Inviamo un impulso a livello HIGH della durata di 10μs al trigPin per attivare il sensore, misuriamo la durata dell'impulso a livello HIGH sul echoPin utilizzando pulseIn e calcoliamo la distanza.

Tuttavia, quando si utilizza l’ESP32 nell’Arduino IDE, assicurati di selezionare la scheda ESP32 corretta nell’IDE. Inoltre, se prevedi di integrare l’ESP32 con funzionalità IoT (Internet of Things) come WiFi o Bluetooth, è necessario gestire l’inizializzazione di queste funzionalità nel tuo codice. Ad esempio, se desideri inviare i dati di distanza tramite WiFi, dovrai aggiungere codice per connetterti a una rete WiFi e configurare un server o un client per inviare i dati.

Idee di progetto creative con HC-SR04

Robot che evita gli ostacoli

Il robot che evita gli ostacoli rappresenta un’applicazione affascinante e pratica del modulo sensore a ultrasuoni HC-SR04. La sua funzione principale è quella di muoversi in sicurezza nell’ambiente circostante, rilevando gli ostacoli sul proprio percorso. Ciò è possibile grazie all’utilizzo di più sensori HC-SR04 posizionati strategicamente sul robot.

I sensori sono configurati per rilevare ostacoli provenienti da diverse direzioni. Ad esempio, una serie di sensori è posizionata nella parte anteriore del robot per rilevare eventuali ostacoli che si trovano direttamente sul suo percorso in avanti. Inoltre, alcuni sensori sono posizionati ai lati del robot per rilevare gli ostacoli che potrebbero avvicinarsi lateralmente. Quando viene rilevato un ostacolo, il sistema di controllo del robot, che spesso si basa su un microcontrollore come Arduino, calcola la distanza dall’ostacolo utilizzando i dati provenienti dai sensori HC-SR04.

Sulla base di queste informazioni relative alla distanza, il sistema di controllo determina quindi l’azione appropriata da intraprendere per evitare l’ostacolo. Ciò comporta solitamente il comando dei motori in modo da modificare la direzione del robot. Ad esempio, se viene rilevato un ostacolo sul lato sinistro del robot, il sistema di controllo può ordinare al motore sinistro di rallentare o invertire la marcia, mentre il motore destro continua a funzionare a velocità normale. Ciò fa sì che il robot viri a destra, allontanandosi dall’ostacolo.

Per realizzare questo progetto, avrai bisogno di diversi componenti chiave. Un Arduino funge da “cervello” dell’intero sistema. Elabora i dati ricevuti dai sensori HC-SR04 e invia comandi ai motori. I motori sono necessari per azionare le ruote del robot, consentendogli di muoversi. Un driver per motori, come l’L298N, è essenziale per il controllo dei motori. L’L298N è in grado di gestire i requisiti di corrente relativamente elevati dei motori e consente all’Arduino di controllarne efficacemente la velocità e la direzione. E, naturalmente, sono necessari più sensori HC-SR04 per il rilevamento frontale e laterale. Combinando questi componenti e scrivendo il codice appropriato per controllarli, è possibile creare un robot in grado di evitare gli ostacoli e perfettamente funzionante.

cestino intelligente

Il cestino intelligente è un ottimo esempio di come il modulo sensore a ultrasuoni HC-SR04 possa essere utilizzato per migliorare la funzionalità degli oggetti di uso quotidiano. In questa applicazione, il cestino intelligente è progettato per avere una funzione di apertura automatica del coperchio. Questa funzione viene attivata dalla presenza di una persona che si avvicina al cestino.

Il sensore HC-SR04 è montato sul cestino in modo tale da poter rilevare la distanza da qualsiasi oggetto che si trovi davanti ad esso. Quando qualcuno si avvicina al cestino, il sensore misura la distanza tra il cestino e la persona. Se la distanza misurata scende al di sotto di una soglia preimpostata (ad esempio, 20 cm), ciò indica che una persona è abbastanza vicina al cestino da averne bisogno. A questo punto, il sensore invia un segnale a un servomotore.

Il servomotore è collegato al coperchio del cestino ed è responsabile della sua apertura e chiusura. Quando riceve il segnale dal sensore HC-SR04, il servomotore ruota per aprire il coperchio. Questo funzionamento “a mani libere” non solo è comodo per l’utente, ma contribuisce anche a mantenere il cestino pulito e igienico, poiché non è necessario toccare direttamente il coperchio.

Durante la scrittura del codice per questo progetto, l’impostazione della soglia di distanza rappresenta un passaggio fondamentale. È necessario calibrare con attenzione questo valore in base ai requisiti specifici del proprio cestino intelligente. Se la soglia è impostata su un valore troppo alto, il coperchio potrebbe aprirsi inutilmente quando qualcuno si trova ancora a una certa distanza dal cestino. D’altra parte, se la soglia è impostata su un valore troppo basso, il coperchio potrebbe non aprirsi in tempo quando l’utente si avvicina. Una soglia di distanza ben calibrata garantisce il funzionamento ottimale del cestino intelligente.

Monitor del livello dell'acqua

Il monitor del livello dell’acqua è un’applicazione pratica del modulo sensore a ultrasuoni HC-SR04, in particolare in situazioni in cui è necessario monitorare il livello dell’acqua in un serbatoio. Ciò può avvenire in un serbatoio domestico di accumulo dell’acqua, in un serbatoio industriale di contenimento dell’acqua o persino in un acquario.

Il sensore HC-SR04 viene installato sopra il serbatoio dell’acqua. Emette onde ultrasoniche verso il basso, in direzione della superficie dell’acqua. Queste onde viaggiano attraverso l’aria e rimbalzano indietro quando colpiscono la superficie dell’acqua. Il sensore misura quindi il tempo impiegato dalle onde per raggiungere la superficie dell’acqua e tornare indietro. Utilizzando la velocità nota del suono nell’aria, è possibile calcolare la distanza dal sensore alla superficie dell’acqua.

In molti casi, il monitor del livello dell’acqua è integrato in un sistema IoT (Internet delle cose). Ad esempio, può essere collegato all’app Blynk. I dati relativi al livello dell’acqua calcolati vengono inviati all’app, consentendo agli utenti di monitorare il livello dell’acqua da remoto. Ciò è particolarmente utile per le applicazioni industriali in cui il monitoraggio in tempo reale dei livelli dell’acqua è fondamentale per il corretto funzionamento dei processi.

Un aspetto importante da considerare quando si installa un sensore di livello dell’acqua è la calibrazione. Poiché il sensore è installato a una certa altezza sopra il fondo del serbatoio, è necessario tenere conto di tale altezza nei calcoli della distanza. Ad esempio, se il sensore è installato a 50 cm sopra il fondo del serbatoio e la distanza calcolata dal sensore alla superficie dell’acqua è di 30 cm, il livello effettivo dell’acqua nel serbatoio è di 20 cm. Calibrando con precisione l’altezza del sensore ed effettuando i calcoli necessari, è possibile garantire che il sensore di livello dell’acqua fornisca letture accurate e affidabili.

Risoluzione dei problemi comuni

letture incoerenti

Uno dei problemi più comuni che gli utenti incontrano con il modulo sensore a ultrasuoni HC – SR04 sono letture incoerenti. Questo può essere piuttosto frustrante, soprattutto quando ti affidi a misurazioni di distanza accurate per il tuo progetto.
 

Causa: riflessioni multi-percorso o potenza instabile

Le riflessioni multi-percorso si verificano quando le onde ultrasoniche emesse dal sensore rimbalzano su più superfici prima di raggiungere il ricevitore. Questo può accadere in ambienti complessi con molti oggetti o in aree con ampie superfici riflettenti. Ad esempio, in una stanza con molti mobili e specchi, le onde ultrasoniche possono rimbalzare su mobili, pareti e specchi prima di essere rilevati dal ricevitore. Ciò rende difficile per il sensore calcolare con precisione la distanza dall’oggetto previsto, provocando letture incoerenti.

Il potere instabile è un altro colpevole. Se l’alimentazione dell’HC – SR04 non è stabile, il sensore potrebbe non funzionare correttamente. Le fluttuazioni di tensione possono influenzare il corretto funzionamento del trasmettitore e del ricevitore ad ultrasuoni, portando a misurazioni di distanza erratiche. Ad esempio, se si utilizza una batteria che si sta esaurendo o un adattatore di alimentazione con una regolazione della tensione scadente, il sensore potrebbe non ricevere un alimentatore a 5 V coerente, che può influire sulle sue prestazioni.

FIX: aggiungere un involucro di protezione per il sensore e utilizzare una fonte di alimentazione a 5 V regolata

L’aggiunta di un involucro di protezione attorno al sensore può aiutare a ridurre l’impatto dei riflessi multi-percorso. L’involucro può essere progettato per dirigere le onde ultrasoniche in modo più mirato, riducendo le possibilità che le onde rimbalzino su superfici indesiderate. Un semplice involucro di cartone o plastica con un’apertura stretta nella parte anteriore può essere efficace in questo senso.

L’utilizzo di una fonte di alimentazione a 5 V regolata è fondamentale per un funzionamento stabile. Un alimentatore con regolazione della tensione incorporata, come un adattatore a parete di alta qualità o un modulo di alimentazione regolato in tensione, assicura che l’HC – SR04 riceva un consistente 5 V. Questo aiuta a eliminare eventuali problemi causati dalle fluttuazioni di tensione e migliora la precisione complessiva e la coerenza delle letture del sensore.

Nessun segnale di uscita

Un altro problema comune è quando l’HC – SR04 non riesce a produrre un segnale di uscita. Questo può essere un segno di alcuni problemi diversi ed è importante controllare sistematicamente ogni possibilità per far funzionare nuovamente il sensore.
 
Verifica: verificare il cablaggio (in particolare VCC/GND), il divisore di tensione per Raspberry Pi e la logica del codice per il timing del trigger/eco
Innanzitutto, verifica attentamente il cablaggio. Assicurarsi che i pin VCC e GND siano collegati correttamente alla fonte di alimentazione e alla messa a terra, rispettivamente. Una connessione allentata o errata può impedire che il sensore si accenda correttamente o può causare cortocircuiti elettrici che interrompono il normale funzionamento del modulo. In molti casi, una semplice ispezione visiva e ri-connessione dei fili può risolvere il problema.

Se stai utilizzando HC – SR04 con un Raspberry Pi, non dimenticare di controllare il circuito del divisore di tensione. Come accennato in precedenza, i pin GPIO di Raspberry Pi possono gestire solo 3,3 V e spesso viene utilizzato un divisore di tensione per convertire l’uscita a 5 V dal pin Echo di HC – SR04 in un segnale compatibile da 3,3 V. Se i componenti del divisore di tensione (di solito resistori) sono danneggiati o collegati in modo errato, il Raspberry Pi non riceverà alcun segnale di uscita.

Anche la logica del codice per il trigger/echo timing è un’area critica da controllare. Assicurarsi che il codice invii il segnale di trigger corretto (un impulso alto 10μs) al pin di trig e che stia misurando correttamente la durata dell’impulso ad alto livello sul pin Echo. Il codice errato può impedire l’attivazione del sensore o può causare un errato interpretazione del segnale eco dal microcontrollore, portando a nessun output o calcoli errati della distanza. Ad esempio, se i tempi di ritardo nel codice sono impostati in modo errato, può interrompere la corretta sequenza di attivazione del sensore e lettura dell’eco.

Errori fuori - di portata

Fuori – di – Errori di portata possono verificarsi quando l’oggetto rilevato è troppo vicino o troppo lontano dal sensore HC – SR04. Ciò può causare problemi nel tuo progetto, soprattutto se il tuo codice non è adeguatamente attrezzato per gestire tali situazioni.
 
Soluzione: implementare un timeout (ad es. 38 ms per nessun eco) e gestire i valori 0 o ∞ con grazia nel codice
L’implementazione di un timeout nel codice è un modo utile per gestire i casi in cui l’oggetto è troppo lontano perché il sensore possa rilevare un’eco entro un tempo ragionevole. Ad esempio, se non viene ricevuto alcun eco entro 38 ms, è una buona indicazione che l’oggetto è oltre la portata del sensore. Nel tuo codice, puoi impostare un timer che si avvia quando viene inviato il segnale di trigger e si interrompe quando viene ricevuto un’eco. Se il timer raggiunge il valore di timeout senza ricevere un’eco, è possibile presumere che l’oggetto sia fuori intervallo e intraprendere le azioni appropriate, ad esempio visualizzare un messaggio di errore o impostare un valore di distanza predefinito.

Anche la gestione di valori 0 o ∞ (infinito) nel codice è importante. Un valore di distanza pari a 0 può indicare che il sensore è troppo vicino a un oggetto, più vicino al suo raggio minimo rilevabile. In questi casi, potresti voler impostare una soglia di distanza minima nel tuo codice e regolare di conseguenza il valore della distanza. Allo stesso modo, se il codice calcola un valore di distanza estremamente grande (infinito in avvicinamento), è probabilmente un’indicazione di un errore, come un problema con il rilevamento dell’eco o calcoli errati. Il tuo codice dovrebbe essere in grado di gestire questi casi con grazia, ad esempio, registrando un messaggio di errore o tentando di ri-misurare la distanza.

HC-SR04 rispetto ad altri sensori di distanza

vs. Sensori a infrarossi

Tabella 1: HC-SR04 (Ultrasuoni) vs Sensori a infrarossi

HC-SR04

Portata: 2cm–400cm (Abstract 1, 6)

Precisione: ±3mm (in condizioni ideali, Abstract 1)

Tensione: 5V (fissa, Abstract 1)

Vantaggi: Nessuna interferenza luminosa, maggiore portata (Abstract 5)

Svantaggi: Precisione ridotta a distanza ravvicinata, sensibilità al rumore ultrasonico (Abstract 1)

Infrarossi

Portata: Tipicamente <100cm (Abstract 1, 5)

Precisione: ±5mm–1cm (influenzata dal colore/materiale, Abstract 5)

Tensione: 3,3V–5V (flessibile, Abstract 5)

Vantaggi: Dimensioni ridotte, basso costo (Abstract 1)

Svantaggi: Interferenze dovute alla luce ambientale e al colore (Abstract 5)

La tabella 1 evidenzia il compromesso tra il robusto rilevamento a lungo raggio di HC-SR04 (2 cm–400 cm) e le dimensioni compatte dei sensori a infrarossi/basso costo, notando l’immunità di HC-SR04 alle interferenze della luce vs. Vulnerabilità degli infrarossi alla luce ambientale e al colore del materiale.

vs. sensori laser

Tabella 2: HC-SR04 vs Laser/ToF (VL53L0X)

HC-SR04

Portata: 2cm–400cm (Abstract 1, 4)

Precisione: ±3mm (Abstract 4)

Frequenza di aggiornamento: 60ms (Abstract 4)

Costo: ~$2–3 (Abstract 1)

Punti deboli: Angolo del cono di 15°, rumore ambientale (Abstract 1)

Laser/ToF (VL53L0X)

Portata: 5cm–200cm (Abstract 1, 3)

Precisione: ±1mm–3mm (Abstract 3)

Frequenza di aggiornamento: 20ms (più veloce, Abstract 4)

Costo: ~$10–15 (Abstract 1)

Punti di forza: Fascio stretto di 5°, resistente alle interferenze (Abstract 3)

La tabella 2 confronta il rapporto costo-efficacia di HC-SR04 ($ 2–3) e l’ampia gamma (400 cm) con la precisione superiore (±1 mm) e la velocità (± 1 mm) dei sensori laser/ToF (tasso di aggiornamento 20 ms), ideali per applicazioni che richiedono un’elevata precisione in ambienti controllati.

vs. Stati Uniti - 100 moduli

Tabella 3: HC-SR04 vs US-100 (Ultrasuoni)

HC-SR04

Portata: 2cm–400cm (Abstract 2, 6)

Precisione: ±3mm (nominale, Abstract 2)

Tensione: Solo 5V (Abstract 6)

Caratteristica: Solo GPIO, senza compensazione della temperatura (Abstract 3)

Problema: Valori casuali oltre i 400cm (Abstract 6)

US-100

Portata: 2cm–450cm (Abstract 2, 3)

Precisione: ±2mm (migliore nei test, Abstract 3)

Tensione: 3,3V–5V (Abstract 3)

Caratteristica: Compensazione della temperatura (modalità UART), codici di errore (Abstract 6)

Svantaggi: Costo più elevato ($5–8), configurazione UART necessaria (Abstract 3)

La Table 3 mostra la portata avanzata di US-100 (450 cm), una migliore precisione (±2 mm) e la compatibilità di 3,3 V/5V contro la semplicità di HC-SR04 (solo GPIO), evidenziando la funzione di compensazione della temperatura di US-100 per Industrial Utilizzare a un costo più elevato ($ 5–8).

Tecniche e ottimizzazioni avanzate

Calibrazione multisensore

Per applicazioni più complesse, soprattutto in scenari in cui una vista a 360° è essenziale, l’utilizzo di più sensori HC – SR04 può essere un punto di svolta. In un’applicazione robotica, ad esempio, avere più sensori HC – SR04 posizionati strategicamente attorno al corpo del robot può consentirgli di rilevare gli ostacoli da tutte le direzioni, fornendo una visione completa dell’ambiente circostante.

Tuttavia, quando si utilizzano più sensori, l’interferenza incrociata può diventare un problema significativo. Cross – Talk si verifica quando le onde ultrasoniche emesse da un sensore interferiscono con il funzionamento di un altro sensore. Ciò può portare a letture imprecise poiché i sensori possono interpretare erroneamente le onde interferenti come echi da ostacoli reali.

Per mitigare l’interferenza trasversale, è possibile utilizzare diverse tecniche. Un approccio è il tempo: multiplex i sensori. Ciò comporta l’attivazione dei sensori uno alla volta, con intervalli di tempo sufficienti tra ciascuna attivazione. Ad esempio, se si dispone di quattro sensori HC – SR04 su un robot, è possibile attivare il sensore 1, attendere che completi il ciclo di misurazione, quindi attivare il sensore 2 e così via. In questo modo, ti assicuri che le onde ultrasoniche di un sensore non si sovrappongano a quelle di un altro sensore, riducendo le possibilità di cross – talk.

Un’altra tecnica consiste nell’usare materiali di schermatura. Posizionare una barriera fisica, come un sottile foglio di metallo o un materiale fonoassorbente, tra i sensori può aiutare a bloccare le onde ultrasoniche da un sensore dal raggiungerne un altro. Questo può essere particolarmente utile in situazioni in cui i sensori sono posizionati in stretta vicinanza l’uno all’altro.

La calibrazione è fondamentale anche quando si utilizzano più sensori. Ogni sensore può avere caratteristiche leggermente diverse, come la sensibilità o l’angolo del fascio. Calibrando i sensori, puoi tenere conto di queste differenze e assicurarti che i dati di tutti i sensori siano coerenti. Ciò può comportare la misurazione della distanza da un oggetto noto con ciascun sensore e la regolazione delle letture in base alle differenze.

Filtraggio del rumore

In alcuni ambienti, le letture dell’HC – SR04 possono essere nervose, con piccole fluttuazioni della distanza misurata che possono essere causate da vari fattori come il rumore elettrico, le correnti d’aria minori o le interferenze da altri dispositivi elettronici vicini. Per risolvere questo problema, è possibile applicare tecniche di filtraggio di rumore.
Un metodo comunemente usato è il filtro della media mobile. Il filtro della media mobile funziona calcolando la media di una serie di letture consecutive della distanza. Ad esempio, invece di utilizzare una sola lettura a distanza, puoi prendere le ultime 5 letture e calcolarne la media. Questo appiana le letture nervose, poiché le piccole fluttuazioni tendono a annullarsi a vicenda quando si fa la media. In Python, l’implementazione di un semplice filtro medio mobile per le letture della distanza HC – SR04 potrebbe essere simile a questa:
				
					distance_readings = []
num_readings = 5

def moving_average_filter(new_distance):
    distance_readings.append(new_distance)
    if len(distance_readings) > num_readings:
        distance_readings.pop(0)
    return sum(distance_readings) / len(distance_readings)
				
			

Un altro metodo di filtraggio efficace è il filtro mediano. Il filtro mediano sostituisce ogni lettura della distanza con il valore mediano di un insieme di letture consecutive. La mediana è meno sensibile a valori estremi o valori anomali rispetto alla media. Ad esempio, se si dispone di un set di 5 letture a distanza [20, 22, 18, 50, 21], il valore mediano è 21. Utilizzando il filtro mediano, il valore anomalo di 50 non influirà in modo significativo sul risultato filtrato. In Arduino, l’implementazione di un filtro mediano potrebbe essere la seguente:

				
					const int numReadings = 5;
int readings[numReadings];
int readIndex = 0;
int total = 0;
int averageDistance = 0;

void addReading(int newReading) {
  total = total - readings[readIndex];
  readings[readIndex] = newReading;
  total = total + readings[readIndex];
  readIndex = readIndex + 1;

  if (readIndex >= numReadings) {
    readIndex = 0;
  }
}

int getMedian() {
  int sortedReadings[numReadings];

  for (int i = 0; i < numReadings; i++) {
    sortedReadings[i] = readings[i];
  }

  for (int i = 0; i < numReadings - 1; i++) {
    for (int j = i + 1; j < numReadings; j++) {
      if (sortedReadings[i] > sortedReadings[j]) {
        int temp = sortedReadings[i];
        sortedReadings[i] = sortedReadings[j];
        sortedReadings[j] = temp;
      }
    }
  }

  return sortedReadings[numReadings / 2];
}
				
			

Modalità di lavoro personalizzate

Alcune delle versioni più recenti del modulo sensore a ultrasuoni HC – SR04 offrono maggiore flessibilità grazie a modalità di lavoro personalizzate. Queste modalità possono essere configurate tramite impostazioni di resistenze, consentendo diversi protocolli di comunicazione e caratteristiche operative.
Una di queste modalità è la modalità GPIO (General – Purpose Input/Output), che è la modalità standard per la maggior parte delle applicazioni di base. In questa modalità, il modulo funziona come descritto nelle sezioni precedenti, con i pin Trig ed Echo utilizzati per attivare la misurazione della distanza e ricevere il segnale di eco, rispettivamente.

Tuttavia, sono disponibili anche modalità UART (Universal Asynchronous Receiver/Transmitter) e I2C (Inter – Integrated Circuit) su alcune versioni HC – SR04. In modalità UART, il modulo può comunicare con un microcontrollore utilizzando la comunicazione seriale. Questo può essere utile in applicazioni in cui è preferibile un protocollo di comunicazione seriale più standardizzato, come in alcuni sistemi di controllo industriale o quando si integra con dispositivi con interfacce UART integrate.

La modalità I2C, d’altra parte, consente la comunicazione su un bus I2C. Questo è vantaggioso in configurazioni multi – dispositivo in cui più sensori o componenti devono comunicare con un singolo microcontrollore. Il bus I2C consente un utilizzo più efficiente dei pin del microcontrollore, poiché più dispositivi possono condividere lo stesso bus a due fili (SDA – Serial Data Line e SCL – Serial Clock Line).

Per configurare il modulo per queste modalità personalizzate, è necessario fare riferimento alla documentazione del modulo per determinare i valori di resistenza appropriati. Ad esempio, per abilitare la modalità UART, potrebbe essere necessario collegare una resistenza specifica tra due pin sul modulo. Una volta che le resistenze sono configurate correttamente, il modulo può essere programmato per comunicare nella modalità desiderata. Ciò può comportare la scrittura di codice diverso nel microcontrollore per gestire i protocolli di comunicazione UART o I2C. Ad esempio, in un progetto Raspberry Pi che utilizza l’HC – SR04 configurato con I2C, si utilizzerebbe la libreria smbus in Python per comunicare con il sensore tramite il bus I2C.

HC-SR04: temporizzazione, livelli logici e fonti di errore

HC-SR04 stima la distanza dal tempo di andata e ritorno di un impulso ultrasonico con distanza = tempo eco × velocità del suono / 2. Le varianti possono differire; verificare alimentazione e livello Echo e adattare un’uscita da 5 V prima di un ingresso solo 3,3 V.

  • Generare l’impulso: fornire la durata richiesta dal modulo e misurare l’Echo restituito.
  • Impostare un limite: smettere di attendere senza eco per non bloccare il programma.
  • Compensare la velocità: la temperatura cambia la conversione e l’aria in moto aggiunge errore.
  • Rispettare la geometria: superfici morbide, inclinate, strette o vicine assorbono o deviano l’impulso.
  • Evitare interferenze: alternare più sensori e scartare salti impossibili con filtro limitato.

Conclusione

Il modulo sensore a ultrasuoni HC – SR04 rimane un elemento fondamentale nei progetti di elettronica grazie alla sua convenienza, facilità d’uso e versatilità. Padroneggiando il suo principio di funzionamento, l’interfaccia con microcontrollori popolari ed esplorando applicazioni creative, puoi sbloccare il suo pieno potenziale per tutto, dalle misurazioni di base della distanza a complessi sistemi IoT. Hai domande o idee di progetto? Condividile con noi tramite il modulo galleggiante!

Informazioni sull'autore

Picture of Aidan Taylor
Aidan Taylor

Sono Aidan Taylor e ho oltre 10 anni di esperienza nel campo del reverse engineering PCB, progettazione di PCB e sblocco IC.

Condividi

Post consigliati

Hai bisogno di aiuto?

Torna in alto

Instant Quote

Preventivo immediato