آموزش راه اندازی سنسور آلتراسونیک HC-SR04 {جلسه سی و یکم}

مقدمه

در این جلسه به طور کامل در مورد سنسور آلتراسونیک HC-SR04 و نحوه راه اندازی آن بحث خواهیم کرد. در خصوص راه اندازی سنسور HC-SR05 می توانید از لینک های زیر استفاده کنید:

  1. راه اندازى ماژول آلتراسونيك-بخش اول
  2. راه اندازى ماژول آلتراسونيك-بخش دوم

آلتراسونيك چيست؟

آلتراسونيك يك نوع از موج صوتي است كه فركانس آن بيشتر از محدوده شنوايي انسان است (موج فراصوت).

همانگونه که در شکل بالا مشاهده می کنید گوش انسان قادر به شنيدن امواج صوتي با نوسانات 20 هرتز (سر و صداي عميق) تا 20000 هرتز (سوت بلند) است. آلتراسونيك فركانسي بيش از 20 كيلوهرتز است و برای ما قابل شنیدن نیست.

سخت افزا SR04

هسته مركزي آن از دو مبدل آلتراسونيك تشكيل شده است. يكي از آن‌ها به‌عنوان فرستنده سيگنال های الكتريكي را به پالس‌هاي صوتي آلتراسونيك 40KHz تبديل مي‌كند. گیرنده بعد از از ارسال این پالس را دریافت می کند و عرض اين پالس جهت تعيين فاصله‌اي كه موج طي كرده است به کار برده می شود.

مشخصات فنی این سنسور به صورت زیر است:

DC 5V ولتاژ كاري
15mA جريان كاري
40KHz فركانس كاري
4m بیشترین رنج فاصله سنجي
2cm کمترین رنج فاصله سنجي
3mm دقت فاصله سنجي
15degree زاويه اندازه گيري
10µS TTL pulse سيگنال تريگر
45x20x15mm ابعاد

پایه های SR04

 

  1. VCC : پين تغذيه ماژول است که به پين 5 ولت آردوينو وصل می شود.
  2. Trig : اين پين براي فعالسازی پالس صوتي آلتراسونیك به کار برده می شود.
  3. Echo : هنگامی که سيگنال برگشتی دريافت مي‌شود، يك پالس توليد شود که طول این پالس متناسب با مدت زمان رفت و برگشت سیگنال ارسالی است.
  4. GND : پين اتصال به زمين سنسور است كه به زمين آردوينو اتصال می یابد.

نحوه کارکرد SR04

برای شروع کار يك پالس تريگر 10 ميكروثانيه‌اي به پين Trig اعمال شود، سنسور فعال می شود و هشت پالس صوتي 40 کیلوهرتزی را روانه می کند. اين رشته پالس هشت تايي به‌ نوعی امضاي منحصربفرد سنسور ساطع کننده امواج است و به گيرنده سنسور اجازه تشخيص سيگنال های ساطع شده همان سنسور را در بين ساير سيگنال‌هاي آلتراسونيكي كه احتمالاً در محيط بسیاز زیاد وجود دارند، خواهد داد (محافظت در برابر نويز آلتراسونيكي محيط).

هنگام ارسال پالس، مقدار پين Echo به‌صورت High است تا فرايند دريافت سيگنال برگشتي را شروع كند. در صورتی که سيگنال برگشتي وجود نداشته باشد، مقدار پين Echo پس از مدت زماني 38 میلی‌ثانیه مجدداً Low  می شود. بنابراين مي‌توان گفت كه پالس 38 میلی‌ثانیه بدین معنی است كه هيچگونه مانعي تا فاصله 4 متری سنسور وجود ندارد.

در صورت بازگشت پالس های ارسالی، به‌ محض دريافت توسط گيرنده سنسور مقدار پایه Echo به‌صورت Low در خواهد آمد. بنابراين با توجه به میزان زمان بازگشتی پالس از لحظه ارسال تا لحظه دریافت، يك پالس متناسب با عرض 150µs(میکروثانیه) تا 25ms(میلی ثانیه) توليد خواهد شد. همانگونه که در شکل زیر مشاهده می کنید در صورتی که مانع وجود داشته باشد یک مدت زمانی طول می کشد تا سیگنال مسیر رفت و برگشت را طی کند که در اینجا زمان آن را با T نشان داده ایم.

محاسبه عرض پالسSR04

برای محاسبه عرض پالس که در شکل بالا نشان داده شده است بهتر است ابتدا فرمول مسافت را مرور کنیم:

X:مسافت 

ٰV: سرعت 

T: زمان 

طبق فرمول مسافت X=V*T یعنی اینکه مسافت طی شده برابر است با سرعت ضربدر مدت زمان 

در فرمول بالا سرعت نور 340m/s است که همیشه ثابت است. فقط کافی است زمان رفت و برگشت سیگنال ارسالی را داشته باشیم تا مسافت طی شده را بدست آوریم. حال فرض کنید زمان رفت و برگشت سیگنال ارسالی مثلا 200µs باشد. سرعت نور هم بر حسب cm/µs برابر با 0.034cm/µs است. بنابراین فاصله مانع تا سنسور به صورت زیر است:

6.8=X=0.034*200 

چون مسافتی که سیگنال تا مانع طی می کند رفت و برگشتی است می بایست عدد به دست آمده را بر دو تقسیم کنیم که نتیجه 6.8/2 یعنی 3.4 سانتی متر است.

سیم کشی

برای اتصال سنسور به آردوینو کافی است پين VCC و GND آن را به ترتيب به پين 5 ولت و زمين آردوينو اتصال دهید. پایه های Trig و Echo نیز به هر کدام از پایه های Digital I/O  در آردوینو می توانید متصل کنید که ما به پایه 9 و پایه 10 متصل کرده ایم. در حقیقت پایه تریگ به عنوان خروجی تعریف می شود و پایه اکو به عنوان ورودی تعریف می شود.

کد آردوینو برای راه اندازی سنسور

ابتدا کتابخانه NewPing را از لینک زیر دانلود میکنیم:

جهت نصب آن نرم‌افزار Arduino IDE را باز كنيد و به Sketch > Include Library > Add .ZIP Library رفته و فايل دانلود شده‌ي NewPing.ZIP  را انتخاب میکنید.

كتابخانه NewPing مي‌تواند تا 15 سنسور را به صورت همزمان راه اندازی كند و خروجي را مطابق واحد‌هاي سانتي‌متر، اينچ و فاصله زماني ارائه دهد.

کد آردوینو:

// Include NewPing Library
#include "NewPing.h"

// Hook up HC-SR04 with Trig to Arduino Pin 9, Echo to Arduino pin 10
#define TRIGGER_PIN 9
#define ECHO_PIN 10

// Maximum distance we want to ping for (in centimeters).
#define MAX_DISTANCE 400	

// NewPing setup of pins and maximum distance.
NewPing sonar(TRIGGER_PIN, ECHO_PIN, MAX_DISTANCE);

void setup() {
	Serial.begin(9600);
}

void loop() {
	Serial.print("Distance = ");
	Serial.print(sonar.ping_cm());
	Serial.println(" cm");
	delay(500);
}

که خروجی آن بر روی سریال مانیتور را در زیر مشاهده میکنید:

ابتدا کتابخانه نیوپینگ را با استفاده از کد زیر فراخوانی می کنیم:

#include "NewPing.h"
 با کمک دو خط اول کد زیر پایه های 9 وپ 10 را به عنوان خروجی و وردوی تعریف میکنیم. پایه 9 را به تریگر و پایه 10 را به اکو متصل می کنیم. همچنین یک مقدار ثابت با نام MAX_DISTANCE تعریف میکنیم. این مقدار حد ماکزیمم فاصله ای است که به عنوان ناحیه پینگ شناخته می شوند. به صورت دیفالت بر روی 500 سانتی متر قرار دارد که ما آن را بر روی 400 تنظیم کردیم.
#define TRIGGER_PIN 9
#define ECHO_PIN 10
#define MAX_DISTANCE 400

پس از آن sonar را از کتابخانه NewPing فراخوانی میکنیم:

NewPing sonar(TRIGGER_PIN, ECHO_PIN, MAX_DISTANCE);

ارتباط سریال نیز بر روی 9600 قرار می دهیم:

void setup() {
	Serial.begin(9600);
}

در حلقه ما تابع ()ping_cm را فراخوانی می کنیم. این تابع یک پینگ ارسال می کند و در پنجره سریال مانیتور فاصله بر حسب سانتی متر را به ما نشان داده می شود.

void loop() {
	Serial.print("Distance = ");
	Serial.print(sonar.ping_cm());
	Serial.println(" cm");
	delay(500);
}

اگر قصد داشتید فاصله ها بر حسب اینچ باشد می توانید از تابع زیر به جای ()ping_cm استفاده کنید.

Serial.print(sonar.ping_in());

کد فوق داراي رزولوشن يك سانتی‌متر است. اگر قصد دارید فاصله با دقت اعشار اندازه‌گيري شود مي‌بایست بجاي اينكه از NewPing در مد distance استفاده كنيد، آن را در مد duration بكار ببرید. که لازم است به جای کد زیر:

Serial.print(sonar.ping_cm());

از این کد بجای آن استفاده کنید:

Serial.print((sonar.ping() / 2) * 0.0343);

جهت افزایش دقت SR04 مي‌توان از تابع ديگري با نام “iterations” از كتابخانه NewPing استفاده کرد. که به معني تكرار كردن بوده و مفهوم آن این است كه به سراغ چيزي بيش از یک‌ بار برويم که همان كاري است كه مد iteration mode  برای ما انجام میدهد. با چندین بار خواندن، داده های نامعتبر حذف می شود و متوسط بقيه اندازه‌گيري‌ها محاسبه می شود. به‌صورت دیفالت، 5 بار اندازه‌گیری انجام می شود. اما تعداد اندازه گیری های آن را می توانید افزایش دهید.

int iterations = 5;
Serial.print((sonar.ping_median(iterations) / 2) * 0.0343);

اتصال سه سیم سنسور

در این حالت چهارپایه سنسور به سه پایه آردوینو متصل متصل می شود. بسياري از سنسورهاي آلتراسونيك نظير سنسور parallax ping بر مبناي اين مد كار مي‌كنند. زیرا فقط سه پایه دارند:

در این مد یک پایه آردوینو هم به عنوان ورودی و هم به عنوان خروجی تعریف می شود زیرا هیچ موقع ورودی و خروجی به صورت همزمان به کار برده نمی شوند یعنی ابتدا باید سیگنالی فرستاده شود سپس سیگنالی دریافت شود. با اینکار یک پین آردوینو آزاد می شود و می توان برای کاربردهای دیگر از آن بهره برد. یا در چیپ هایی نظیر ATtiny85 که تعداد پین های I/O آنها محدود است استفاده از این مد بسیار مفید است.

در زير نحوه اتصال HC-SR04 در مد سه سيم به آردوينو را مشاهده می کنید.

 

تنها تفاوتی که در کد به وجود می آید این است که دو پایه Trig و Echo به صورت یکسان به پایه 9 آردوینو متصل شوند که هم به عنوان ورودی و هم به عنوان خروجی به کار برده شود. بقیه کد هیچ تفاوتی ندارد.

#define TRIGGER_PIN 9 // Trigger and Echo both on pin 9
#define ECHO_PIN 9

 

معایب سنسورSR04

  1. حداکثر فاصله ای که سنسور می تواند تشخیص دهد حدودا 4 متر است.
2. اگر سطح مورد نظر سیقلی باشد و در زاویه مایل کمتر از 45 درجه نسبت به سطح زمین سیگنال ارسال شود احتمال نرسیدن سیگنال اکو به گیرنده وجود دارد که یک عیب است.
  • اندازه مانع پيش روي سنسور آنقدر كوچك باشد كه سيگنال برگشتي به سمت سنسور بازگشت داده نشود. همچنين، اگر سنسور آلتراسونیک SR04 در پائين وسيله مورد نظر كار گذاشته شود، ممكن است هيچ سيگنالي از سمت سطح برگشت داده نشود.
  • اجسام نرم و غیرمنظم معمولا مقداری از سیگنال ارسالی را جذب میکنند و باعث بروز خطا می شوند.

 

شرایط غیرعادی

 دقت کنید که سرعت صوت که در بالا بیان نمودیم برای شرایط عادی است.سرعت صوت در هوا به ميزان دما، فشار و رطوبت بستگی دارد و با آنها تغییر میکند. بنابراین در شرایط غیرعادی که دما و فشار و رطوبت بیشتر از حد معمول است می بایست سرعت صوت را اصلاح کنید که می توانید از رابطه زیر کمک بگیرید.

Speed of Sound (m/s) = 331.4 + (0.606 * Temp) + (0.0124 * Humidity)

 

این جلسه نیز به پایان رسید. در صورتی که نیاز به اطلاعات اضافی داشتید می توانید در قسمت کامنت ها بیان نمایید تا مطالب وب سایت آپدیت شوند.

دوستان عزیز بیشتر دوره های مربوط به این وب سایت رایگان می باشد. در صورت تمایل می توانید به اندازه وسع مالی خود(هر چند ناچیز) جهت پرداخت هزینه های نگهداری وب سایت از ما حمایت کنید:

مثل همیشه میتوانید ما را در تلگرام و یا اینستاگرام دنبال کنید‌:

اشتراک گذاری:
مطالب زیر را حتما بخوانید

دیدگاهتان را بنویسید