این مقاله راهنمای کاملی در مورد سنسور آلتراسونیک HC-SR04 است. نحوه عملکرد آن را توضیح می دهیم، برخی از ویژگی های آن را به شما نشان می دهیم و نمونه پروژه آردوینو را به اشتراک می گذاریم که می توانید برای ادغام در پروژه های خود استفاده کنید. ما یک شماتیک در مورد نحوه سیم کشی حسگر اولتراسونیک و یک نمونه برنامه با آردوینو ارائه می دهیم.

توضیحات سنسور آلتراسونیک HC-SR04
سنسور آلتراسونیک HC-SR04 از امواج سونار برای تعیین فاصله تا یک جسم استفاده می کند. این سنسور از 2 سانتیمتر تا 400 سانتیمتر (0.8 اینچ تا 157 اینچ) با دقت 0.3 سانتیمتر (0.1 اینچ) میخواند که برای اکثر پروژههای الکترونیک خوب است. علاوه بر این، این ماژول خاص با ماژول های فرستنده و گیرنده اولتراسونیک ارائه می شود.
تصویر زیر سنسور آلتراسونیک HC-SR04 را نشان می دهد.

تصویر بعدی سمت دیگر سنسور را نشان می دهد.

خصوصیات سنسور آلتراسونیک HC-SR04
در اینجا لیستی از برخی از ویژگیها و مشخصات سنسور اولتراسونیک HC-SR04 آمده است—برای اطلاعات بیشتر، باید به دیتاشیت سنسور مراجعه کنید:
- تغذیه: + 5 ولت DC
- جریان خاموش: <2 میلی آمپر
- جریان کاری: 15 میلی آمپر
- زاویه اثر: <15 درجه
- فاصله: 2 سانتی متر – 400
- سانتی متر / 1 اینچ – 13 فوت
- وضوح: 0.3 سانتی متر
- زاویه اندازه گیری: 30 درجه
- عرض پالس ورودی تریگر: پالس TTL 10uS
- سیگنال خروجی اکو: پالس TTL متناسب با محدوده فاصله
- ابعاد: 45mm x 20mm x 15mm
نحوه کار
سنسور اولتراسونیک از سونار برای تعیین فاصله تا یک جسم استفاده می کند. این چیزی ست که اتفاق می افتد:
فرستنده اولتراسوند (پین trig) صدایی با فرکانس بالا (40 کیلوهرتز) منتشر می کند.
صدا در هوا حرکت می کند. اگر به یک شی برخورد کند، به ماژول باز می گردد و اکو اتفاق میافتد.
گیرنده اولتراسوند (پین اکو) صدای منعکس شده (اکو) را دریافت می کند.

زمان بین ارسال و دریافت سیگنال به ما امکان می دهد فاصله تا یک جسم را محاسبه کنیم زیرا ما سرعت صوت در هوا را می دانیم. فرمول به این صورت است:
distance to an object = ((speed of sound in the air)*time)/2
سرعت صوت در هوا در 20 درجه سانتیگراد (68 درجه فارنهایت) = 343 متر بر ثانیه
پین اوت سنسور آلتراسونیک HC-SR04

در اینجا پین اوت سنسور اولتراسونیک HC-SR04 آمده است.
VCC | Powers the sensor (5V) |
Trig | Trigger Input Pin |
Echo | Echo Output Pin |
GND | Common GND |
آردوینو با سنسور آلتراسونیک HC-SR04

این سنسور برای استفاده در آردوینو بسیار محبوب است. بنابراین، در اینجا مثالی از نحوه استفاده از سنسور اولتراسونیک HC-SR04 با آردوینو ارائه می دهیم. در این پروژه سنسور اولتراسونیک فاصله یک جسم را در مانیتور سریال می خواند و می نویسد.
هدف این پروژه کمک به شما در درک نحوه عملکرد این سنسور است. سپس، شما باید بتوانید از این مثال در پروژه های خود استفاده کنید.
اتصال سنسور آلتراسونیک HC-SR04 به آردوینو
برای اتصال سنسور آلتراسونیک HC-SR04 به آردوینو، شماتیک بعدی را دنبال کنید.

جدول زیر اتصالاتی را که باید ایجاد کنید نشان می دهد:
Ultrasonic Sensor HC-SR04 | Arduino |
VCC | 5V |
Trig | Pin 11 |
Echo | Pin 12 |
GND | GND |
کد
کد زیر را در آردوینو IDE خود آپلود کنید.
/*
* created by Rui Santos, https://randomnerdtutorials.com
*
* Complete Guide for Ultrasonic Sensor HC-SR04
*
Ultrasonic sensor Pins:
VCC: +5VDC
Trig : Trigger (INPUT) - Pin11
Echo: Echo (OUTPUT) - Pin 12
GND: GND
*/
int trigPin = 11; // Trigger
int echoPin = 12; // Echo
long duration, cm, inches;
void setup() {
//Serial Port begin
Serial.begin (9600);
//Define inputs and outputs
pinMode(trigPin, OUTPUT);
pinMode(echoPin, INPUT);
}
void loop() {
// The sensor is triggered by a HIGH pulse of 10 or more microseconds.
// Give a short LOW pulse beforehand to ensure a clean HIGH pulse:
digitalWrite(trigPin, LOW);
delayMicroseconds(5);
digitalWrite(trigPin, HIGH);
delayMicroseconds(10);
digitalWrite(trigPin, LOW);
// Read the signal from the sensor: a HIGH pulse whose
// duration is the time (in microseconds) from the sending
// of the ping to the reception of its echo off of an object.
pinMode(echoPin, INPUT);
duration = pulseIn(echoPin, HIGH);
// Convert the time into a distance
cm = (duration/2) / 29.1; // Divide by 29.1 or multiply by 0.0343
inches = (duration/2) / 74; // Divide by 74 or multiply by 0.0135
Serial.print(inches);
Serial.print("in, ");
Serial.print(cm);
Serial.print("cm");
Serial.println();
delay(250);
}
نحوه کار کد
ابتدا متغیرهایی را برای تریگر و پین اکو ایجاد می کنید که به ترتیب trigPin و echoPin نامیده می شوند. پین تریگر به پین دیجیتال 11 و پین اکو به پین 12 وصل می شود:
int trigPin = 11;
int echoPin = 12;
شما همچنین سه متغیر از نوع long ایجاد می کنید: مدت زمان و فاصله. متغیر مدت زمان بین انتشار و دریافت سیگنال ذخیره می کند. متغیر cm فاصله را بر حسب سانتی متر و متغیر اینچ فاصله را بر حسب اینچ ذخیره می کند.
long duration, cm, inches;
در setup()، پورت سریال را با نرخ باود 9600 مقداردهی کنید و پایه تریگر را به عنوان OUTPUT و پین اکو را به عنوان ورودی تنظیم کنید.
//Serial Port begin
Serial.begin (9600);
//Define inputs and outputs
pinMode(trigPin, OUTPUT);
pinMode(echoPin, INPUT);
در loop()، با ارسال یک پالس HIGH به مدت 10 میکروثانیه، سنسور را فعال کنید. اما قبل از آن، یک پالس LOW کوتاه بدهید تا مطمئن شوید که یک پالس HIGH مناسب دریافت خواهید کرد:
digitalWrite(trigPin, LOW);
delayMicroseconds(5);
digitalWrite(trigPin, HIGH);
delayMicroseconds(10);
digitalWrite(trigPin, LOW);
ما از تابع pulseIn () برای دریافت زمان موج صوتی استفاده می کنیم:
duration = pulseIn(echoPin, HIGH);
سپس فاصله یک جسم را با در نظر گرفتن سرعت صدا محاسبه می کنیم.
distance = (traveltime/2) x speed of sound
The speed of sound is: 343m/s = 0.0343 cm/uS = 1/29.1 cm/uS
Or in inches: 13503.9in/s = 0.0135in/uS = 1/74in/uS
باید زمان را بر 2 تقسیم کنیم زیرا باید در نظر بگیریم که موج ارسال شده، به جسم برخورد کرده و سپس به سنسور برگشته است.
cm = (duration/2) / 29.1;
inches = (duration/2) / 74;
در نهایت نتایج را در مانیتور سریال چاپ می کنیم:
Serial.print(inches);
Serial.print("in, ");
Serial.print(cm);
Serial.print("cm");
Serial.println();
کد با کتابخانه NewPing
همچنین می توانید از کتابخانه NewPing استفاده کنید. کتابخانه را از اینجا دانلود کنید.
پس از نصب کتابخانه NewPing، می توانید کد ارائه شده در زیر را آپلود کنید.
/*
* Posted on https://randomnerdtutorials.com
* created by http://playground.arduino.cc/Code/NewPing
*/
#include
#define TRIGGER_PIN 11
#define ECHO_PIN 12
#define MAX_DISTANCE 200
// NewPing setup of pins and maximum distance
NewPing sonar(TRIGGER_PIN, ECHO_PIN, MAX_DISTANCE);
void setup() {
Serial.begin(9600);
}
void loop() {
delay(50);
unsigned int distance = sonar.ping_cm();
Serial.print(distance);
Serial.println("cm");
}
نحوه کار کد
بدست آوردن فاصله تا یک شی با استفاده از کتابخانه NewPing بسیار ساده تر است.
شما با اضافه کردن کتابخانه NewPing شروع می کنید:
#include <NewPing.h>
سپس، تریگر و پین اکو را مشخص کنید. پین تریگر به پین دیجیتال آردوینو 11 و اکو به پین 12 وصل شده است. همچنین باید متغیر MAX_DISTANCE را تعریف کنید تا بتوانید از کتابخانه استفاده کنید.
#define TRIGGER_PIN 11
#define ECHO_PIN 12
#define MAX_DISTANCE 200
سپس، یک شی NewPing به نام sonar ایجاد می کنید:
NewPing sonar(TRIGGER_PIN, ECHO_PIN, MAX_DISTANCE);
در setup()، ارتباط سریال را با نرخ باود 9600 مقداردهی اولیه می کنید.
Serial.begin(9600);
در نهایت، در loop() فقط باید از متد ping_cm() روی شی sonar استفاده کنید تا فاصله را بر حسب سانتی متر بدست آورید.
unsigned int distance = sonar.ping_cm();
اگر می خواهید فاصله را به اینچ دریافت کنید، می توانید به جای آن از ()sonar.ping_in استفاده کنید.
نتیجه

کد را روی برد آردوینو خود آپلود کنید. سپس سریال مانیتور را با نرخ باود 9600 باز کنید.

فاصله تا نزدیکترین شی در پنجره Serial Monitor چاپ می شود.
