Moduli sensore a ultrasuoni HC-SR04

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:

Operating Voltage
+5V DC (4.5V to 5.5V)
Operating Current
~15mA (Standby: ~2mA)
Range
2cm to 400cm (0.8" to 13ft)
Accuracy
±3mm (Best case, varies with environment)
Resolution
0.3cm (1mm theoretically possible with calibration)
Angle of Detection
~15° cone angle
Trigger Input Signal
10μs HIGH pulse to initiate ranging
Echo Output Signal
Pulse width proportional to distance: 1μs = 0.017cm (based on sound speed 340m/s)
Maximum Frequency
40kHz ultrasonic frequency
Measurement Cycle
≥60ms (to avoid interference between measurements)
Operating Temperature
-15°C to +60°C (5°F to 140°F)
Dimensions
45mm × 20mm × 15mm (sensor module)
Weight
~5g (module only)

Spiegazione:

  1. Rango: El HC – SR04 tiene un rango de operación que abarca desde 2 cm hasta 400 cm (0.8 in a 157 in). Este rango relativamente amplio lo hace adecuado para una variedad de aplicaciones. Por ejemplo, en un proyecto de robótica a pequeña escala donde el robot necesita navegar en una habitación, el rango de 2 – 400 cm puede detectar eficazmente los muebles cercanos o las paredes. En una aplicación industrial a mayor escala, se puede utilizar para medir la distancia entre componentes de maquinaria dentro de este rango. Sin embargo, es importante tener en cuenta que la precisión puede variar ligeramente en los extremos de este rango.
  1. Resolución: Con una resolución de 0.3 cm, el HC – SR04 puede proporcionar mediciones de distancia bastante precisas. Este nivel de precisión es suficiente para la mayoría de las aplicaciones de aficionados y muchas aplicaciones industriales. En un proyecto relacionado con la impresión 3D donde el sensor se utiliza para detectar la distancia al lecho de impresión para el autonivelado, la resolución de 0.3 cm puede garantizar que el cabezal de la impresora esté a la altura correcta sobre el lecho, lo que resulta en impresiones de alta calidad.
  1. Fuente de Alimentación: Funciona con una fuente de alimentación de 5V DC. Durante el funcionamiento, consume una corriente de funcionamiento de 15mA, lo que representa un consumo de energía relativamente bajo. En modo de espera, el consumo de corriente es aún menor, menos de 2mA. Esto lo convierte en una opción eficiente en términos de energía para proyectos con batería. Por ejemplo, en un nodo de sensor IoT con batería que utiliza el HC – SR04 para la detección de distancia, el bajo consumo de energía garantiza que la batería pueda durar un período prolongado.
  1. Ángulo de Operación: El ángulo de operación del HC – SR04 es menor de 15°. Esto significa que el sensor tiene un campo de visión relativamente estrecho. Es más eficaz para detectar obstáculos que están directamente al frente. En un sistema de seguridad para el hogar inteligente donde el sensor se utiliza para detectar intrusos que se acercan a una puerta, el ángulo de operación estrecho permite una detección enfocada de objetos que se dirigen directamente hacia el sensor, reduciendo las falsas alarmas de objetos en el área periférica.
  1. Interfaz: El módulo cuenta con una interfaz de 4 pines, que incluye los pines VCC, GND, Trig y Echo. Este sencillo diseño de interfaz facilita la conexión a varios microcontroladores y otros componentes electrónicos.

Diagrama de Pines Explicado

Pin 1
Label
VCC
Function
Power Supply (Positive)
Voltage
5V DC
Connection
Arduino: 5V
Raspberry Pi: 5V (Common ground with module)
Pin 2
Label
Trig (Trigger)
Function
Trigger Input
▶ 10μs High Pulse to Start Measurement
▶ Low Level to Reset
Connection
Arduino: Any Digital Pin (e.g., D2)
Raspberry Pi: Any GPIO (e.g., GPIO17)
Pin 3
Label
Echo
Function
Echo Output
▶ High Duration = Round-Trip Time of Ultrasonic Waves
▶ Max High Time: 38ms (Timeout for No Obstacle)
Connection
Arduino: Any Digital Pin (e.g., D3)
Raspberry Pi: GPIO with **Voltage Divider** (5V→3.3V)
⚠️ Direct 5V Echo to Raspberry Pi may damage GPIO! Use 1kΩ + 2kΩ voltage divider.
Pin 4
Label
GND
Function
Power Ground (Common Ground)
Connection
Arduino/GND
Raspberry Pi/GND

Explicación:

El pin VCC es responsable de alimentar el módulo. Conectarlo a una fuente de alimentación estable de 5V, preferiblemente desde la salida de 5V del microcontrolador, garantiza que el módulo funcione correctamente. Un suministro de energía estable es crucial para lecturas precisas. Si el suministro de energía es inestable, puede provocar pulsos ultrasónicos inconsistentes o la interpretación errónea de los ecos, lo que resulta en cálculos de distancia inexactos.
Pinul GND furnizează conexiunea de împământare necesară. Completează circuitul electric și ajută la menținerea unei tensiuni de referință stabile pentru modul. Fără o conexiune de împământare corespunzătoare, modulul poate să nu funcționeze deloc sau poate produce rezultate eronate. Într-un proiect bazat pe Arduino, pinul GND al HC-SR04 este de obicei conectat la pinul GND al plăcii Arduino pentru a asigura o referință comună de împământare.
Pinul Trig este locul de unde începe magia. Când un impuls de nivel înalt de 10µs este trimis la acest pin, acesta declanșează transmițătorul ultrasonic pentru a emite o explozie de 8 impulsuri de unde ultrasonice de 40kHz. Într-un proiect Raspberry Pi bazat pe Python, puteți utiliza biblioteca GPIO (General-Purpose Input/Output) pentru a genera acest impuls de nivel înalt de 10µs. Acest simplu mecanism de intrare digitală permite controlul ușor al procesului de măsurare a distanței.

The Echo pin is the key to obtaining the distance information. Once the ultrasonic waves are sent out, the Echo pin goes high. It remains high until the reflected waves are received by the ultrasonic receiver. The duration for which the Echo pin is high is directly proportional to the time it takes for the ultrasonic waves to travel to the obstacle and back. By measuring this time duration, we can calculate the distance to the obstacle using the formula Distance ( cm ) = Time ( μs ) × 0.0343 2 . In a C++-based Arduino project, you can use the pulseIn() function to measure the duration of the high-level pulse on the Echo pin.

Componente de bază și principiu de funcționare

Componente cheie

Pentru a înțelege cu adevărat cum funcționează modulul senzorului ultrasonic HC-SR04, este esențial să vă familiarizați mai întâi cu componentele sale de bază. Fiecare parte joacă un rol distinct și crucial în funcționarea generală a modulului.

  1. Transmițător ultrasonic: Această componentă este responsabilă pentru primul pas în procesul de măsurare a distanței. Emite unde ultrasonice la o frecvență de 40kHz. Aceste unde de înaltă frecvență sunt inaudibile pentru urechea umană, dar sunt cheia funcționării senzorului. Când este declanșat, transmițătorul emite aceste unde în mediul înconjurător. Gândiți-vă la el ca la un difuzor puternic care emite unde sonore la o frecvență cu mult peste ceea ce putem auzi. Într-o aplicație robotică, de exemplu, transmițătorul ultrasonic de pe un robot ar emite aceste unde de 40kHz în direcția în care se deplasează robotul, pregătindu-se să detecteze orice obstacole pe calea sa.
  1. Receptor ultrasonic: După cum sugerează și numele, sarcina receptorului ultrasonic este de a capta undele ultrasonice care au fost reflectate înapoi de la orice obstacole din raza senzorului. După ce transmițătorul emite undele, acestea călătoresc prin aer până când lovesc un obiect. Undele apoi sar înapoi, iar sarcina receptorului este de a capta aceste unde reflectate. Este ca un microfon foarte sensibil care poate detecta cele mai slabe ecouri ale undelor ultrasonice. Într-un sistem de automatizare a locuinței în care HC-SR04 este utilizat pentru a detecta prezența unei persoane într-o cameră, receptorul ar capta undele care se reflectă de pe corpul persoanei.
  1. Circuit de control: Acesta este creierul din spatele operațiunii. Circuitul de control gestionează întreaga secvență de procesare a semnalului. Coordonează acțiunile transmițătorului și ale receptorului. Când primește un semnal de declanșare, instruiește transmițătorul să emită undele ultrasonice. Apoi, monitorizează cu atenție receptorul pentru undele reflectate care vin. Odată ce undele sunt primite, circuitul de control calculează timpul necesar undelor pentru a călători până la obstacol și înapoi. Pe baza acestui timp și a vitezei cunoscute a sunetului în aer, calculează distanța până la obstacol. Într-un mediu industrial, circuitul de control dintr-un HC-SR04 utilizat pentru utilaje automatizate ar gestiona cu precizie aceste operațiuni pentru a asigura măsurători precise ale distanței pentru funcționarea corespunzătoare a utilajelor.

كيف يعمل

الآن بعد أن تعرفنا على المكونات الرئيسية، دعنا نلقي نظرة خطوة بخطوة على كيفية قياس مستشعر HC-SR04 للمسافة فعليًا.

إشارة التشغيل:

تبدأ العملية بإشارة التشغيل. عندما يتم تطبيق نبضة عالية تبلغ 10 ميكروثانية على دبوس Trig (Trigger) الخاص بوحدة HC-SR04، فإنه يشبه إعطاء المستشعر أمر “ابدأ”. تبدأ هذه النبضة الكهربائية القصيرة ولكنها مهمة سلسلة المسافة بأكملها. على سبيل المثال، في مشروع يعتمد على Arduino، ستستخدم سطرًا بسيطًا من التعليمات البرمجية لإرسال نبضة عالية تبلغ 10 ميكروثانية إلى دبوس Trig الخاص بـ HC-SR04، لإخباره ببدء عملية القياس.

انتشار الموجة:

بمجرد التشغيل، يبدأ جهاز الإرسال بالموجات فوق الصوتية في العمل. يرسل الوحدة دفعة من 8 نبضات بالموجات فوق الصوتية بتردد 40 كيلو هرتز. هذه النبضات تشبه سلسلة من “الرصاصات الصوتية” غير المرئية التي تنطلق في البيئة. بعد إرسال هذه النبضات، يدخل الوحدة في حالة انتظار، في انتظار بصبر وصول الموجات إلى عائق والارتداد مرة أخرى. في سيناريو واقعي، إذا كنت تستخدم HC-SR04 لقياس المسافة إلى حائط في غرفة، فسوف تسافر 8 نبضات نحو الحائط، وتنتشر في شكل مخروطي بزاوية واسعة نسبيًا تبلغ حوالي 15 درجة.

اكتشاف الصدى:

دبوس الصدى هو المفتاح لاكتشاف الموجات المنعكسة. بمجرد إرسال الموجات فوق الصوتية، يرتفع دبوس الصدى. هذه هي طريقة المستشعر للإشارة إلى أنه بدأ عملية القياس. ثم ينتظر عودة الموجات المنعكسة. عندما يلتقط جهاز الاستقبال بالموجات فوق الصوتية الموجات المنعكسة، ينخفض دبوس الصدى. يكون المدة التي يظل فيها دبوس الصدى مرتفعًا مساويًا لوقت السفر ذهابًا وإيابًا للموجات فوق الصوتية. في مشروع Raspberry Pi، ستستخدم دالة لقياس الوقت الذي يكون فيه دبوس الصدى مرتفعًا، وهو خطوة حاسمة في حساب المسافة.

حساب المسافة:

Distance Calculation: The final step is to calculate the distance to the obstacle. The formula for calculating the distance in centimeters is Distance (cm) = Time ((μs)) × 0.0343 2 . The factor 0.0343 comes from the speed of sound in air, which is approximately 343 m/s. Since the waves travel to the obstacle and back (a round-trip), we divide the total distance traveled by 2 to get the one-way distance to the obstacle. For example, if the time measured for the Echo pin to be high is 2000μs, then the distance would be calculated as 2000 × 0.0343 2 = 34.3 cm. This calculation is the same whether you're using the HC-SR04 in a simple hobbyist project or a complex industrial application.

التكامل مع المتحكمات الدقيقة الشائعة

دليل إعداد Arduino

مخطط الأسلاك

توصيل وحدة مستشعر الموجات فوق الصوتية HC-SR04 بـ Arduino هو عملية بسيطة. إليك الطريقة:

  • VCC: قم بتوصيل دبوس VCC الخاص بـ HC-SR04 بدبوس 5V الخاص بـ Arduino. يوفر هذا الطاقة اللازمة لوحدة المستشعر. يضمن مصدر الطاقة 5 فولت المستقر من Arduino أن يعمل المستشعر على النحو الأمثل.
  • GND: يجب توصيل دبوس GND (الأرضي) الخاص بـ HC-SR04 بدبوس GND الخاص بـ Arduino. وهذا يؤسس مرجع أرضي مشترك لكل من المستشعر و Arduino، وهو أمر بالغ الأهمية للتواصل الكهربائي المناسب.
  • Trig: قم بتوصيل دبوس Trig (Trigger) الخاص بـ HC-SR04 بالدبوس الرقمي 2 الخاص بـ Arduino. هذا هو الدبوس الذي سيرسل منه Arduino نبضة عالية تبلغ 10 ميكروثانية لتشغيل عملية قياس المسافة في HC-SR04.
  • Echo: يتم توصيل دبوس الصدى الخاص بـ HC-SR04 بالدبوس الرقمي 3 الخاص بـ Arduino. سيقرأ Arduino النبضة عالية المدة على هذا الدبوس لحساب المسافة إلى العائق.
هنا مخطط أسلاك بسيط يوضح التوصيلات:
				
					       HC - SR04         Arduino
         VCC ------------ 5V
         GND ------------ GND
         Trig ------------ Digital Pin 2
         Echo ------------ Digital Pin 3
				
			

مثال على التعليمات البرمجية

Aquí hay un ejemplo básico de código de Arduino para comenzar a medir la distancia usando el 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("Distance: ");
  Serial.print(distance);
  Serial.println(" cm");

  delay(500);
}
				
			
En la función setup, primero inicializamos la comunicación serial a una velocidad de baudios de 9600, lo que nos permite ver las lecturas de distancia en el Monitor Serial de Arduino. Luego, configuramos el pin trig como un pin de salida y el pin eco como un pin de entrada.
En la función loop, comenzamos configurando el pin trig en LOW durante 2 microsegundos para asegurar un inicio limpio. Luego, lo configuramos en HIGH durante 10 microsegundos para activar el transmisor ultrasónico en el HC – SR04. Después de eso, volvemos a configurar el pin trig en LOW.
La función pulseIn se utiliza entonces para medir la duración del pulso de nivel alto en el pin eco. Esta duración representa el tiempo que tardaron las ondas ultrasónicas en viajar hasta el obstáculo y regresar. Luego, calculamos la distancia usando la fórmula distancia = duración * 0.0343 / 2, donde 0.0343 es la velocidad del sonido en cm/µs y dividimos por 2 porque las ondas viajan hasta el obstáculo y regresan.
Finalmente, imprimimos la distancia calculada en el Monitor Serial y agregamos un retardo de 500 milisegundos antes de la siguiente medición.

In the setup function, we first initialize the serial communication at a baud rate of 9600, which allows us to view the distance readings in the Arduino Serial Monitor. Then, we set the trigPin as an output pin and the echoPin as an input pin.

In the loop function, we start by setting the trigPin to LOW for 2 microseconds to ensure a clean start. Then, we set it HIGH for 10 microseconds to trigger the ultrasonic transmitter in the HC-SR04. After that, we set the trigPin back to LOW.

The pulseIn() function is then used to measure the duration of the high-level pulse on the echoPin. This duration represents the time it took for the ultrasonic waves to travel to the obstacle and back. We then calculate the distance using the formula distance = duration * 0.0343 / 2, where 0.0343 is the speed of sound in cm/μs and we divide by 2 because the waves travel to the obstacle and back.

Finally, we print the calculated distance to the Serial Monitor and add a 500-millisecond delay before the next measurement.

Consejos

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

When using the pulseIn() function, it's important to note that it measures the duration of a pulse. In the case of the HC-SR04, this is the time the Echo pin is high. To ensure accurate measurements, make sure there are no other electrical interferences that could affect the pulse duration. Also, be aware that if the obstacle is too far away, the pulse may time out. You can set a timeout value in the pulseIn() function to handle such cases gracefully. For example, long duration = pulseIn(echoPin, HIGH, 20000); where 20000 is the timeout value in microseconds.

  1. Evitar Fuentes de Ruido:

Las ondas ultrasónicas pueden verse afectadas por fuertes fuentes de ruido. Al colocar el HC – SR04 en su proyecto, evite áreas con sonido de alta intensidad, como cerca de altavoces o en un entorno industrial muy ruidoso. El ruido puede interferir con las ondas ultrasónicas emitidas por el sensor, lo que lleva a mediciones de distancia inexactas. Si debe usar el sensor en un área ruidosa, considere usar materiales o gabinetes que absorban el sonido para proteger el sensor del ruido.

Integración con Raspberry Pi

Precaución con el Voltaje

Una de las consideraciones clave al integrar el HC – SR04 con una Raspberry Pi es el nivel de voltaje. Los pines GPIO (Entrada/Salida de Propósito General) en una Raspberry Pi solo pueden aceptar un voltaje máximo de 3.3V. Sin embargo, el HC – SR04 funciona con 5V, y el pin Echo del HC – SR04 puede emitir una señal de 5V. Conectar una señal de 5V directamente a un pin GPIO de la Raspberry Pi puede dañar la Pi.

To solve this issue, you can use a voltage divider circuit. A simple voltage divider using a 1kΩ and a 2kΩ resistor can be used to convert the 5V output from the Echo pin of the HC-SR04 to a 3.3V-compatible signal for the Raspberry Pi. The formula for calculating the output voltage V out of a voltage divider is V out = V in × R 2 R 1 + R 2 , where V in is the input voltage (5V in this case), R 1 is the first resistor (1kΩ), and R 2 is the second resistor (2kΩ). Plugging in the values, we get V out = 5 × 2000 1000 + 2000 3.33 V , which is within the safe range for the Raspberry Pi GPIO pin.

Cableado

  • VCC: Conecte el pin VCC del HC – SR04 al pin de 5V en la Raspberry Pi. Esto enciende el módulo del sensor HC – SR04.

  • GND: El pin GND del HC – SR04 debe conectarse al pin GND en la Raspberry Pi para establecer una tierra común.
  • Trig: Conecte el pin Trig del HC – SR04 a GPIO 17 en la Raspberry Pi. La Raspberry Pi utilizará este pin para enviar el pulso de activación de nivel alto de 10µs al HC – SR04.
  • Echo: El pin Echo del HC – SR04, después de pasar por el circuito divisor de voltaje (resistencias de 1kΩ y 2kΩ), se conecta a GPIO 27 en la Raspberry Pi. La Raspberry Pi leerá el pulso de alta duración en este pin para calcular la distancia.
El cableado se puede resumir de la siguiente manera:
				
					       HC - SR04         Raspberry Pi
         VCC ------------ 5V
         GND ------------ GND
         Trig ------------ GPIO 17
         Echo (through voltage divider) ------------ 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

# Set the GPIO mode
GPIO.setmode(GPIO.BCM)

# Define the pins
TRIG = 17
ECHO = 27

# Set up the pins
GPIO.setup(TRIG, GPIO.OUT)
GPIO.setup(ECHO, GPIO.IN)

def measure_distance():
    # Send a 10μs high - level pulse to trigger the sensor
    GPIO.output(TRIG, True)
    time.sleep(0.00001)
    GPIO.output(TRIG, False)

    # Wait for the echo to start
    while GPIO.input(ECHO)==0:
        pulse_start = time.time()

    # Wait for the echo to end
    while GPIO.input(ECHO)==1:
        pulse_end = time.time()

    pulse_duration = pulse_end - pulse_start
    distance = pulse_duration * 17150  # Speed of sound in cm/s divided by 2
    distance = round(distance, 2)

    return distance

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

except KeyboardInterrupt:
    print("Measurement stopped by User")
    GPIO.cleanup()

				
			

In this code, we first import the necessary libraries, RPi.GPIO for controlling the GPIO pins on the Raspberry Pi and time for adding delays. We then set the GPIO mode to BCM (Broadcom SOC channel numbering). We define the TRIG and ECHO pins and set up the TRIG pin as an output and the ECHO pin as an input.

The measure_distance function is where the magic happens. It sends a 10μs high - level pulse to the TRIG pin to trigger the HC - SR04. Then, it waits for the ECHO pin to go high (indicating the start of the echo) and records the start time. It then waits for the ECHO pin to go low (indicating the end of the echo) and records the end time. The time difference between the start and end times is used to calculate the distance. The distance is calculated by multiplying the pulse duration by the speed of sound in cm/s (34300 cm/s) and dividing by 2 (since the sound travels to the obstacle and back).

In the try block, we continuously measure the distance and print it to the console every second. If the user presses Ctrl + C (KeyboardInterrupt), the program cleans up the GPIO pins and exits gracefully.

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("Distance: ");
  Serial.print(distance);
  Serial.println(" cm");

  delay(500);
}

				
			

In the setup function, we initialize the serial communication at a baud rate of 115200. We then set the trigPin as an output pin and the echoPin as an input pin.

In the loop function, the process of triggering the HC - SR04 and measuring the distance is the same as in the Arduino code. We send a 10μs high - level pulse to the trigPin to trigger the sensor, measure the duration of the high - level pulse on the echoPin using pulseIn , and calculate the distance.

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 è un’applicazione affascinante e pratica del modulo sensore ultrasonico HC – SR04. La sua funzione principale è quella di navigare nel suo ambiente in modo sicuro rilevando gli ostacoli sul suo percorso. Ciò si ottiene utilizzando più sensori HC – SR04 posizionati strategicamente sul robot.

I sensori sono configurati per rilevare gli ostacoli da diverse direzioni. Ad esempio, un set di sensori è posizionato nella parte anteriore del robot per rilevare eventuali ostacoli direttamente sul suo percorso in avanti. Inoltre, i sensori sono posizionati sui lati del robot per rilevare gli ostacoli che potrebbero avvicinarsi dai lati. Quando viene rilevato un ostacolo, il sistema di controllo del robot, spesso basato su un microcontrollore come Arduino, calcola la distanza dall’ostacolo utilizzando i dati dai sensori HC – SR04.

Sulla base di queste informazioni sulla distanza, il sistema di controllo quindi determina l’azione appropriata da intraprendere per evitare l’ostacolo. Ciò di solito comporta la sterzata 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 potrebbe istruire il motore sinistro a rallentare o invertire la marcia mentre il motore destro continua a funzionare a velocità normale. Ciò fa sì che il robot giri a destra, lontano dall’ostacolo.

Per costruire questo progetto, avrai bisogno di diversi componenti chiave. Un Arduino funge da cervello dell’operazione. Elabora i dati ricevuti dai sensori HC – SR04 e invia comandi ai motori. Sono necessari motori per azionare le ruote del robot, consentendogli di muoversi. Un driver del motore, come l’L298N, è essenziale per controllare i motori. L’L298N può gestire i requisiti di corrente relativamente elevati dei motori e consente all’Arduino di controllare efficacemente la velocità e la direzione dei motori. E ovviamente, sono necessari più sensori HC – SR04 per il rilevamento anteriore e laterale. Combinando questi componenti e scrivendo il codice appropriato per controllarli, puoi creare un robot che evita gli ostacoli completamente funzionale.

Cestino intelligente

{“0″:”
La papelería inteligente es un excelente ejemplo de cómo el módulo de sensor ultrasónico HC – SR04 se puede utilizar para mejorar la funcionalidad de los objetos cotidianos. En esta aplicación, la papelería inteligente está diseñada para tener una función de tapa que se abre automáticamente. Esta función se activa por la presencia de una persona que se acerca a la papelería.

El sensor HC – SR04 está montado en la papelería de tal manera que puede detectar la distancia a cualquier objeto que haya delante. Cuando alguien se acerca a la papelería, el sensor mide la distancia entre la papelería y la persona. Si la distancia medida es inferior a un umbral preestablecido (por ejemplo, 20 cm), indica que una persona está lo suficientemente cerca de la papelería como para usarla. En este punto, el sensor envía una señal a un motor de servo.

El motor de servo está conectado a la tapa de la papelería y es responsable de abrirla y cerrarla. Cuando recibe la señal del sensor HC – SR04, el motor de servo gira para abrir la tapa. Esta operación sin contacto no solo es conveniente para el usuario, sino que también ayuda a mantener la papelería limpia e higiénica, ya que no es necesario tocar la tapa directamente.

Al escribir el código para este proyecto, establecer el umbral de distancia es un paso crucial. Debe calibrar cuidadosamente este valor en función de los requisitos específicos de su papelería inteligente. Si el umbral es demasiado alto, la tapa puede abrirse innecesariamente cuando alguien todavía está a cierta distancia de la papelería. Por otro lado, si el umbral es demasiado bajo, la tapa puede no abrirse a tiempo cuando el usuario se acerca. Un umbral de distancia bien calibrado garantiza que la papelería inteligente funcione de forma óptima.

Monitor de Nivel de Agua

モニター水位は、HC – SR04超音波センサーモジュールの実用的な応用であり、特にタンク内の水位を追跡する必要がある状況で役立ちます。これは、家庭用の貯水タンク、工業用の貯水タンク、さらには水槽の場合でもかまいません。

HC – SR04センサーは、水タンクの上に取り付けられています。下向きに超音波を水面に向けて放射します。これらの波は空気中を移動し、水面に当たると跳ね返ります。センサーは、波が水面まで移動し戻るのにかかる時間を測定します。空気中での音速が既知であるため、センサーから水面までの距離を計算できます。

多くの場合、水位モニターはIoT(Internet of Things)システムと統合されています。たとえば、Blynkアプリに接続できます。計算された水位データはアプリに送信され、ユーザーは水位をリモートで監視できます。これは、プロセスの正常な機能にとって水位のリアルタイム監視が重要な工業用途に特に役立ちます。

水位モニターを設定する際に考慮すべき重要な側面は、キャリブレーションです。センサーがタンクの底から一定の高さに取り付けられているため、この高さは距離計算に考慮する必要があります。たとえば、センサーがタンクの底から50cmの高さに取り付けられており、センサーから水面までの計算距離が30cmの場合、タンク内の実際の水位は20cmです。センサーの高さを正確にキャリブレーションし、必要な計算を実行することにより、水位モニターが正確で信頼性の高い読み取り値を提供することを保証できます。

一般的な問題のトラブルシューティング

一貫性のない読み取り値

HC – SR04超音波センサーモジュールを使用するユーザーが遭遇する最も一般的な問題の1つは、一貫性のない読み取り値です。これは、プロジェクトの正確な距離測定に依存している場合、特にイライラする可能性があります。

原因:多重反射または不安定な電力

多重反射は、センサーから放射された超音波が受信器に到達する前に複数の表面で跳ね返る場合に発生します。これは、多くのオブジェクトや大きな反射面がある複雑な環境で発生する可能性があります。たとえば、家具や鏡が多くの部屋では、超音波が受信器によって検出される前に家具、壁、鏡で跳ね返る可能性があります。これにより、センサーが意図したオブジェクトまでの距離を正確に計算することが難しくなり、一貫性のない読み取り値が結果として生じます。

不安定な電力も原因の1つです。HC – SR04への電源が安定していない場合、センサーが誤動作する可能性があります。電圧の変動は、超音波トランスミッターと受信機の適切な機能に影響を与え、不規則な距離測定につながる可能性があります。たとえば、バッテリーの残量が少なくなっている場合や、電圧調整が不十分な電源アダプターを使用している場合、センサーは一貫した5Vの電源が供給されない可能性があり、パフォーマンスに影響を与える可能性があります。

修正:センサー用の保護ケースを追加し、調整された5V電源を使用する

添加保护外壳以保护传感器可以帮助减少多径反射的影响。外壳可以设计成以更集中的方式引导超声波,从而减少波从不需要的表面反弹的机会。一个带有前面狭窄开口的简单纸板或塑料外壳可能非常有效。

使用受规整的 5V 电源对于稳定运行至关重要。具有内置电压调节功能的电源,例如高质量的墙壁适配器或电压调节电源模块,可确保 HC – SR04 接收到一致的 5V。这有助于消除因电压波动引起的问题,并提高传感器读数的整体准确性和一致性。

无输出信号

HC – SR04 无法产生输出信号是另一个常见问题。这可能是多种问题中的一种迹象,重要的是系统地检查每个可能性,以使传感器再次工作。
检查:验证接线(尤其是 VCC/GND)、树莓派的电压分压器以及触发/回波时间的代码逻辑
首先,仔细验证接线。确保 VCC 和 GND 引脚已正确连接到电源和地线。松动或不正确的连接可能会阻止传感器正常启动,或者可能导致电气短路,从而扰乱模块的正常运行。在许多情况下,简单的目视检查和重新连接电线可以解决问题。

如果您使用 HC – SR04 与树莓派,请不要忘记检查电压分压器电路。如前所述,树莓派的 GPIO 引脚只能处理 3.3V,因此通常使用电压分压器将 HC – SR04 的回波引脚的 5V 输出转换为与 3.3V 兼容的信号。如果电压分压器组件(通常是电阻器)损坏或连接不正确,则可能导致树莓派无法接收到输出信号。

触发/回波时间的代码逻辑也是需要检查的关键领域。确保代码向 Trig 引脚发送正确的触发信号(10微秒的高电平脉冲),并且它正在正确测量回波引脚上高电平脉冲的持续时间。不正确的代码可能会阻止传感器被触发,或者可能导致微控制器错误解释回波信号,从而导致没有输出或错误的距离计算。例如,如果代码中的延迟时间设置不正确,则可能会扰乱传感器触发和读取回波的正确顺序。

超出范围的错误

超出范围的错误可能发生在 HC – SR04 传感器检测到的物体太靠近或太远离传感器时。这可能会导致您的项目中出现问题,尤其是在您的代码没有正确处理这种情况的情况下。
解决方案:实现超时(例如,对于没有回波的 38 毫秒)并在代码中优雅地处理 0 或 ∞ 值
实现超时机制在您的代码中是一种处理对象距离传感器太远,无法在合理时间内检测到回波的情况的有用方法。例如,如果在 38 毫秒内未收到回波,则表明对象超出了传感器的范围。在您的代码中,您可以设置一个计时器,该计时器在发送触发信号时开始,并在收到回波时停止。如果计时器在达到超时值之前未收到回波,您可以假设对象超出范围,并采取适当的操作,例如显示错误消息或设置默认距离值。

在代码中优雅地处理 0 或 ∞ (无穷大) 值也很重要。距离值为 0 可能表明传感器太靠近物体,低于其最小可检测范围。在这种情况下,您可能需要在代码中设置最小距离阈值并相应地调整距离值。同样,如果代码计算出的距离值非常大(接近无穷大),则很可能表明存在错误,例如回波检测或计算不正确的问题。您的代码应能够优雅地处理这些情况,例如通过记录错误消息或尝试重新测量距离。

HC-SR04 与其他距离传感器

与红外传感器

Table 1: HC-SR04 (Ultrasonic) vs Infrared Sensors

HC-SR04

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

Accuracy: ±3mm (ideal conditions, Abstract 1)

Voltage: 5V (fixed, Abstract 1)

Pros: No light interference, longer range (Abstract 5)

Cons: Reduced near-range accuracy, ultrasonic noise sensitivity (Abstract 1)

Infrared

Range: Typically <100cm (Abstract 1, 5)

Accuracy: ±5mm–1cm (affected by color/material, Abstract 5)

Voltage: 3.3V–5V (flexible, Abstract 5)

Pros: Small size, low cost (Abstract 1)

Cons: Ambient light/color interference (Abstract 5)

表 1 突出了 HC-SR04 的鲁棒性长距离检测 (2 厘米 – 400 厘米) 与红外传感器的小尺寸/低成本之间的权衡,指出 HC-SR04 对光干扰的免疫性与红外传感器对环境光和材料颜色的脆弱性。

与激光传感器

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

HC-SR04

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

Accuracy: ±3mm (Abstract 4)

Update Rate: 60ms (Abstract 4)

Cost: ~$2–3 (Abstract 1)

Weakness: 15° cone angle, environmental noise (Abstract 1)

Laser/ToF (VL53L0X)

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

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

Update Rate: 20ms (faster, Abstract 4)

Cost: ~$10–15 (Abstract 1)

Strength: 5° narrow beam, interference-resistant (Abstract 3)

表 2 比较了 HC-SR04 的成本效益 ($2 – $3) 和宽范围 (400 厘米) 与激光/ToF 传感器的卓越精度 (±1 毫米) 和速度 (20 毫秒更新率),非常适合需要高精度在受控环境中的应用。

与 US - 100 模块

Table 3: HC-SR04 vs US-100 (Ultrasonic)

HC-SR04

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

Accuracy: ±3mm (nominal, Abstract 2)

Voltage: 5V only (Abstract 6)

Feature: GPIO-only, no temperature compensation (Abstract 3)

Issue: Random values beyond 400cm (Abstract 6)

US-100

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

Accuracy: ±2mm (better in tests, Abstract 3)

Voltage: 3.3V–5V (Abstract 3)

Feature: Temperature compensation (UART mode), error codes (Abstract 6)

Downside: Higher cost ($5–8), UART setup required (Abstract 3)

表 3 展示了 US-100 的增强范围 (450 厘米)、更好的精度 (±2 毫米) 和 3.3V/5V 兼容性与 HC-SR04 的简单性 (仅 GPIO),突出了 US-100 的温度补偿功能,适用于工业用途,但成本更高 ($5 – $8)。

高级技术和优化

多传感器校准

{“0″:”
Para aplicaciones más complejas, especialmente en escenarios donde una vista de 360° es esencial, el uso de múltiples sensores HC – SR04 puede ser un cambio radical. En una aplicación robótica, por ejemplo, tener múltiples sensores HC – SR04 estratégicamente ubicados alrededor del cuerpo del robot puede permitirle detectar obstáculos desde todas las direcciones, proporcionando una vista completa de su entorno.

Sin embargo, cuando se utilizan múltiples sensores, la interferencia de retardo cruzado puede convertirse en un problema importante. El retardo cruzado ocurre cuando las ondas ultrasónicas emitidas por un sensor interfieren con el funcionamiento de otro sensor. Esto puede provocar lecturas inexactas, ya que los sensores pueden malinterpretar las ondas de interferencia como ecos de obstáculos reales.

Para mitigar la interferencia de retardo cruzado, se pueden emplear varias técnicas. Un enfoque es el multiplexado temporal de los sensores. Esto implica activar los sensores uno a la vez, con intervalos de tiempo suficientes entre cada activación. Por ejemplo, si tiene cuatro sensores HC – SR04 en un robot, puede activar el sensor 1, esperar a que complete su ciclo de medición, luego activar el sensor 2, y así sucesivamente. Al hacer esto, se asegura de que las ondas ultrasónicas de un sensor no se superpongan a las de otro sensor, lo que reduce las posibilidades de retardo cruzado.

Otra técnica es utilizar materiales de blindaje. Colocar una barrera física, como una fina lámina de metal o un material absorbente de sonido, entre los sensores puede ayudar a bloquear las ondas ultrasónicas de un sensor para que no lleguen a otro. Esto puede ser especialmente útil en situaciones donde los sensores están colocados cerca uno del otro.

La calibración también es crucial cuando se utilizan múltiples sensores. Cada sensor puede tener características ligeramente diferentes, como sensibilidad o ángulo de haz. Al calibrar los sensores, puede tener en cuenta estas diferencias y garantizar que los datos de todos los sensores sean consistentes. Esto puede implicar medir la distancia a un objeto conocido con cada sensor y ajustar las lecturas en función de las diferencias.
“, “1”:”Filtrado de Ruido”, “2”:”
En algunos entornos, las lecturas del HC – SR04 pueden ser erráticas, con pequeñas fluctuaciones en la distancia medida que pueden ser causadas por varios factores, como ruido eléctrico, corrientes de aire menores o interferencias de otros dispositivos electrónicos cercanos. Para abordar este problema, se pueden aplicar técnicas de filtrado de ruido.

Un método comúnmente utilizado es el filtro de promedio móvil. El filtro de promedio móvil funciona calculando el promedio de una serie de lecturas de distancia consecutivas. Por ejemplo, en lugar de usar una sola lectura de distancia, puede tomar las últimas 5 lecturas y calcular su promedio. Esto suaviza las lecturas erráticas, ya que las pequeñas fluctuaciones tienden a cancelarse mutuamente cuando se promedian. En Python, la implementación de un filtro de promedio móvil simple para las lecturas de distancia del HC – SR04 podría verse así:
“, “3”:”

Otro método de filtrado eficaz es el filtro de mediana. El filtro de mediana reemplaza cada lectura de distancia con el valor mediano de un conjunto de lecturas consecutivas. La mediana es menos sensible a los valores extremos o atípicos en comparación con la media. Por ejemplo, si tiene un conjunto de 5 lecturas de distancia [20, 22, 18, 50, 21], el valor mediano es 21. Al utilizar el filtro de mediana, el valor atípico de 50 no afectaría significativamente el resultado filtrado. En Arduino, la implementación de un filtro de mediana podría ser la siguiente:

“, “4”:”Modos de Trabajo Personalizados”}

Noise Filtering

In some environments, the readings from the HC – SR04 may be jittery, with small fluctuations in the measured distance that can be caused by various factors such as electrical noise, minor air currents, or interference from other nearby electronics. To address this issue, noise – filtering techniques can be applied.

One commonly used method is the moving average filter. The moving average filter works by calculating the average of a series of consecutive distance readings. For example, instead of using a single distance reading, you can take the last 5 readings and calculate their average. This smooths out the jittery readings, as the small fluctuations tend to cancel each other out when averaged. In Python, the implementation of a simple moving – average filter for the HC – SR04 distance readings could look like this:
				
					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)

				
			

Another effective filtering method is the median filter. The median filter replaces each distance reading with the median value of a set of consecutive readings. The median is less sensitive to extreme values or outliers compared to the mean. For example, if you have a set of 5 distance readings [20, 22, 18, 50, 21], the median value is 21. By using the median filter, the outlier value of 50 would not significantly affect the filtered result. In Arduino, the implementation of a median filter could be as follows:

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

				
			

Custom Work Modes

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.

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!

Condividi con:

Torna in alto

Instant Quote