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.

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:
Spiegazione:
- 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.
- 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.
- 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.
- Á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.
- 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
Raspberry Pi: 5V (Common ground with module)
▶ 10μs High Pulse to Start Measurement
▶ Low Level to Reset
Raspberry Pi: Any GPIO (e.g., GPIO17)
▶ High Duration = Round-Trip Time of Ultrasonic Waves
▶ Max High Time: 38ms (Timeout for No Obstacle)
Raspberry Pi: GPIO with **Voltage Divider** (5V→3.3V)
Raspberry Pi/GND
Explicación:
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 . 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
- 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.
- 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.
- 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 . 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 cm. This calculation is the same whether you're using the HC-SR04 in a simple hobbyist project or a complex industrial application.
التكامل مع المتحكمات الدقيقة الشائعة
دليل إعداد 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
مثال على التعليمات البرمجية
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);
}
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
- 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.
- 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
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 of a voltage divider is , where is the input voltage (5V in this case), is the first resistor (1kΩ), and is the second resistor (2kΩ). Plugging in the values, we get , 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.
HC - SR04 Raspberry Pi
VCC ------------ 5V
GND ------------ GND
Trig ------------ GPIO 17
Echo (through voltage divider) ------------ GPIO 27
Código Python
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
Codice Arduino IDE
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.
Idee di progetto creative con HC-SR04
Robot che evita gli ostacoli
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
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センサーは、水タンクの上に取り付けられています。下向きに超音波を水面に向けて放射します。これらの波は空気中を移動し、水面に当たると跳ね返ります。センサーは、波が水面まで移動し戻るのにかかる時間を測定します。空気中での音速が既知であるため、センサーから水面までの距離を計算できます。
多くの場合、水位モニターはIoT(Internet of Things)システムと統合されています。たとえば、Blynkアプリに接続できます。計算された水位データはアプリに送信され、ユーザーは水位をリモートで監視できます。これは、プロセスの正常な機能にとって水位のリアルタイム監視が重要な工業用途に特に役立ちます。
水位モニターを設定する際に考慮すべき重要な側面は、キャリブレーションです。センサーがタンクの底から一定の高さに取り付けられているため、この高さは距離計算に考慮する必要があります。たとえば、センサーがタンクの底から50cmの高さに取り付けられており、センサーから水面までの計算距離が30cmの場合、タンク内の実際の水位は20cmです。センサーの高さを正確にキャリブレーションし、必要な計算を実行することにより、水位モニターが正確で信頼性の高い読み取り値を提供することを保証できます。




